为什么当请求“任何”记录时,DNS 记录权威名称服务器经常会给出与缓存名称服务器不同的结果?
权威名称服务器似乎始终提供比缓存更多的记录 - 例如返回 MX 或 TXT 记录,而缓存名称服务器仅在明确请求时才返回这些记录。
例如,在我的家用系统(OS X)上,以下两个命令的区别
$ dig -t ANY +noall +nottl +answer microsoft.com
$ dig -t ANY +noall +nottl +answer microsoft.com @ns1.msft.net
是第一个只返回记录NS
;第二个添加了MX
、SOA
和TXT
。然而,在具有完全不同 DNS 设置的单独 Linux 系统上,“缺失”的记录只有MX
和SOA
。
答案1
dig
您使用从输出中删除信息的选项来隐藏自己的答案,在本例中具体是 TTL。
如果我们看一下完整的答案部分:
;; ANSWER SECTION:
microsoft.com. 3600 IN A 23.96.52.53
microsoft.com. 3600 IN A 191.239.213.197
microsoft.com. 3600 IN A 104.40.211.35
microsoft.com. 3600 IN A 104.43.195.251
microsoft.com. 3600 IN A 23.100.122.175
microsoft.com. 172800 IN NS ns3.msft.net.
microsoft.com. 172800 IN NS ns4.msft.net.
microsoft.com. 172800 IN NS ns1.msft.net.
microsoft.com. 172800 IN NS ns2.msft.net.
microsoft.com. 3600 IN SOA ns1.msft.net. msnhst.microsoft.com. 2016020503 7200 600 2419200 3600
microsoft.com. 3600 IN MX 10 microsoft-com.mail.protection.outlook.com.
microsoft.com. 3600 IN TXT "v=spf1 include:_spf-a.microsoft.com include:_spf-b.microsoft.com include:_spf-c.microsoft.com include:_spf-ssg-a.microsoft.com include:spf-a.hotmail.com ip4:147.243.128.24 ip4:147.243.128.26 ip4:147.243.1.153 ip4:147.243.1.47 ip4:147.243.1.48 -all"
microsoft.com. 3600 IN TXT "FbUF6DbkE+Aw1/wi9xgDi8KVrIIZus5v8L6tbIQZkGrQ/rVQKJi8CjQbBtWtE64ey4NJJwj5J65PIggVYNabdQ=="
我们可以看到,并非所有记录都具有相同的 TTL,这反过来意味着它们将在不同时间从缓存解析服务器的缓存中被逐出。
这与ANY
查询类型的定义方式相结合意味着完全有可能(并且有效)仅获取当前留在缓存中的内容作为响应。
由于这种行为,如果涉及缓存服务器,则不能依赖 QTYPE 来准确列出所有记录。它主要用于故障排除(并且,即使如此,我也只会在您很好地理解其含义的情况下才认为它有用*
)。ANY
ANY