![如果一个权威名称服务器没有特定记录,而另一个有,DNS解析器会做什么?](https://linux22.com/image/788972/%E5%A6%82%E6%9E%9C%E4%B8%80%E4%B8%AA%E6%9D%83%E5%A8%81%E5%90%8D%E7%A7%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B2%A1%E6%9C%89%E7%89%B9%E5%AE%9A%E8%AE%B0%E5%BD%95%EF%BC%8C%E8%80%8C%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%9C%89%EF%BC%8CDNS%E8%A7%A3%E6%9E%90%E5%99%A8%E4%BC%9A%E5%81%9A%E4%BB%80%E4%B9%88%EF%BC%9F.png)
假设我已经发送了针对 m1._domainkey.amazon.com 的 TXT 记录的查询
nslookup -q=txt m1._domainkey.amazon.com
假设 amazon.com 的权威名称服务器是
amazon.com nameserver = ns1.amzndns.com.
amazon.com nameserver = ns1.amzndns.org.
amazon.com nameserver = ns1.amzndns.net.
如果此 TXT 记录不存在于解析器查询的第一个权威名称服务器 ns1.amzndns.com 上,但存在于另一个权威名称服务器 ns1.amzndns.org 上,会发生什么情况?解析器是否通常会继续查询名称服务器,直到得到答案?
在实践中,我发现即使 TXT 记录不在所有名称服务器上,我也会获得它。
请在您的回答中附上文档/参考资料所以我可以独立研究这个。
谢谢阅读。
答案1
这权威名称服务器设置一个协议标志,称为“权威答案”(AA)位,并且解析器将该响应视为真理。
当响应是肯定的时,响应将包含所请求的资源记录。
当权威名称服务器没有该资源记录时,响应将是NXDOMAIN消息。
当您的权威名称服务器不一致时,客户端获得的响应将取决于查询哪个权威名称服务器。并且该响应将被视为事实。
解析器是否会持续查询名称服务器直至得到答案?
是的,但仅当第一个名称服务器根本没有响应时才会发生。
一旦收到任何(肯定或否定)响应,解析器就不需要查询您的其他名称服务器。
(你的解决者并不像一个六岁的孩子,当一个父母给出一个答案时,他们会去找另一个父母,希望他们能得到一个他们更喜欢的不同答案。)
答案2
解析器的行为依赖于实现。
例如,Microsoft Windows 10 会并行查询所有名称服务器。客户端将使用第一个服务器进行响应,即使它是否定响应。
如果客户端按顺序查询名称服务器,它将这样做,如果未收到响应,则超时并继续到下一个配置的名称服务器。收到响应后,查询就完成了,即使响应是否定的。
不会发生的是客户端不会等待所有名称服务器响应。客户端不会使用多个响应,而只会使用第一个响应。
如果 Amazon 有 100 个名称服务器,但只有一个具有资源记录,而客户端查询其他 99 个名称服务器之一,它将收到针对资源记录的否定响应。
https://superuser.com/questions/969171/multihomed-windows-10-dns-resolution-timeouts/970322#970322
in practice, I have seen that I will get the TXT record even though it is not on all nameservers.
如果您对记录有疑问,请随时分享重现该行为的记录,包括客户详细信息,以便我们可以重现它。
更多信息:
由于多次发生名称服务器配置错误的情况,微软引入了 A/AAAA 记录的并行名称解析。当由于主名称服务器不可用而查询非主名称服务器时,这通常会造成严重问题。迭代解析过程有超时,每个级别可能有不同的超时和累积超时。还有使用来自多个网络适配器的结果的规则。这导致了一些组织为了实现高可用性而配置了四五个名称服务器的情况。不幸的是,该过程在第三个服务器之后超时,因此 DNS 策略无效,灾难恢复策略无效,并且它本身也导致了其他问题。
使用 nslookup 时,要模拟解析器的行为并对特定名称服务器执行迭代查询,请使用开关-norecurse
。