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

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

我读到过,只有当我的机器有自己的 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!这个地址是从哪里来的?

答案1

NetworkManager 是一个程序,它(通过 resolvconf 实用程序)将地址插入127.0.1.1resolv.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

答案2

有可能 resolvconf 配置错误。如果您一直在摆弄其配置文件,而没有真正理解 resolvconf 和 NetworkManager 的工作原理,则尤其有可能出现这种情况。

有关背景信息,请阅读 resolvconf 文档和 Stéphane Graber 的博客文章。

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.1resolv.conf。如另一个答案中所述,如果您将 NetworkManager 配置为不启动本地转发名称服务器实例,那么它将不会启动本地转发名称服务器,也不会告诉 resolvconf 将地址插入127.0.1.1resolv.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 中。通过注释掉此行来禁用 NetworkManager 控制的本地转发名称服务器是一个合理的选择dns=dnsmasq

[main]
...
#dns=dnsmasq
...

完成所有操作后,建议重新启动机器以清除陈旧的名称服务器信息记录。

sudo reboot

答案3

在我的例子中,文件dns=dnsmasq中没有行,并且仍然被网络管理器覆盖,只有/etc/NetworkManager/NetworkManager.conf/etc/resolv.confnameserver 127.0.1.1

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

sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf

答案4

Ubuntu 16.04 + Ubuntu 18.04 服务器 - 配置 /etc/resolv.conf 以在重启后保留

在 Ubuntu 16.04 服务器上,没有/etc/NetworkManager/NetworkManager.conf文件。

执行以下命令将显示该/etc/resolv.conf文件已链接到该/run/resolvconf/resolv.conf文件:

sudo ls -la /etc/resolv.conf

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

删除此文件并重新生成:

sudo rm -f /etc/resolv.conf
sudo echo '#== My Static /etc/resolv.conf File
#== ===============================
nameserver 8.8.8.8
nameserver 8.8.4.4' > /etc/resolv.conf

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

现在您将看到链接不再存在并且静态/etc/resolv.conf文件仍然存在。

sudo ls -la /etc/resolv.conf

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

现在配置 resolvconf 不重新生成默认/etc/resolv.conf文件,以便静态文件在重启后仍然存在,请执行以下命令:

sudo dpkg-reconfigure resolvconf

在第一个屏幕上,点击 Tab 键选择NO

配置 resolv.conf 以在重启后保留

在第二个屏幕上,按下 Tab 键选择 OK 并按 Enter。

配置 /etc/resolv.conf 以在重启后保留

/etc/resolv.conf重启服务器后,您的文件仍将保留。

Ubuntu 18.04 服务器

如果您将 ips 添加到/etc/netplan/50-cloud-init.yaml文件中,则很可能需要使用netplan apply或应用新设置netplan --debug apply。这样做将重新创建指向/etc/resolve.conf的链接../run/resolvconf/resolv.conf。如果发生这种情况,只需rm -f /etc/resolv.conf按照上述步骤重新创建即可。

现在您需要chattr如下文件:
chattr +i /etc/resolv.conf

/etc/resolv.conf重启服务器后,您的文件仍将保留。

如果您需要编辑该文件,请记住chattr像这样反转操作:
chattr -i /etc/resolv.conf

现在您可以编辑/etc/resolve.cfg

相关内容