Linux不断重试失败的DNS服务器

只要/etc/resolv.conf某个服务器无法访问,Linux / glibc /任何不够智能的操作都不会在一段时间内重试。 这导致很多服务变得不可用,因为它们中的很多会反向查找所有传入的连接(如SSH),这会在第一个DNS服务器查询超时时挂起。

我怎样才能使我的Ubuntu的箱子聪明的使用它的DNS服务器? 我可以破解一个每分钟运行一次的bash脚本,这个脚本会在iptables中插入一个拒绝规则,但是我不愿意这样做。

我被告知,Windows正确地执行此操作,顺便说一句。

编辑:我把它放在/etc/resolv.conf (或/etc/resolvconf/resolv.conf.d/base ):

 options timeout:2 rotate 

仍然不完美,但更可行。

为什么DNS服务器不可用? 这是我们应该重点解决的问题。

如果您想要确定性的重试顺序,您应该省略rotate指令。 rotate基本上给你循环查找,这可能会在你的情况有不良的结果。

我的DNS /etc/resolv.conf往往是这样的:

 search blah.net client.blah.net options timeout 1 nameserver 172.16.2.14 nameserver 172.16.2.18 

除此之外,您可以select在本地计算机上使用cachingDNS服务,甚至启用名称服务器caching后台程序 (nscd)。 这将有助于缓冲不可靠的DNSparsing器带来的延迟。

啊。 我在系统中遇到了同样的问题。 当主DNS服务器下线时,整个系统最多变得非常慢。

实际上,我在一段时间之前就提出了类似的问题: 主DNS服务器故障的DNS / resolv.conf设置? 。 那里有一些非常好的答案,你可能会觉得有用。

我结束了编辑/etc/resolv.conf用较低的超时值。 ( options timeout:1 )主要是因为这是最简单的解决方法,而不是最有效的。 这个改变意味着服务器花更less的时间等待死parsing器。 查找需要2秒钟,而不是10秒钟。如果你想做的事情不是一个批次,但是至less会导致很less的服务失败,这仍然很糟糕。