3. DNS资源记录类型详解

DNS 的本质是一套“分布式键值数据库”,而资源记录(Resource Record,RR)就是数据库中的条目。每条记录都遵循统一的格式:名称 TTL 类别 类型 数据。其中“名称”是被查询的域名,“TTL”是缓存存活秒数,“类别”几乎总是 IN(Internet),“类型”决定数据字段的含义。理解每种记录的数据格式与用途,是排查解析异常、规划域名体系的基础。

下面先给出一个整体视图,把常见记录按“正向解析、邮件、服务发现、反向解析、区域控制”五类归位,并标出它们之间的引用关系。

DNS 资源记录分类与引用关系 正向解析 A → IPv4 地址 AAAA → IPv6 地址 CNAME → 别名指向 邮件路由 MX → 邮件交换器 优先级 + 主机名 依赖 A / AAAA 解析 服务发现 SRV → 服务位置 优先级/权重/端口/目标 TXT → 验证与策略 反向解析 PTR → 地址反查域名 in-addr.arpa / ip6.arpa 区域控制与授权 SOA → 区域权威参数 NS → 权威服务器 SOA 序列号驱动从服务器区域传送(AXFR/IXFR) MX / SRV / NS 的目标字段通常需要再经 A 或 AAAA 记录解析为 IP 地址

A 与 AAAA:最基础的正向映射

A 记录把域名映射到 IPv4 地址,数据字段就是一个点分十进制地址;AAAA 记录对应 IPv6,数据字段是冒号十六进制地址。它们是绝大多数解析的终点。例如在区域文件中:

www     3600  IN  A     192.0.2.10
www     3600  IN  A     192.0.2.11
ipv6    3600  IN  AAAA  2001:db8::10

同一个名称可以配置多条 A 记录,形成简单的轮询负载均衡。需要注意 TTL 的取舍:TTL 越大,递归服务器缓存越久,权威端变更生效越慢;TTL 越小,查询压力越大。做迁移切换前,通常先把 TTL 降到 300 秒左右,切换完成后再调回。

CNAME:别名与它的边界

CNAME 表示“这个名称是另一个名称的别名”,数据字段是目标规范名。解析器遇到 CNAME 会继续查询目标名,直到拿到 A/AAAA。典型用法是把 mail.example.com 指向 mail.provider.net,或把 ftp 指向 www。

关键约束:CNAME 不能与其他类型记录共存于同一名称。因此根域名 example.com 通常不能直接设 CNAME,因为它必须同时拥有 SOA 和 NS。若确实需要根域名跳转,应使用 A 记录或厂商提供的 ALIAS/ANAME 类扩展。此外,MX、NS 的目标字段必须是主机名,不能指向一个 CNAME。

MX:邮件投递的优先级

MX 记录的数据字段由“优先级 + 邮件服务器主机名”组成,数值越小优先级越高。发件方会先尝试优先级最小的主机,失败后再尝试次优先。示例:

example.com.   3600  IN  MX  10  mail1.example.com.
example.com.   3600  IN  MX  20  mail2.example.com.

MX 的目标必须是可解析的主机名,且该主机名应有对应的 A/AAAA 记录。若目标写成 CNAME,部分邮件系统会判定为不合规而拒收。只收不发或使用第三方邮件网关时,MX 指向对方提供的主机名即可。

NS 与 SOA:区域的两块基石

NS 记录声明某个区域由哪些权威服务器负责,数据字段是服务器主机名。父区(如 com)通过 NS 把子区 example.com 的查询委派给子区自己的服务器,这是 DNS 分层授权的实现方式。一个区域至少要有两条 NS,且应分布在不同网络或不同服务商,避免单点失效。

SOA 记录每个区域有且仅有一条,数据字段包含七个部分:主权威服务器名、管理员邮箱(@ 写成点)、序列号、刷新间隔、重试间隔、过期时间、否定缓存 TTL。示例:

example.com.  3600  IN  SOA  ns1.example.com. admin.example.com. (
        2024051501 ; 序列号
        7200       ; 刷新
        3600       ; 重试
        1209600    ; 过期
        300 )      ; 否定缓存 TTL

序列号是主从同步的核心:从服务器发现主服务器序列号变大,才触发区域传送。修改区域后忘记递增序列号,是从服务器“看起来没更新”的最常见原因。序列号常用 YYYYMMDDnn 格式,便于人工识别。

TXT:从验证到策略

TXT 记录承载任意文本,数据字段是一段或多段字符串。它最常见的用途是域名所有权验证(如 SPF、DKIM、站点验证)和邮件策略发布。例如 SPF 声明哪些主机可以代表本域发信:

example.com.  3600  IN  TXT  "v=spf1 mx ip4:192.0.2.0/24 -all"

一条 TXT 的字符串总长超过 255 字节时,需要拆成多个引号片段,解析时会自动拼接。DKIM 公钥通常放在 selector._domainkey.example.com 这类名称下,长度较长,配置时要特别注意不要漏掉分号或引号。

SRV:把服务位置写进 DNS

SRV 记录用于声明某服务运行在哪台主机、哪个端口,数据字段为“优先级 权重 端口 目标主机”。名称格式固定为 _服务._协议.域名。例如:

_sip._tcp.example.com.  3600  IN  SRV  10 60 5060 sipserver.example.com.

优先级决定尝试顺序,权重在同一优先级内按比例分配流量。SRV 广泛用于 SIP、LDAP、XMPP 以及 Kubernetes 等场景。目标主机同样需要 A/AAAA 记录支撑。

PTR:反向解析

PTR 记录把 IP 地址映射回域名,存放在 in-addr.arpa(IPv4)或 ip6.arpa(IPv6)区域中。IPv4 的地址段要倒序书写,例如 192.0.2.10 对应 10.2.0.192.in-addr.arpa。PTR 常用于邮件服务器反向校验、日志溯源和网络审计。需要注意的是,PTR 区域通常由 IP 地址的持有者(运营商或云厂商)管理,用户往往无法自行添加,只能提交申请。

排查解析问题时,可用 dig www.example.com A、dig example.com MX、dig -x 192.0.2.10 分别验证正向、邮件与反向记录,并观察 ANSWER SECTION 中的 TTL 与目标值是否符合预期。
修改区域文件后务必递增 SOA 序列号并执行语法检查(如 named-checkzone example.com db.example.com),否则从服务器不会同步,且错误配置可能导致整个区域加载失败。

把上述记录放在一起看,就能理解一次完整访问背后的链条:浏览器查 A/AAAA 拿到 IP;邮件系统查 MX 找到收信主机;客户端查 SRV 定位服务端口;而 NS、SOA 决定了这一切由谁权威回答、如何同步。掌握每种记录的字段含义与使用边界,才能在真实环境中写出既正确又可维护的区域数据。