使 dnsmasq 不改变 resolv.conf

使 dnsmasq 不改变 resolv.conf

每次我(重新)启动 dnsmasq 时,它都会替换/etc/resolv.confnameserver 127.0.0.1 ....

然而,该机器不必使用本地 DNS 服务。 (请不要问为什么,整个环境就是这样……)

我如何真正阻止 dnsmasq 接触/etc/resolv.conf

删除resolvconf也不chattr +i /etc/resolv.conf是一个选项。

答案1

dnsmasq 本身不会改变 resolv.conf 如果您有配置文件并通过dnsmasq -d -C <yourconfig>您看到的手动启动它。

此行为来自 debian 上的 systemd 单元,也可能来自 ubuntu 系统以及其他发行版上的 systemd 单元。

通过停止 dnsmasq sudo systemctl stop dnsmasq(因为否则更改的 /etc/resolv.conf 将不会恢复)编辑/etc/systemd/system/multi-user.target.wants/dnsmasq.service 并注释掉这两行

#ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf
#ExecStop=/etc/init.d/dnsmasq systemd-stop-resolvconf

执行sudo systemctl daemon-reload

之后你可以启动 dnsmasq 并且你的 /etc/resolv.conf 文件不会被 dnsmasq 更改

答案2

您可以dnsmasq使用不同的resolv.conf文件,因此当/etc/resolv.conf指向 127.0.0.1 时,dnsmasq实际上只会使用其他文件resolv.conf文件并保持/etc/resolv.conf不变。

将以下行添加到您的dnsmasq.conf文件中:

resolv-file=/etc/dnsmasq.d/dnsmasq-resolv.conf

然后创建文件,/etc/dnsmasq.d/dnsmasq-resolv.conf如下所示:

nameserver 208.67.222.222
nameserver 208.67.220.220

答案3

  1. systemctl disable resolvconf.service
  2. systemctl stop resolvconf.service
  3. rm -f /etc/resolv.conf
  4. echo 'nameserver 8.8.8.8' > /etc/resolv.conf # or any other IP you want to use as DNS server
  5. systemctl restart dnsmasq.service # just for testing
  6. cat /etc/resolv.conf # just to verify

计算机将无法通过 DHCP 获取 DNS 服务器地址,但它解决了问题。

答案4

我遇到过同样的问题。在 debian bullseye 上,当安装了 resolvconf (如果我没记错的话,默认情况下是这样),那么 dnsmasq 将有这种行为。您应该编辑该/etc/default/dsnmasq文件并取消注释此行:

# If the resolvconf package is installed, dnsmasq will tell resolvconf
# to use dnsmasq under 127.0.0.1 as the system's default resolver.
# Uncommenting this line inhibits this behaviour.
#DNSMASQ_EXCEPT="lo"

进入

# If the resolvconf package is installed, dnsmasq will tell resolvconf
# to use dnsmasq under 127.0.0.1 as the system's default resolver.
# Uncommenting this line inhibits this behaviour.
DNSMASQ_EXCEPT="lo"

这对我有用。

相关内容