当前位置: 首页>>技术教程>>正文


resolv.conf中的nameserver 127.0.1.1不会消失!

, , , ,

问题描述

我已经读过,只有当我的机器有自己的DNS服务器时,才能在我的/etc/resolv.conf文件中安装nameserver 127.0.1.1。既然没有,那就会引起问题。但无论我做什么,我都无法摆脱它!

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

  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!这个地址来自哪里?

最佳解决思路

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-controlled 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-controlled本地转发名称服务器是一个合理的选择。

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

完成所有这些操作后,建议重新启动计算机以清除过时的名称服务器信息记录。

sudo reboot

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1549.html,未经允许,请勿转载。