DNS 名称服务器回退如何工作?

Bel*_*dez 16 domain-name-system bind isp

我们的 NS 记录中列出了两个 DNS 服务器。昨晚,我们的一台 DNS 服务器出现故障。正如预期的那样,一些 DNS 服务器没有解析我们的主机名。我认为这将是暂时的,一旦我们的 NS 记录的 TTL 到期(1 小时)就会开始工作。

一个多小时后,我仍然从使用 Earthlink、Verizon 和 OpenDNS 服务器的台式机获得 DNS 超时。我测试了其他 DNS 服务器是否正在应答:

dig @ns2.example.com www.example.com +short
Run Code Online (Sandbox Code Playgroud)

这奏效了。

我的问题:

  1. 有没有人知道为什么其他 DNS 服务器即使在 TTL 过期后也没有访问我们的其他 DNS 服务器?
  2. DNS 服务器是否更喜欢域的主 DNS 服务器(来自SOA记录)?
  3. 是否有任何算法用于从可用的 NS 记录中选择名称服务器?我假设这是特定于实现的,但也许这里有一些适用的标准。

Dav*_*rtz 19

这是一种不幸的刺激。应该使用多个 DNS 服务器来提高可靠性,但实际上它经常会产生相反的效果。

问题是客户端等待响应的时间很长,而服务器等待的时间大约相同。假设您有两个 DNS 服务器,A 和 B。假设 A 正在运行,而 B 出现故障。有时候是这样的:

  1. 客户端连接到名称服务器 Z 并要求它提供信息。Z 选择 B 并发送查询。

  2. 客户端超时,因为名称服务器 Z 没有响应。

  3. 客户端尝试名称服务器 Y。Y 选择 B 并发送查询。

  4. 名称服务器 Z 超时并尝试 A。它得到正确答案,但客户端不再等待。

  5. 客户端超时,因为名称服务器 Y 没有响应。

  6. 客户端放弃了,因为它的两个名称服务器都无法响应。

  7. 名称服务器 Y 超时并尝试 A。它得到正确的答案,但客户端不再等待。

而且没有很好的解决办法。您等待名称服务器是否回复的时间越长,您需要等待的时间就越长,因为您正在等待的名称服务器本身等待的时间更长。可以说,问题在于 Y 和 Z 没有足够快地放弃 B。

从本质上讲,如果您的任何名称服务器出现故障,一些客户端将由于运气不佳而超时,因为他们只尝试了坏的服务器。

从好的方面来说,如果您有两个名称服务器并且其中一个出现故障,那么大约 75% 的名称服务器会得到答案,而不是 0%。