DNS 解析排查:把递归缓存、权威记录和委派链分开看

10-01 3阅读

域名修改后,有人能访问、有人仍到旧地址,不能只说“等 DNS 传播”。应先确认是谁回答了查询,以及差异发生在哪一层。本文基于 BIND 9.20 系列 dig 的常用选项,适合排查自己管理的公开域名。示例域名和文档用 IP 必须替换;企业内部名称不要随意发送给公共解析服务。

DNS 解析排查:把递归缓存、权威记录和委派链分开看

AI生成概念配图:客户端通过递归解析器查询权威来源。仅辅助理解,不代表真实界面或实测结果。

先保留完整答案

dig -v
dig -r www.example.com A
dig -r www.example.com AAAA
dig -r example.com NS

-r 用于忽略个人 .digrc,减少隐藏选项干扰。先不要只用 +short,因为完整输出中的 status、flags、SERVER、TTL 和各个区段都是证据。记录查询时间、网络位置和目标类型。A 正常不代表 AAAA 正常,浏览器走 IPv6 时可能遇到另一条故障路径;CNAME 还意味着要继续检查它指向的名字。

明确指定解析器时可以比较多个观察点,但这些解析器仍可能使用不同缓存、地理调度和策略。结果不同不一定是某一方错误。尤其存在分视图 DNS 时,办公网与公网返回不同地址可能正是设计目标,排障前应先确认预期。

把递归答案与权威答案对照

# 文档示例地址,请换成实际解析器 IP
dig -r @192.0.2.53 www.example.com A
# 从已确认的委派信息获取实际权威服务器后再查询
dig -r @ns1.example.net www.example.com A +norecurse
dig -r @ns1.example.net example.com SOA +norecurse

+norecurse 清除请求中的递归意愿,并不自动证明目标服务器就是权威服务器。应检查回答的 aa 标志、区域关系和委派来源。逐个查询实际权威服务器:若它们对同一记录给出矛盾结果,先处理发布、区域同步或配置差异;若权威一致而递归仍旧,再结合缓存期限与查询路径判断。

SOA 序列号可帮助对照传统区域更新,但不能脱离托管 DNS 的实现约定单独下结论。某些动态答案本来就会按位置或请求条件变化。工程上更有价值的是保存“查询哪台服务器、哪种记录、得到什么状态”,而不是截图一条看似正确的 IP。

正确区分不存在、无该类型和失败

NXDOMAIN 表示查询名字不存在;NOERROR 却没有目标类型答案,可能是该名字存在但没有这种记录,也可能需要继续分析别名或委派区段。SERVFAIL 表示解析失败,原因可能包括 DNSSEC 验证、权威不可达等。超时则说明没有在等待窗口拿到答案,不能据此认定记录不存在。

否定答案也可以被缓存,相关时限由响应中的 SOA 信息参与决定。新建记录后,旧的“不存在”结果可能暂时仍被复用。修改 TTL 不会让已经发出去的旧缓存立刻消失,因此计划变更时应提前考虑旧 TTL 和否定缓存,而不是事后反复删除重建记录。

最后追踪委派与传输

dig -r www.example.com A +trace
dig -r @192.0.2.53 www.example.com A +tcp

+trace 从本机沿委派路径发起迭代查询,不等于指定递归解析器内部的完整工作过程,也不是一份自动完成的 DNSSEC 安全结论。本机若无法直连外部 DNS,追踪可能失败;TCP 对照则有助于定位传输差异。不要为了让测试通过而长期关闭验证或放宽网络策略。

最终结论应明确落在权威数据、委派、递归缓存、验证或网络中的某一层,并给出复查命令。这样下一次变更时,维护者才知道应该改配置、等缓存,还是修复链路。

参考资料

文章版权声明:除非注明,否则均为云鹊BLOG原创文章,转载或复制请以超链接形式并注明出处。