dig 返回码解读

排查解析异常先看状态码:NOERROR 正常(可能无记录);NXDOMAIN 记录不存在;SERVFAIL 权威侧处理失败或超时;REFUSED 查询被拒绝。状态码决定排查方向,别把它们混为一谈。

dig 返回码怎么读

解析排查的第一步不是看有没有结果,而是看状态码(status)。NOERROR 表示查询成功,但要区分「有记录」和「成功但没有该类型的记录」这两种情况;NXDOMAIN 明确表示这个域名不存在;SERVFAIL 说明权威侧处理失败或超时,通常是上游问题;REFUSED 表示查询被拒绝,多与访问控制或问错了服务器有关。把状态码认错,排查方向会整个跑偏。

基本信息

工具dig(BIND 工具集),Windows 侧可用 nslookup 对照
关键字段status 状态码、ANSWER 段记录、SERVER 应答服务器
组合参数+noall +comments 只输出头部信息,便于看状态码
逐级排查+trace 从根开始展示委派链
指定服务器@服务器地址 排除本地缓存干扰
报障要件status、查询的服务器、时间点,三者缺一不可

典型使用场景

  • 应用报「域名解析失败」,先分清是记录不存在还是服务器处理失败
  • 验证新加的解析记录是否已生效,排除本地缓存干扰
  • 确认故障是全局还是仅某个解析器视角
  • 向解析服务商提工单时,提供可直接复现的命令与输出
  • 迁移与委派变更后,逐级验证委派链是否完整

状态码与排查方向

状态含义常见原因与下一步
NOERROR查询成功注意区分有无目标记录:无记录时 ANSWER 段为空
NXDOMAIN域名不存在拼写错误、记录被删、委派缺失
SERVFAIL权威处理失败或超时权威不可达、DNSSEC 配置错误、上游故障
REFUSED查询被拒绝ACL 限制,或查询了不提供递归的服务器
超时无响应没有任何应答网络不通、53 端口被拦、权威宕机

查看完整状态信息

查看完整状态信息
dig www.example.com +noall +comments | grep -i status   # 只看状态码
dig www.example.com +noall +answer                      # 只看记录
dig www.example.com @8.8.8.8 +short                     # 换公共解析器对照
dig www.example.com @<权威NS> +noall +comments           # 直接问权威,排除缓存
dig +trace www.example.com                              # 逐级检查委派链
dig www.example.com +tcp                                # TCP 方式,排除大包被丢的影响
NOERROR 但 ANSWER 为空是容易被忽略的一种情况:查询成功了,只是这个域名下没有该类型的记录。它和 NXDOMAIN 的意义不同,前者说明域名存在但记录缺失,后者说明域名整体不存在,排查方向完全不同。
报障时让查询方提供完整输出(含 status、查询的服务器与时间点),能减少一轮往返。只描述「解析不了」时,对方无法判断是缓存问题、权威问题还是本机网络问题。

易错点

  • 把 SERVFAIL 当作记录不存在处理,去错误的地方加记录,问题反而更复杂
  • 忽略 NOERROR 但无记录的情况,误判为解析服务异常
  • 只查一次不看查询的服务器,本地缓存与运营商劫持都被当成权威结果
  • 拿不到完整输出,无法复现问题,排障变成反复猜测
  • 忽略 TCP 53 与大响应场景,UDP 不通就断言解析服务故障

数据来源与参考

  • dig 工具文档(BIND)
  • DNS 错误码通用说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌