我正在运行 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
破坏本地解析器。resolvconf
except
/etc/defaults/dnsmasq
简短的回答是您可以添加...
DNSMASQ_EXCEPT=lo
来/etc/defaults/dnsmasq
解决问题。
欲了解更多信息,请参阅此问题...
答案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。