Domain IP Lookup

四种结果,四种不同的后续处理

NXDOMAIN域名不存在,永远不值得重试
超时未在规定时间内收到应答,通常是暂时的
SERVFAIL服务器无法处理请求,有时是暂时的
REFUSED按策略被拒绝,很少是故障,也很少是暂时的
故障排查

DNS 超时与 SERVFAIL 有何区别

3 分钟阅读

并非所有失败的 DNS 查询都以同样的方式失败。除 NXDOMAIN 之外,最常见的两种失败是超时和 SERVFAIL。从外部看,它们很相似,都是没有拿到可用的应答,但背后的根本原因却大不相同。

超时:应答没有按时到达

超时的意思正如字面所示:查询已经发出,但在设定的等待时间内没有收到任何响应。原因可能是权威服务器过载、网络路径上某处发生丢包,或者防火墙悄悄丢弃了 DNS 流量而不是直接拒绝。从查询方的角度看,超时与服务器根本不存在没有区别,二者都只是一片沉默。

SERVFAIL:应答到了,内容是“我处理不了”

SERVFAIL 是一个真实的响应,而不是沉默。作答的服务器明确表示,它在处理这次查询时遇到了问题,比如区域配置错误、DNSSEC 验证失败,或解析器一端的内部错误。收到 SERVFAIL,说明服务器一侧确实发生了具体的情况;而超时则几乎无法告诉您问题究竟出在哪里。

状态发生了什么值得重试吗?
超时在等待窗口内完全没有收到响应值得,通常是暂时性的
SERVFAIL服务器有响应,但无法处理该查询有时值得,可以带退避重试 2-3 次
REFUSED服务器理解了请求,但拒绝作答,通常出于策略很少值得,往往是持续存在的访问限制
NXDOMAIN该名称不存在,到此为止不值得,这是永久性的应答

由于二者都可能是暂时性的,实践中的正确处理方式是一样的:用指数退避重试少数几次,只有重试耗尽之后才报告真正的失败。本工具对这两种状态的处理,正是与直接失败的 NXDOMAIN 区别对待的。

REFUSED 通常意味着策略,而非故障

REFUSED 常被和 SERVFAIL 混为一谈,因为二者都是“服务器说了不”,而不是沉默,但背后的原因通常大不相同。域名服务器返回 REFUSED,常见情形有:它被配置为只为特定区域作答,却被问到范围之外的内容;访问控制列表拦截了发起查询的 IP;或者解析器被明确配置为拒绝来自自身网络之外的查询(例如,递归解析器拒绝为互联网上的陌生人提供递归应答,这是正确且有意为之的行为,并不是缺陷)。对于不受您控制的服务器返回的 REFUSED,重试或退避策略很少能解决问题,更值得检查的是您是否查询了正确的服务器。

一种具体而常见的 SERVFAIL 原因:DNSSEC 配置损坏

最令人头疼的 SERVFAIL 场景之一,出现在启用了 DNSSEC 但配置有误的域名上:签名已过期,密钥在域名服务器上轮换了却没有在注册商处更新,或者从域名到根的信任链在某处断裂。遵循 DNSSEC 的验证型解析器,会拒绝返回无法通过密码学验证的应答,并返回 SERVFAIL,而不是悄悄忽略损坏的签名。令人不安的是,这个域名在完全不做 DNSSEC 验证的解析器上往往一切正常,因此这种原因很容易被误判为“我这里没问题”,而实际上对相当一部分真实访客来说它确实已经坏了。

需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。