← 全部笔记

DNS 排查:一次解析到底经过了谁

2026-10-28 网络与协议 约 8 分钟

「域名解析有问题」这句话下面其实藏着好几种完全不同的故障: 记录没配、TTL 还没过期、本机 /etc/hosts 挡了、或者解析器本身不可用。 要分清,就得知道一次解析经过哪些角色。

一、两类服务器

  • 递归解析器(recursive resolver):你电脑配置的那个(运营商 DNS、8.8.8.8、 223.5.5.5)。它负责替你把问题问到底,并把结果缓存起来。
  • 权威服务器(authoritative):域名的 NS 记录指向的那台,保存着真正的记录。 它只回答自己负责的域,不做转发。

递归解析器找不到缓存时,会从根开始逐级问:

根服务器  →  问 "com 的权威在哪"
.com      →  问 "example.com 的权威在哪"
example.com 的权威  →  给出 A 记录

这条链路可以用 dig +trace 完整看到,排查「到底哪一级不对」时非常有用。

二、常见记录类型

类型 作用
A / AAAA IPv4 / IPv6 地址
CNAME 别名,让解析转到另一个名字上
MX 邮件服务器,带优先级数字,小的优先
TXT 任意文本,常用于域名验证、SPF
NS 这个域由哪几台服务器负责
CAA 只允许哪些 CA 给这个域签证书

CNAME 有一个硬规则:同一个名字上不能再有别的记录(DNSSEC 相关记录除外)。 所以 example.com 若已有一条 CNAME,就不能同时挂 MX 和 TXT—— 这是很多人给根域加 CDN 后邮件收不到的原因。

三、dig 怎么读

dig example.com A            # 默认问本机配置的解析器
dig @8.8.8.8 example.com A   # 指定解析器
dig @ns1.example.com example.com A   # 直接问权威(跳过缓存)
dig example.com A +short     # 只要答案
dig +trace example.com       # 从根开始逐级追踪

输出里这几个字段值得看:

  • status: NOERROR 正常。若 ANSWER: 0,说明名字存在但没有这类记录。
  • status: NXDOMAIN 这个名字不存在。
  • status: SERVFAIL 解析器自己出了问题(上游超时、DNSSEC 验证失败等),不是域名没配。
  • ;; SERVER: 实际回答你的是哪台,确认有没有走你预期的解析器。
  • 记录后的数字(如 300)是剩余 TTL,秒。

四、NXDOMAIN 和「查到了但空」不是一回事

这一条能把排查方向直接分开:

  • NXDOMAIN:这个名字在权威上根本不存在 → 记录没加,或者名字拼错了。
  • NOERROR + ANSWER 0:名字存在,但没有你要的那类记录 → 比如只配了 A 没配 AAAA,查 AAAA 就是这个结果。

还有第三种:返回了记录但指向 0.0.0.0 或内网地址——那是有人故意用解析层做拦截, 不是 DNS 故障。

五、TTL 与「改了不生效」

TTL 的单位是秒,表示「这个答案最多可以被缓存多久」。 改记录之前如果原来的 TTL 是 86400(一天),那么旧值最长会留一天——所以变更前一天就该把 TTL 调小:

# 变更前:把 TTL 降到 300,等旧 TTL 自然过期
example.com.  300  IN  A  203.0.113.10

# 变更后再按需调回

另外几个会挡住「新记录」的地方,按发生频率排:

  1. 本机 /etc/hosts(Windows 是 C:\Windows\System32\drivers\etc\hosts)里有旧条目。
  2. 系统或浏览器自己的 DNS 缓存。
  3. 递归解析器缓存还没到期的旧答案。
  4. 权威服务器有多个、其中一个还没同步(serial 不一致)。
# 清本机缓存
sudo systemd-resolve --flush-caches      # 或 sudo resolvectl flush-caches

# 看权威的 serial 是否一致(改过应当递增)
dig @ns1.example.com example.com SOA +short
dig @ns2.example.com example.com SOA +short

六、一个实用的排查顺序

  1. dig @权威服务器 域名 类型 —— 记录本身对不对。
  2. dig @8.8.8.8 域名 类型 —— 公共解析器怎么看(有没有缓存旧值)。
  3. dig 域名 类型 —— 本机配置的解析器怎么说。
  4. 三级结果不一致,问题就落在缓存或那一级解析器上,而不是记录配置。

一句话总结:先 dig 权威服务器确认记录本身对不对,再看递归解析是不是缓存了旧值;NXDOMAIN 是「没这个名字」,空回答是「有名字没这类记录」。