强制 dig 解析而不使用缓存

强制 dig 解析而不使用缓存

我想知道是否有办法查询 DNS 服务器并绕过缓存(使用dig)。我经常更改 DNS 服务器上的区域,并想从我的工作站检查它是否正确解析。但由于服务器缓存已解析的请求,我经常会收到旧请求。重新启动或加载服务器并不是一件好事。

答案1

您可以使用该@语法从特定服务器查找域。如果 DNS 服务器对该域具有权威性,则响应将不是缓存结果。

dig @ns1.example.com example.com

您可以通过请求NS域名记录来找到权威服务器:

dig example.com NS

答案2

DNS 协议中没有强制名称服务器在不使用缓存的情况下做出响应的机制。Dig 本身不是名称服务器,它只是一个使用标准 DNS 请求将您的查询传递给您配置的任何名称服务器的工具。DNS包括一种告诉服务器不要使用递归的方法,但这不是您想要的。这仅在您想要直接查询权威名称服务器时才有用。

如果你想阻止名称服务器从其缓存中响应,你只能通过修改配置来实现在名称服务器上,但如果您不控制名称服务器,这是不可能的。

不过,你可以挖掘旁路配置的名称服务器,并执行其自己的递归请求,该请求返回到根服务器。为此,请使用选项+trace

dig example.com +trace

实际上,由于这只会查询权威服务器,而不是本地缓存解析器,因此即使这些服务器使用内部缓存,结果也不会过时。使用的另一个好处+trace是,您可以看到沿路径发出的所有单独请求。

答案3

这里需要注意的一点是,我注意到很多人在谈论时从未提到过,+trace使用意味着+tracedig 客户端将执行跟踪,而不是配置 (/etc/resolv.conf) 中指定的 DNS 服务器。因此,换句话说,如果您要求,您的 dig 客户端将像递归 DNS 服务器一样工作。但重要的是,您没有缓存。

更详细一点 - 如果您已经mx使用请求了记录dig -t mx example.com,并且您的 /etc/resolv.conf 是 8.8.8.8,那么在区域的 TTL 内执行任何操作都将返回缓存的结果。在某种程度上,如果您正在寻找有关您自己的区域以及 Google 如何看待它的信息,那么您已经用 Google 为您的区域的 TTL 毒害了您的 DNS 结果。如果您的 TTL 很短,结果还不错,如果您的 TTL 为 1 小时,结果就有点糟糕了。

因此,虽然+trace可以帮助您了解如果您第一次询问 Google 并且它没有缓存条目时会看到什么,但它可能会给您一个错误的想法,即 Google 会告诉每个人与您的结果相同的结果+trace,而如果您之前询问过并且具有较长的 TTL,则不会这样做,因为它将从缓存中提供该信息,直到 TTL 过期 - 然后它将提供与您+trace揭示的内容相同的信息。

在我看来,细节不能太多。

答案4

感谢这个解决方案,我能够检查 DNS TXT 记录的传播,我需要将其添加到 AZURE DNS 区域,以获取 LetsEncrypt 证书。这是我的 dig 命令:

dig @8.8.8.8 +nocmd _acme-challenge.ultrasecretprojec.to txt +noall +answer

相关内容