为什么当我更改 DNS 时 /etc/resolv.conf 没有更新?

为什么当我更改 DNS 时 /etc/resolv.conf 没有更新?

我一直试图改变我的 DNS8.8.8.8 8.8.4.4但似乎无法做到。

/etc/resolv.conf

# 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
nameserver 127.0.0.1

/etc/resolvconf/resolv.conf.d/base添加了

nameserver 8.8.8.8
nameserver 8.8.4.4

并重新加载sudo resolvconf -u

但没有什么改变/etc/resolv.conf

/etc/resolvconf/resolv.conf.d/base如果我在例如添加ameserver 8.8.8.8和重新加载时拼写错误,cat /etc/resolv.conf现在就会显示。

# 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
nameserver 127.0.0.1
ameserver 8.8.8.8

我应该做什么来更改 DNS 以及如何检查它是否有效?

答案1

为了扩展此处的另一个答案,并消除此处的一些混淆,如果您使用网络管理器来管理连接,它还包含一个小版本的 dnsmasq。这就是 resolv.conf 中的 127.* 地址 - dnsmasq 绑定到的 localhost 的 IP 地址。

网络管理器在配置了 DNS 服务器后,会告诉 dnsmasq 将请求中继到哪些 DNS 服务器。

如果您在网络管理器的设置中将 8.8.8.8 设置为您的 DNS 服务器,dnsmasq 会将所有未缓存的请求转发到 8.8.8.8 进行实际解析,而您的计算机会将 DNS 请求直接发送到 dnsmasq 进行处理。

我知道这很令人困惑,但是当您使用网络管理器管理连接时,您不能依赖 resolv.conf 来显示正在使用的 DNS 服务器。

答案2

首先恢复我们在评论中所做的一切。

使用:

$ nmcli device 

获取网络管理器的状态:

DEVICE  TYPE      STATE        CONNECTION 
enp3s0  ethernet  connected    myConnection

所以我的界面是enp3s0,我的连接名称是myConnection

我可以检查我的连接正在使用哪个 DNS 服务器:

$ nmcli -f IP4.DNS connection show myConnection

对于你来说我想它会显示:

ipv4.dns:                               127.0.0.1

现在让我们设置您想要的 DNS 服务:

nmcli connection modify myConnecion ipv4.dns "8.8.8.8, 8.8.4.4"

全部重新加载连接后:

nmcli connection down myConnecion
nmcli connection up myConnecion

然后检查/etc/resolv.conf

cat /etc/resolv.conf

如果它仍然说您正在使用127.0.0.1作为您的 DNS 服务器,那么很有可能您正在使用“dnsmasq”,以确保运行:

sudo ss -pln sport = 53

您应该dnsmasq以在端口 53 上监听的进程形式获取名称,因此一切正常并且您使用正确的 DNS 名称服务,127.0.0.1 只是您和您设置的服务器之间的一层。

如果您想要真正看到“8.8.8.8”,那么/etc/resolv.conf您应该禁用“dnsmasq”。

打开此文件:

/etc/NetworkManager/NetworkManager.conf

改成。dns=dnsmasq#dns=dnsmasq

最后:

sudo systemctl restart NetworkManager

现在/etc/resolv.conf再检查一下。

相关内容