![resolv.conf 不断被某些东西重置](https://linux22.com/image/1105299/resolv.conf%20%E4%B8%8D%E6%96%AD%E8%A2%AB%E6%9F%90%E4%BA%9B%E4%B8%9C%E8%A5%BF%E9%87%8D%E7%BD%AE.png)
我需要帮助弄清楚为什么我的resolv.conf
状态不断改变,导致我无法访问外部互联网,只能访问本地网络:
$ cat /etc/resolv.conf
nameserver 192.168.16.1
domain localdomain
search localdomain
我以为我可以通过删除环回接口并按照/etc/network/interfaces
说明添加 eth0 接口来解决这个问题jontsai 的 posterous 博客。
我曾尝试过类似的事情:
$ sudo ifconfig eth0 down
$ sudo ifconfig eth0 up
$ sudo /etc/init.d/networking restart
$ sudo dhclient
然后事情会暂时正常运作,最终 resolv.conf 中的名称服务器会再次恢复。
PS 我也发布了这个ubuntu论坛。
编辑:除了 NetworkManager 之外,至少还有一个其他程序正在写入resolv.conf
,我知道这一点是因为当我刷新 NetworkManager 时,resolv.conf
生成的文件有一条注释,上面写着# Generated by NetworkManager
,而它不断改变的版本却没有。
所以我正在尝试这个:
while true; do echo listening; lsof | grep /etc/resolv.conf; echo sleeping; sleep 1; done
编辑2:
添加文件输出:
$ cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
没有这样的文件/etc/NetworkManager/NetworkManager.conf
$ sudo cat /etc/NetworkManager/system-connections/Auto\ Ethernet
[connection]
id=Auto Ethernet
uuid=#######omitted#######
type=802-3-ethernet
autoconnect=true
timestamp=1314377063
[ipv4]
method=auto
ignore-auto-routes=false
ignore-auto-dns=false
dhcp-send-hostname=false
never-default=false
[802-3-ethernet]
speed=0
duplex=full
auto-negotiate=true
mtu=0
[ipv6]
method=ignore
ignore-auto-routes=false
ignore-auto-dns=false
never-default=false
答案1
您可以对 进行静态添加/etc/resolv.conf
。这些添加可能会覆盖自动添加的内容。
首先,安装该resolvconf
包。
然后,按 Alt+F2 并运行gksudo nautilus
。/etc/resolvconf/resolv.conf.d/head
如果要添加到文件开头,请打开;/etc/resolvconf/resolv.conf.d/tail
如果要添加到结尾,请打开。进行更改,保存/关闭文件,然后运行sudo resolvconf -u
以应用更改。
(抱歉,我不记得文件开始或结束处的设置是否具有最高优先级。)
答案2
(这个答案包含调查发生了什么的方法。如果您使用这些方法收集并提供更多信息,我可能能够提供实际的解决方案。)
似乎自发更新的一个可能触发因素/etc/resolv.conf
是您的 DHCP 租约续订时。检查您获得的 DHCP 租约期限(我认为这应该出现在系统日志中/var/log/syslog
)。
您可以使用审计 找出修改了文件的内容。启动守护进程 (
sudo service auditd start
) 并告诉它监视该文件的修改:
sudo auditctl -w /etc/resolv.conf -p w
审计日志位于/var/log/audit/audit.log
。您将看到文件的修改时间和修改文件的程序名称。
如果您resolvconf
安装了该软件包,网络管理器可能会影响其运行。请尝试关闭所有网络接口,然后停止网络管理器 ( sudo service network-manager stop
),然后重新启动它。
答案3
打开终端并输入
sudo chattr +i /etc/resolv.conf
+i 确保文件在启动时不会被重置,即使是 root 也是如此。
撤消上述操作
sudo chattr -i /etc/resolv.conf
更多
man chattr
答案4
我运气不错的另一个选择是使用resolvconf
。
向此文件添加任意条目:
/etc/resolvconf/resolv.conf.d/base
并且它们将被添加到/etc/resolv.conf
。
感谢这个 Ask Ubuntu 帖子:如何在 resolv.conf 中包含不会在重启时丢失的行?