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


14

我们的NS记录中列出了两个DNS服务器。昨晚,我们的一台DNS服务器发生了故障。不出所料,某些DNS服务器无法解析我们的主机名。我以为这是暂时的,一旦我们的NS记录的TTL过期(1小时)就可以开始工作。

一个多小时后,我仍然从使用Earthlink,Verizon和OpenDNS服务器的桌面获得DNS超时。我测试了一下其他DNS服务器是否在回答:

dig @ns2.example.com www.example.com +short

这工作了。

我的问题:

  1. 是否有人对为什么即使TTL过期后其他DNS服务器仍未命中我们的其他DNS服务器有一个答案?
  2. DNS服务器(从SOA记录中)是否更喜欢域的主DNS服务器?
  3. 是否有用于从可用NS记录中选择名称服务器的算法?我假设这是特定于实现的,但是也许有一些适用于此的标准。

TTL与任何事物都不相关。由于未更改任何记录,因此没有任何影响。
David Schwartz

啊,我现在明白了。h
Belmin Fernandez

Answers:


17

这是一种不幸的刺激。应该使用多个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%。


我明白你的意思了。真是的 因此,客户端的名称服务器(Z)将不会缓存上次使用的哪个名称服务器有效吗?
Belmin Fernandez

1
一些名称服务器可以这样做,有时会有所帮助。它通常取决于名称服务器失败的确切方式。您必须记住,这全部是基于UDP的,因此未能获得答复(即使在重新传输一两次后)也不能证明名称服务器有问题。
大卫·史瓦兹

我在DNS和BIND副本(Paul Albitz和Cricket Lui,O'Rielly p278)中读到,绑定8.2.3服务器从其转发器列表中选择响应最快的服务器,这意味着如果列表中的服务器发生故障,它将被自动删除。绑定9尚未实现,它以列表顺序查询转发服务器。有人知道这是否改变了吗?
杰德(Jaydee)

需要说明的是,对于那些不太熟悉DNS设置的人(花了我一段时间),本示例中的DNS名称服务器Z和Y很可能是基于客户端网络的递归名称服务器,例如ISP提供的DNS服务器通过DHCP给客户。而当这些服务器具有比客户端DNS解析器更长的超时值出现问题(例如,设备的操作系统。)
约旦丽格

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.