为什么我的服务器不查询 resolv.conf 中的第二个条目?

Ste*_*veJ 1 domain-name-system resolv.conf centos

我有一个 CentOS 6.4 机器。

与此机架中的所有其他盒子一样,它有两个 NIC:一个内部 (192.168.1.x) 和一个外部(对世界可见)。

我们在机架中的其中一台服务器 (192.168.1.11) 上运行我们自己的缓存解析器(使用 Unbound),并且它配置了一些本地 DNS 条目(mario.local、luigi.local 等),以便我们可以简单地 ping /ssh/ftp 到“主机名”从任何本地框到任何其他本地框,而无需通过外部交换机之一(这会导致我们的 ISP 收费)。

如果我的 /etc/resolv.conf 看起来像这样:

search local
nameserver 192.168.1.11
nameserver 8.8.8.8
nameserver 74.82.42.42
Run Code Online (Sandbox Code Playgroud)

我 ping “马里奥” 我得到:

# ping mario
PING mario.local (192.168.1.3) 56(84) bytes of data.
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.738 ms
Run Code Online (Sandbox Code Playgroud)

但是,本地 DNS 服务器比 Google 公共 DNS 服务器慢得多,因此我更愿意将其放在列表中的第一个。因此,如果我将 /etc/resolve.conf 更改为:

search local
nameserver 8.8.8.8
nameserver 192.168.1.11
nameserver 74.82.42.42
Run Code Online (Sandbox Code Playgroud)

我希望对“mario”的 ping 尝试在 8.8.8.8 上解析 mario.local,失败,然后查询列表中的第二个 DNS 服务器 (192.168.1.11) 并解析。但相反,我得到:

# ping mario
ping: unknown host mario
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么 - 还是我误解了 resolve.conf 应该如何工作?我想知道它是否与路由有关。

我的期望是,如果第一个 DNS 服务器无法解析 IP,则第二个 resolv.conf 条目会得到尝试,但这不起作用。帮助!

Dan*_* t. 5

只有在尝试访问第一个名称服务器超时时,解析器才会查询第二个名称服务器。在您的情况下,这不是超时问题,而是解析失败,因此无需查询剩余的名称服务器。

您可以通过添加一个在第一行中没有运行名称服务器的 IP 和它下面的真实名称服务器来测试这一点 - 像这样

 search local
 nameserver 1.2.3.4
 nameserver 192.168.1.11
 nameserver 8.8.8.8
Run Code Online (Sandbox Code Playgroud)

第一个肯定会超时,然后将按该顺序查询剩余的名称服务器。