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

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

我已经默认安装了 dnsmasq。当我运行 dig 时,它似乎正在使用 dnsmasq (127.0.0.1),但结果不包含 /etc/hosts 中包含的主机名。

在 /etc/hosts 中:

192.168.1.13 sun

在终端中:

$ 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

在终端中:

$ 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

我尝试过使用 local 和 expand-hosts/domain,但似乎都无法正常工作。我的主要目标是能够使用一台机器来托管 LAN DNS,我不在乎名称最终是 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)

答案1

我知道这是 2011 年的,但由于它仍然没有可接受的答案:

今天,我遇到了类似的问题。Curl 尝试从 haproxy lxc 获取具有相应标头的预期响应,但不知何故我的本地 dnsmasq 未提供解决方案container.test(已通过 nslookup 确认)。

谷歌找到了我这个帖子Hugo Heden 表示,这可能是/etc/hosts格式问题。

为我解决问题的是:

  1. 取消no-hosts注释/etc/dnsmasq.conf
  2. 放入123.123.123.12 container.test新文件,例如/etc/dnsmasq.hosts
  3. addn-hosts=/etc/dnsmasq.hosts通过添加以下内容将 dnsmasq 指向新文件/etc/dnsmasq.conf

答案2

此片段来自dnsmaq 常见问题解答似乎相关:

问:互联网上的名称工作正常,但从 /etc/hosts 或 DHCP 查找本地名称似乎不起作用。

答:解析器代码有时会在给定名称时出现奇怪的情况,名称中不包含任何点。Win2k 和 WinXP 可能根本不使用 DNS,而只是尝试使用 WINS 查找名称。在 unix 上,请查看“man resolv.conf”中的“options ndots:”以了解有关此主题的详细信息。使用“nslookup”或“dig”测试查找会成功,但尝试运行“ping”将导致查找失败,在主机名末尾附加一个点可以解决问题。 (例如“ping myhost”失败,但“ping myhost.”有效)。解决方案是确保所有主机都设置了域(resolv.conf 中的“domain”,或在 DHCP 服务器中设置域,请参见下面的 Windows XP 和 Mac OS X)。任何域都可以,但“localnet”是传统的。现在,当您解析“myhost”时,解析器将尝试查找“myhost.localnet”,因此您需要让 dnsmasq 回复该名称。这样做的方法是将域包含在 /etc/hosts 上的每个名称中和/或使用 --expand-hosts 和 --domain 选项。

因此我建议您发布您的/etc/resolv.conf,以及在启动时提供给 dnsmasq 的参数。

答案3

我发现:一切似乎都配置好了,但 /etc/hosts 中的 dns 名称无法解析。添加/编辑 /etc/hosts(或任何配置文件)后,不要忘记重新启动 dnsmasq 进程以重新读取该文件。Dnsmasq 在启动时导入这些文件,它不是实时查找。

答案4

你的 /etc/resolv.conf 是什么样的?查找域或搜索元素。

为 dnsmasq 设置一个 .local 域,然后将其添加到您的 resolv.conf 即可工作。

尝试 dig sun.local@localhost。

相关内容