缓存 DNS 为 NS 记录返回 SERVFAIL,但 dig +trace 不同意?

And*_*w B 4 domain-name-system bind glue-record

这个问题是类似的,但没有详细说明为什么NS无法获得记录的令人困惑的情况。

我们的缓存 DNS 环境之一(RHEL 5.8、BIND 9.3.6-20.P1.el5_8.4)已完全停止为区域返回任何有用的数据。通常这类问题最终会成为陈旧NS或粘连的记录,但在这种特殊情况下,我似乎甚至无法让缓存报告NS该区域的记录。

  • dig @mycache somedomain NS返回SERVFAIL。根本没有缓存任何名称服务器记录。
  • dig +trace显示健康的委托路径,最终名称服务器返回响应。dig针对最终名称服务器手动运行查询返回有效NS记录,相应A记录存在并与胶水一致等。

是什么赋予了?为什么NS我从 DNS 缓存中没有任何记录可以获取,甚至没有错误记录?

And*_*w B 7

如果NS记录没有权威答案,那么除了无法确定权限之外,没有什么可以缓存的。这是已缓存的内容,DNS 客户端无法获取服务器内存中有关蹩脚名称服务器的信息。(或者更确切地说,这与您将要获得的一样接近)

通常,您可以通过将NS缓存中的记录与您在 Internet 上找到的内容进行比较来识别陈旧的名称服务器记录的问题,但在这种情况下,没有NS可缓存的权威记录。胶水记录本身并不具有权威性;没有权威的答案,根本就没有权威的 nameserver

这里通常发生两件事之一:

  1. dig +trace正在从您的本地缓存中获得一个中间名称服务器的陈旧答案,目前确实存在问题。我在另一个问题中介绍了这种行为。
  2. 缓存服务器遇到NXDOMAINSERVFAIL在追胶记录寻找权威域名服务器时,此事件已被缓存。即使问题已得到纠正,或者胶水已指向其他地方,名称服务器也不会尝试再次请求它,直到内部计时器到期。为相关区域请求缓存清除通常会重置它。

后一种情况通常是罪魁祸首。如果您想绝对确定,可以转储名称服务器的运行时缓存并查看内存中的胶水。(即 BIND rndc dumpdb)请注意,这是一项非常昂贵的操作,除非您可以将转储范围限制为单个区域,并且通常在高负载情况下要避免这种情况。