无法找到使 dnsmasq 不在 /etc/resolv.conf 文件中进行更改的解决方法。
编辑 init.d/dnsmasq 文件不是一个完整的选项,因为并非所有 ubuntu 版本 dnsmasq 都通过 init.d 运行
希望你能帮忙!
答案1
问题是由于网络管理器动态使用您/etc/resolv.conf
的dnsmasq
解决方案是改变名称解析方式。请尝试以下操作
在/etc/NetworkManager/NetworkManager.conf
注释掉dns=dnsmasq
sudo nano /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq
no-auto-default=00:22:64:4E:6F:70,
[ifupdown]
managed=fals
并重新启动NM服务
sudo restart network-manager
这样/etc/resolv.conf
就不再依赖于resolvconf
包,而是根据网络管理器中每个连接的 DNS 条目进行更新
您还可以在 中添加名称服务器/etc/resolv.conf
。如果您没有在每个连接的 NM 中设置 DNS,则将使用
sudo nano /etc/resolv.conf
nameserver 8.8.4.4
nameserver 8.8.8.8
编辑一
停止服务resolvconf
sudo service resolvconf stop
禁用它
update-rc.d resolvconf disable
禁用resolvconf
覆盖resolv.conf
/etc/init/resolvconf.override
用单行创建manual
echo 'manual' | sudo tee /etc/init/resolvconf.override
删除符号链接/etc/resolv.conf
rm /etc/resolv.conf
resolv.conf
使用静态 DNS 条目创建
echo "namserver x.x.x.x." > /etc/resolv.conf
答案2
这可能会或可能不会解决您的问题,但我遇到了类似的问题,其中 dnsmasq(实际上是 dnsmasq 和 resolvconf 的组合)正在重写我的 /etc/resolv.conf 文件并忽略我在 /etc/network/interfaces 中设置的 dns-nameservers 选项。
问题原来是 resolvconf 会调用 dnsmasq 来更新 resolv.conf 中的名称服务器条目,然后似乎就会退出。
我通过将我的接口(在我的情况下)移到 /etc/resolvconf/interface-order 中的“lo.dnsmasq”条目之前,使它保留了 /etc/network/interfaces 中的 dns-nameservers 条目p+([0-9])p+([0-9])?(_+([0-9]))*
。因此,现在,我得到的不是“nameserver 127.0.0.1”作为 /etc/resolv.conf 中的第一个、最后一个和唯一的名称服务器条目,而是
nameserver <ipaddr.frometc.network.interfaces> nameserver <another.frometc.network.interfaces> nameserver 127.0.0.1 search <domains from /etc/network/interfaces>
所以现在看来,resolvconf 运行,检查接口顺序,并从 /etc/network/interfaces 添加与“lo.dnsmasq”上方的条目相对应的条目,然后调用 dnsmasq 进程将这些条目添加到文件中,但不知何故工作得不太正确,它会忽略此后的任何接口。
当我试图弄清楚这一点时,我搜索了为什么 dnsmasq 忽略了 /etc/network/interfaces,但无济于事。(我确信这涉及到 dnsmasq,因为这发生在我安装 dnsmasq 后不久)我不确定这是否解决了您的问题,但对我来说,这似乎比删除 resolvconf 要干净一些。
答案3
您可以尝试将 chattr 设置为不可变。
chattr +i /path/to/filename
要删除不可变内容以允许再次进行更改,请更改文件上的标志。
chattr -i /path/to/filename