DNS 协议中的“名称解析暂时失败”到底是什么意思? - RFC 1035

DNS 协议中的“名称解析暂时失败”到底是什么意思? - RFC 1035

我已经调查过DNS 规格但在那里找不到。

情况:有时,wget查询公共服务器名称时,会出现“名称解析暂时失败”的情况。之后,它又可以正常工作。

这到底意味着什么?在哪里寻找问题根源?

  • 详细的 DNS 查询是否包含有关协议错误的更多信息?
  • DNS 服务器的日志?

答案1

没有有确切的含义。这是一个通用的“这可能稍后会起作用,但现在不行”错误,有点像 HTTP 500。

  • 可能是您的本地 DNS 缓存(如果有)无法访问递归解析器。例如,如果您运行 dnsmasq。
  • 可能是递归解析器无法到达权威服务器(任何级别的)。有时,即使只有一个权威服务器发生故障,解析器似乎也会提前放弃,尽管该域有更多可用的服务器。
  • 递归解析器可能会从权威服务器收到不可接受的响应(例如,如果它遇到了不完善的委派)。
  • 它可能表示内部服务器错误,例如,如果权威服务器突然无法从数据库中检索记录,则可能返回 SERVFAIL。
  • 它甚至可能表明 DNSSEC 验证失败,而 DNSSEC 验证本身有多种原因(签名过期、密钥不匹配、无法获取签名......)
  • 在某些情况下,它甚至表明永恒的问题,例如,每当 systemd-resolved 拒绝通过 DNS 解析单标签名称时,它就会返回 SERVFAIL(以避免泄露主机名)。

最初的 DNS 数据包格式没有为复杂的状态代码留下太多空间,但有了 EDNS,我们现在可以RFC 8914这允许 DNS 服务器报告更精确的错误。但是,目前很少有解析器支持它,即使它们支持,你的操作系统也不会知道要查找它。

因此,如果问题可能出在域名主机方面,您可以尝试使用其他解析器进行请求dig– 例如 CloudFlare 支持扩展错误报告:

$ dig dnssec-failed.org @1.1.1.1

;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 5960

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; EDE: 6 (DNSSEC Bogus)

即使没有这个,DNSSEC也很容易成为主要嫌疑人——如果甚至公共解析器也不断返回此错误代码,将域名放入DNSViz中,它将显示签名链以及它发现的所有问题。

另一方面,如果公共解析器可以解析该域名,那么您的本地解析器很可能在实际检索签名时遇到问题。(这可能是由于上游服务器不支持 EDNS 并且不理解它被要求提供比平时更多的数据。)

可以从根向下直接使用查询来发现权威服务器的问题dnstrace -s. example.com,并显示哪些服务器已关闭或不接受它们应该接受的查询。

在其他情况下,您只需查看解析器的日志(如果有),然后尝试通过指向dig不同的服务器来缩小问题范围。例如,如果您使用的是本地缓存(无论是在计算机还是家用路由器上),请尝试绕过它。

答案2

该消息意味着 wget 无法解析用作参数的域名。

就您而言,我认为有两个主要可能的原因:

  • 您的域名服务器问题
  • 您的(互联网)连接存在问题(阻止您加入名称服务器)

您可以尝试更换您的名称服务器。

如果您不使用本地资源的名称解析,则可以设置8.8.8.8为名称服务器。它是 Google 名称服务器,非常可靠。

如果您仍然遇到此问题,则可能是临时连接问题阻止您加入 Google DNS 服务器。

如果新的 DNS 服务器没有问题,则问题可能出在旧的 DNS 服务器上。

相关内容