dnsmasq 重新启动时,resolv.conf 不断被覆盖,从而破坏 dnsmasq

dnsmasq 重新启动时,resolv.conf 不断被覆盖,从而破坏 dnsmasq

我正在运行 Debian Jessie,并尝试将 dnsmasq 配置为缓存 DNS 服务器。我使用了指导得出以下结论/etc/dnsmasq.conf

listen-address=127.0.0.1
bind-interfaces
domain-needed
bogus-priv
no-hosts
dns-forward-max=150
cache-size=1000
neg-ttl=3600
resolv-file=/etc/resolv.dnsmasq
no-poll

操作sudo service dnsmasq restart失败,无法启动,告诉我

Mar 26 17:13:01 user dnsmasq[26743]: dnsmasq: syntax check OK.
Mar 26 17:13:01 user dnsmasq[26746]: dnsmasq: only one resolv.conf file allowed in no-poll mode.

好吧,指南中的配置失败了,这有点奇怪。我只需删除该no-poll选项,看看它是否有效。这次它启动正常,但 DNS 解析显然失败了。相关文件:

/etc/resolv.conf

nameserver 127.0.0.1

/etc/resolv.dnsmasq

nameserver 8.8.8.8

/var/run/dnsmasq/resolv.conf

nameserver 127.0.0.1

第三个文件似乎是 dnsmasq 的实时 resolv.conf 文件,因为在 dnsmasq 已运行时向其中添加名称服务器行会导致 DNS 解析立即开始工作。因此看起来它忽略了我的/etc/resolv.dnsmasq。我还尝试向我的添加名称服务器行/etc/resolv.conf并删除resolv-file中的行/etc/dnsmasq.conf,但执行 后它会立即被覆盖为您在上面看到的内容sudo service dnsmasq restart

dnsmasq 发生了什么事?我是否应该将 dnsmasq 配置为缓存 DNS 服务器?

答案1

如果文件中没有明确指定本地环回接口,则启动脚本中似乎存在一个错误,该错误会dnsmasq破坏本地解析器。resolvconfexcept/etc/defaults/dnsmasq

简短的回答是您可以添加...

DNSMASQ_EXCEPT=lo

/etc/defaults/dnsmasq解决问题。

欲了解更多信息,请参阅此问题...

https://raspberrypi.stackexchange.com/questions/37439/proper-way-to-prevent-dnsmasq-from-overwriting-dns-server-list-supplied-by-dhcp

答案2

bigjosh 是对的 - 除了 dnsmasq 已经更新,现在有一个选项/etc/default/dnsmasq可以在其末尾取消哈希处理:

IGNORE_RESOLVCONF=yes

答案3

不要使用

resolv-file=/etc/resolv.dnsmasq

将 DNS 服务器放入 dnsmasq.conf,例如

server=/localnet/192.168.0.1 # change ip for your ip-server
server=8.8.8.8
server=8.8.4.4

并添加到 dnsmasq.conf

no-resolv

答案4

如果您只想要一个仅缓存的 DNS 服务器,而不需要 dnsmasq 的其他功能,那么最好安装或lwresd使用unbound默认配置,这样您就拥有一个仅缓存的 DNS 服务器。然后,您只需设置/etc/resolv.conf为使用“nameserver 127.0.0.1”即可。

值得庆幸的是,这两个软件包不会/etc/resolv.conf像 dnsmasq 那样干扰 中的内容,因此在我看来这是一个更干净的解决方案。您通常还可以删除该resolvconf软件包,这样就不会干扰/etc/resolv.conf

仅供参考,dnsmasq 已经变得相当复杂,有太多花哨的东西,只会给大多数人带来痛苦。在我看来,这违反了 KISS。

相关内容