resolv.conf中的名称服务器127.0.1.1不会消失!


60

我读到只有在我的机器有自己的DNS服务器的情况下,我才应该nameserver 127.0.1.1/etc/resolv.conf文件中包含该文件。既然没有,那么它就会引起问题。但是无论我做什么我都不能摆脱它!

这是我到目前为止所做的事情:

  1. 正在添加nameserver 192.168.1.3/etc/resolvconf/resolv.conf.d/base文件。(192.168.1.3是我们网络的DNS)。
  2. 正在运行:sudo resolvconf --enable-updates
  3. 正在运行:sudo resolvconf -u
  4. 运行:(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!这个地址是哪里来的?

Answers:


100

NetworkManager是程序(通过resolvconf实用程序)将地址127.0.1.1插入resolv.conf。仅当将NM配置为启动dnsmasq程序的实例以用作本地转发名称服务器时,NM才会插入该地址。该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用于活动连接的名称服务器地址。

如果要禁用用于更新resolv.conf的resolvconf机制,而仅使用静态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

我有3个DNS,并且如果禁用dnsmasq,查询将永远无法到达第3个提示?我想查询Google,然后查询Intranet dns。谢谢
JorgeeFG 2015年

3
restart network-manager在Xenial上不起作用,因为它使用systemd而不是upstart。试试systemctl restart network-manager
Matthias Weiler

我的问题是dnsmasq程序会问哪个DNS服务器?它会询问DHCP的DNS服务器以查询主机IP地址吗?
钟钟”

11

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桌面在默认情况下已安装并激活了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

1

在我的情况下dns=dnsmasq/etc/NetworkManager/NetworkManager.conf文件中没有任何行,/etc/resolv.conf但仍被网络管理器覆盖,只有nameserver 127.0.1.1

解决方法是恢复符号链接以进行正确的更新:

sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.