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

我有一个CentOS 6.4盒子。

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

我们在机架上的一台服务器(192.168.1.11)上运行我们自己的cachingparsing器(使用Unbound),并且configuration了一些本地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 

而我平“马里奥”我得到:

 # 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 

但是,本地DNS服务器比Google公共DNS服务器慢得多,所以我宁愿先在列表中find那个。 所以如果我把/etc/resolve.conf改成这个:

 search local nameserver 8.8.8.8 nameserver 192.168.1.11 nameserver 74.82.42.42 

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

 # ping mario ping: unknown host mario 

任何想法我做错了 – 或者我误解了resolve.conf应该如何工作? 我想知道它是否可以与路由有关。

我的期望是,如果第一个DNS服务器不能解决一个IP,第二个resolv.conf条目得到一个镜头,但是这是行不通的。 帮帮我!

parsing器只有在到达名字服务器的尝试超时时才会查询第二个名称服务器。 在你的情况下,这不是一个超时问题,这是一个解决失败,所以没有必要查询剩余的名称服务器。

您可以通过添加一个没有在第一行中运行的名称服务器的IP以及它下面的真实域名服务器来testing它 – 就像这样

  search local nameserver 1.2.3.4 nameserver 192.168.1.11 nameserver 8.8.8.8 

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

你肯定需要让你的本地parsing器工作来执行recursion查找和caching结果,这是本地networking上的最佳实践 – 我同意Zoredache。 这样,它将通过查询您的本地权威域名服务器(可能在同一主机上运行)来caching位于“本地”TLD中的域名,还会从基于Internet的域名服务器为公有域recursionparsing那些结果。

假设这些/这些caching域名服务器的可用硬件资源不会超出其可接受的限制,这将总是给您比公用名称服务器更好的性能,因为解决的域名caching后,延迟响应更低。

设置好之后,你可以利用你的第一个resolv.conf例子,省略公有的IP地址。 当然,你会需要冗余的本地parsing器。