可以查看域名剩余的 DNS 负缓存吗?

可以查看域名剩余的 DNS 负缓存吗?

对于常规 DNS 查询,可以使用 Dig 获取包含 DNS 记录剩余 TTL 的答案。如果该答案来自缓存,则 TTL 将“倒计时”直到下一个权威查询,以及该查询出现之前的剩余时间(如本问题所述:检查名称服务器的剩余 TTL)。

如何获取负缓存记录的相应“剩余时间”?答案根据定义是“NXDOMAIN”或不存在的域;除了 SOA 记录(最大可能时间值)之外,似乎没有与此答案相关的 TTL。

我也可以直接访问 [BIND 9] 服务器,因此直接从缓存中获取这些信息的方法也是受欢迎的,尽管我希望有一种基于查询的方法来做到这一点。

答案1

没有基于查询的方式来获取服务器状态。必须使用命令从内存中转储胶水、负缓存计时器等rndc dumpdb

  • 以 开头的记录类型\-被负面缓存。\-A\-AAAA等等。
  • \-ANY表示为真NXDOMAIN。此实体旁边或下方均无记录。

如果您以前没有接触过这个概念NODATA,上述内容可能会让您感到困惑。(RFC 2308) 它的意思是看到了具有 0 个答案的答案NOERROR,而不是NXDOMAINNXDOMAIN表示根本不存在具有该名称的记录。

负面缓存条目示例:

test1.example.com. 442 \-ANY ;-$NXDOMAIN
test2.example.com. 352 \-AAAA ;-$NXRRSET

自动解析此文件并不容易,尤其是当标签名称由于重复而被省略时。

答案2

首先,应该通过回复NXDOMAIN中的 SOA 记录传达TTL 。请参阅我的回答AUTHORITY SECTION负面 DNS 缓存通常会持续多长时间?了解详情。

关于在后续查询中看到递减的 TTL 的问题。我相信这是一个 DNS 服务器实现细节。

在我的测试中,我观察到一些递归名称服务器不会返回AUTHORITY SECTION带有递减 TTL 的 SOA 记录以用于后续请求,而其他一些则返回了。

例如,cloudflare 解析器会这样做(注意递减的 TTL 值):

$ dig nxdomain.serverfault.com @1.1.1.1 | grep 'AUTHORITY SECTION' -A 1
;; AUTHORITY SECTION:
serverfault.com.    674 IN  SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
$ dig nxdomain.serverfault.com @1.1.1.1 | grep 'AUTHORITY SECTION' -A 1
;; AUTHORITY SECTION:
serverfault.com.    668 IN  SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

而 AWS VPC 中的默认解析器仅在第一次请求时响应权限部分:

$ dig nxdomain.serverfault.com @169.254.169.253 | grep 'AUTHORITY SECTION' -A 1
;; AUTHORITY SECTION:
serverfault.com.    300 IN  SOA ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300
$ dig nxdomain.serverfault.com @169.254.169.253 | grep 'AUTHORITY SECTION' -A 1 | wc -l
0

请注意,权威服务器应始终返回完整的 TTL,该 TTL 应为 SOA.MINIMUM 字段和 SOA 记录本身的 TTL 中较小的一个。您只会在递归(缓存)名称服务器的答案中看到递减的 TTL。

还要注意,当查询递归服务器时,您通常会碰到负载均衡器,因此,您会根据碰到的负载均衡服务器得到不同的答案。

相关内容