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

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

每当其中一个服务器/etc/resolv.conf无法访问时,Linux/glibc/whatever 都不够聪明,不会在一段时间内重试。这导致许多服务不可用,因为许多服务会对所有传入连接(如 SSH)进行反向查找,这会在第一个 DNS 服务器查询超时后挂起。

如何让我的 Ubuntu 机器能够智能地使用其使用的 DNS 服务器?我可以破解一个每分钟运行一次的 bash 脚本,该脚本将 REJECT 规则插入到 iptables 中,用于不响应 dig 查询的服务器,但我不想这样做...

顺便说一句,有人告诉我 Windows 可以正确地做到这一点。

/etc/resolv.conf编辑:我通过将其放入(或)来解决这个问题/etc/resolvconf/resolv.conf.d/base

options timeout:2 rotate

仍不完美,但更可行。

答案1

为什么 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

除此之外,你可以选择在本地计算机上使用缓存 DNS 服务,甚至可以启用名称服务器缓存守护进程(nscd)。这将有助于缓冲不可靠的 DNS 解析器带来的延迟。

答案2

呃。我的系统也遇到过同样的问题。当主 DNS 服务器离线时,整个系统会变得非常慢。

事实上,我很久以前就问过类似的问题:主 DNS 服务器发生故障时 DNS/resolv.conf 设置是什么?。那里有一些非常好的答案,你可能会觉得有用。

我最终只是/etc/resolv.conf用较低的超时值进行编辑。(options timeout:1)主要是因为这是最简单的解决方法,而不是最有效的方法。此更改意味着服务器花费更少的时间等待死解析器。查找需要 2 秒而不是 10 秒。如果您尝试执行任何非批量操作,这仍然很糟糕,但至少导致的服务故障很少。

相关内容