为什么 resolv.conf 中的额外名称服务器条目会妨碍解析主机名?

为什么 resolv.conf 中的额外名称服务器条目会妨碍解析主机名?

我在 resolv.conf 中有 6 个名称服务器条目。由于我们网络最近发生了变化,我最近添加了最后 2 个,并没有费心注释掉旧的,因为我认为拥有额外的名称服务器不会影响名称是否解析,而且可能只会花费一点点时间。但如果不注释掉前 4 个名称服务器,名称将无法解析,我只是想知道为什么。

即使在解析配置文件手册上我看到的:

如果有多个服务器,解析器库将按列出的顺序查询它们。如果不存在名称服务器条目,则默认使用本地计算机上的名称服务器。(使用的算法是尝试一个名称服务器,如果查询超时,则尝试下一个,直到名称服务器用完,然后重复尝试所有名称服务器,直到重试次数达到最大次数。)

因此,我认为没有理由不取消注释前面的名称服务器条目就无法工作。

答案1

只要您理解“未找到”的含义,拥有多台服务器是没有问题的回答,完全不同于失败与服务器通信。

假设您的客户端配置为使用 Google DNS,并且还指向 Active Directory 的内部服务器。您的 AD 域不对外公开。

如果您的客户端尝试将您的内部域名解析到公共服务器,并收到无结果的响应,则它会停止。没有发生故障。不会查询其他服务器。您的解析器仅在发生故障时才尝试另一台服务器。

答案2

对于使用标准 C 库解析器代码的 Unix / Linux(参考 暗示/etc/resolv.conf),名称服务器条目按顺序使用,它们之间的超时时间为 ~5 秒。如果前 4 个名称服务器没有响应,每次 DNS 查询都必须等待至少 20 秒。如果您有搜索条目并且正在解析附加了搜索列表条目的单标签名称,则这会以乘法方式复合。

典型的应用程序(例如 Web 浏览器)将在约 15 秒后放弃等待答案,因此从这个角度来看,即使答案即将出现,人们也会认为“互联网已关闭”。这就是这里的神奇数字。

底线是,在 Linux / Unix 系统上直接使用已知的无效名称服务器的额外名称服务器引用/etc/resolv.conf进行解析是有害的。

相关内容