dnsmasq读取/ etc / hosts,但不使用它

我做了一个dnsmasq的默认安装。 当我运行dig时,似乎使用了dnsmasq(127.0.0.1),但结果不包括/ etc / hosts中包含的主机名。

/ etc / hosts中:

192.168.1.13 sun 

在terminal:

 $ dig sun ; <<>> DiG 9.6-ESV-R4 <<>> sun ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 32131 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;sun. IN A ;; AUTHORITY SECTION: . 9699 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2011041100 1800 900 604800 86400 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Apr 12 05:20:56 2011 ;; MSG SIZE rcvd: 96 

在terminal:

 $ dig @localhost sun ; <<>> DiG 9.6-ESV-R4 <<>> @localhost sun ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 43763 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;sun. IN A ;; AUTHORITY SECTION: . 10800 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2011041800 1800 900 604800 86400 ;; Query time: 40 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Apr 18 17:15:23 2011 ;; MSG SIZE rcvd: 96 

我试过使用本地和扩大主机/域,但似乎无法得到这两个工作。 我的主要目标是能够使用一台机器来主持局域网域名parsing,我不在乎名称是sun或sun.domain,无论工作。

这是我的/etc/resolv.conf

 nameserver 127.0.0.1 domain members.linode.com search members.linode.com nameserver 72.14.188.5 nameserver 72.14.179.5 

和/etc/dnsmasq.conf

 domain-needed bogus-priv 

这是所有在Ubuntu 10.04机器上,如果它有所作为。 我一直在遵循这个指南: http : //www.mythicalbeast.co.uk/linux/dnsmasq_howto.html (虽然不是逐字的,因为它也设置DHCP)

你的/etc/resolv.conf是什么样的? 寻找域或search元素。

为dnsmasq设置.local域,然后将其添加到您的resolv.conf,它应该工作。

试试dig sun.local @localhost。

从dnsmaq常见问题的这段代码似乎相关:

问:在互联网上的名字工作正常,但从/ etc / hosts或DHCP查找本地名称似乎并没有工作。

答:parsing器代码有时会在没有任何点的情况下给出名字时会出现奇怪的事情.Win2k和WinXP可能根本不使用DNS,只是尝试使用WINS来查找名称。 关于这个主题的详细信息,请参阅“man resolv.conf”中的“options ndots:”。 使用“nslookup”或“dig”进行testing可以正常工作,但是尝试运行“ping”将会导致查找失败,在主机名末尾添加一个点会解决问题。 (即“ping myhost”失败,但是“ping myhost”可以工作,解决办法是确保所有主机都有一个域设置(resolv.conf中的“domain”,或者在你的DHCP服务器中设置一个域,见下在Windows XP和Mac OS X上),任何域都可以,但是“localnet”是传统的,现在parsing“myhost”时,parsing器会尝试查找“myhost.localnet”,所以你需要有dnsmasq回复这个名字。这样做的方法是在/ etc / hosts中的每个名称中包含域,和/或使用–expand-hosts和–domain选项。

所以我build议你把/etc/resolv.conf ,以及你在dnsmasq中提供的参数发布。

挖,以及主机和NSLOOKUP是专门创build查询DNS服务器。 它不会看/ etc / hosts,实际上会忽略/etc/nsswitch.conf

任何使用gethostbyname调用的东西都会使用/etc/nsswitch.conf

例如,ping应该使用/ etc / hosts提供的文件在/etc/nsswitch.conf中的dns之前,它通常是。