我读过只有当我的机器有自己的 DNS 服务器时我才应该nameserver 127.0.1.1
在我的文件中。/etc/resolv.conf
因为它没有,拥有它会导致问题。但无论我做什么我都无法摆脱它!
以下是我到目前为止所做的事情:
- 添加
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 程序实例以用作本地转发名称服务器时,NM 才会插入该地址。该 dnsmasq 实例在地址 127.0.1.1 处侦听查询。如果您不想使用本地转发名称服务器,则将 NetworkManager 配置为不启动 dnsmasq 实例并且不插入该地址。在
/etc/NetworkManager/NetworkManager.conf
注释掉该行dns=dnsmasq
并重新启动 NetworkManager 服务。
在这种模式下,NetworkManager 更新
/etc/resolv.conf
(仍然通过 resolvconf)以包含 NetworkManager 用于活动连接的名称服务器地址。如果要禁用更新 resolv.conf 的 resolvconf 机制并只使用静态 resolv.conf 文件,请执行以下操作。
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.1
插入到 resolv.conf 中。正如另一个答案中提到的,如果您将 NetworkManager 配置为不启动本地转发名称服务器实例,那么它不会启动本地转发名称服务器,也不会告诉 resolvconf 将地址127.0.1.1
插入 resolv.conf。此默认配置正常工作,因此除非您的情况特殊,否则您应该恢复默认配置。
要恢复默认配置,请注意
#
字符开头的 resolvconf 标头文本../run/resolvconf/resolv.conf
为此,请执行以下命令。
NetworkManager 的原始配置是
在 /etc/NetworkManager/NetworkManager.conf 中。通过注释掉该
dns=dnsmasq
行来禁用 NetworkManager 控制的本地转发名称服务器是一个合理的选择。完成所有这些之后,建议重新启动机器以清除陈旧的名称服务器信息记录。
在我的例子中,文件中没有
dns=dnsmasq
行,仍然被网络管理器覆盖,只有/etc/NetworkManager/NetworkManager.conf
/etc/resolv.conf
nameserver 127.0.1.1
解决方法是恢复符号链接以进行正确更新:
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
删除此文件并重新生成它:
现在您将看到该链接不再存在并且您的静态
/etc/resolv.conf
文件存在。sudo ls -la /etc/resolv.conf
现在要将 resolvconf 配置为不重新生成默认
/etc/resolv.conf
文件,以便您的静态文件在重启后仍然存在,请执行以下命令:sudo dpkg-reconfigure resolvconf
在第一个屏幕上,点击选项卡按钮进行选择
NO
在第二个屏幕上,按 Tab 键选择确定,然后按回车键。
重新启动服务器后,您的
/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