resolv.conf中的nameserver 127.0.1.1不会消失!
我已经读过,只有当我的机器有自己的DNS服务器时,我的/etc/resolv.conf
文件中才应该有nameserver 127.0.1.1
。 既然没有,那就会引起问题。 但无论我做什么,我都无法摆脱它!
以下是我到目前为止所做的事情:
- 将
nameserver 192.168.1.3
添加到/etc/resolvconf/resolv.conf.d/base
文件中。 (192.168.1.3是我们网络的DNS)。 - 运行:
sudo resolvconf --enable-updates
。 - 正在运行:
sudo resolvconf -u
。 - 运行:
sudo service network-manager restart
(只是为了确保)。
然而,当我打开/etc/resolv.conf
文件时,它说: nameserver 127.0.1.1
! 有谁知道什么是错的?
请注意,它实际上是127.0.1.1
! 我不知道为什么它不是127.0.0.1
!
即使我手动更新/etc/resolv.conf
并将其更改为其他任何内容, sudo resolvconf -u
也会将其恢复为127.0.1.1
! 这个地址来自哪里?
NetworkManager是(通过resolvconf实用程序)将地址127.0.1.1
插入resolv.conf
。 NM插入仅在配置为启动dnsmasq程序的实例以用作本地转发名称服务器时才进行寻址。 该dnsmasq实例侦听地址127.0.1.1处的查询。
如果您不想使用本地转发名称服务器,则将NetworkManager配置为不启动dnsmasq实例而不插入该地址。 在/etc/NetworkManager/NetworkManager.conf
注释掉行dns=dnsmasq
sudo nano /etc/NetworkManager/NetworkManager.conf [main] plugins=ifupdown,keyfile,ofono #dns=dnsmasq
并重新启动NetworkManager服务。
sudo service network-manager restart
在此模式下,NetworkManager更新/etc/resolv.conf
(仍通过resolvconf)以包含NetworkManager用于活动连接的名称服务器地址。
如果要禁用resolvconf机制来更新resolv.conf并仅使用静态resolv.conf文件,请执行以下操作。
sudo rm -f /etc/resolv.conf # Delete the symbolic link sudo nano /etc/resolv.conf # Create static file # Content of static resolv.conf nameserver 8.8.4.4 nameserver 8.8.8.8
resolvconf可能配置错误。 如果您一直在使用其配置文件而不了解resolvconf和NetworkManager的工作方式,则尤其如此。
有关背景信息,请阅读resolvconf文档和StéphaneGraber的博客文章。
https://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/
首先,您应该知道默认情况下Ubuntu Desktop和Ubuntu Server都安装并激活了resolvconf。 Resolvconf提供了一个框架,用于以有序和可逆的方式动态更新/etc/resolv.conf文件。
其次你应该知道Ubuntu Desktop默认安装并激活了NetworkManager。 默认情况下,NetworkManager启动dnsmasq实例作为本地转发名称服务器。 此NetworkManager控制的dnsmasq实例侦听127.0.1.1处的查询。 当NetworkManager启动dnsmasq实例时,它会告诉resolvconf将地址127.0.1.1
插入resolv.conf。 如另一个答案所述,如果您将NetworkManager配置为不启动本地转发名称服务器实例,那么它将不会启动本地转发名称服务器,也不会告诉resolvconf将地址127.0.1.1
插入resolv.conf。
此默认配置正常工作,因此除非您的情况特殊,否则应恢复默认配置。
要恢复默认配置,请查看它
- /etc/resolvconf/resolv.conf.d/head只包含resolvconf标题文本,其中包含以
#
字符开头的两行 - /etc/resolvconf/resolv.conf.d/base是一个空文件
- /etc/resolvconf/resolv.conf.d/tail是一个空文件
- /etc/resolv.conf是一个包含内容的符号链接
../run/resolvconf/resolv.conf
要实现此目的,请执行以下命令。
sudo su dpkg-reconfigure resolvconf # And answer `Yes` to agree to dynamic updates cd /etc/resolvconf/resolv.conf.d echo '# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN' > head rm -f base tail original :> base :> tail
NetworkManager的原始配置是
[main] ... dns=dnsmasq ...
在/etc/NetworkManager/NetworkManager.conf中。 通过注释掉dns=dnsmasq
行来禁用NetworkManager控制的本地转发名称服务器是一个合理的选择。
[main] ... #dns=dnsmasq ...
完成所有这些操作后,建议重新启动计算机以清除过时的名称服务器信息记录。
sudo reboot
在我的情况下,在/etc/NetworkManager/NetworkManager.conf
文件中没有dns=dnsmasq
行,并且/etc/resolv.conf
仍被网络管理器覆盖,只有nameserver 127.0.1.1
解决方法是恢复符号链接以进行正确更新:
sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf