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

Qwe*_*tie 6 networking dns 16.04

我一直在尝试将我的 dns 更改为,8.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
Run Code Online (Sandbox Code Playgroud)

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

nameserver 8.8.8.8
nameserver 8.8.4.4
Run Code Online (Sandbox Code Playgroud)

并重新加载 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
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能更改 dns 以及如何检查它是否有效?

Rav*_*ina 6

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

使用:

$ nmcli device 
Run Code Online (Sandbox Code Playgroud)

获取网络管理员的状态:

DEVICE  TYPE      STATE        CONNECTION 
enp3s0  ethernet  connected    myConnection
Run Code Online (Sandbox Code Playgroud)

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

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

$ nmcli -f IP4.DNS connection show myConnection
Run Code Online (Sandbox Code Playgroud)

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

ipv4.dns:                               127.0.0.1
Run Code Online (Sandbox Code Playgroud)

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

nmcli connection modify myConnecion ipv4.dns "8.8.8.8, 8.8.4.4"
Run Code Online (Sandbox Code Playgroud)

全部重新加载连接后:

nmcli connection down myConnecion
nmcli connection up myConnecion
Run Code Online (Sandbox Code Playgroud)

然后检查/etc/resolv.conf

cat /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

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

sudo ss -pln sport = 53
Run Code Online (Sandbox Code Playgroud)

您应该将dnsmasq名称作为侦听端口 53 的进程获取,因此一切都很好,并且您正在使用正确的 DNS 名称服务,127.0.0.1 只是您和您设置的服务器之间的一层。

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

打开这个文件:

/etc/NetworkManager/NetworkManager.conf
Run Code Online (Sandbox Code Playgroud)

改成。dns=dnsmasq#dns=dnsmasq

最后:

sudo systemctl restart NetworkManager
Run Code Online (Sandbox Code Playgroud)

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


Tho*_*ard 6

为了扩展这里的另一个答案,并澄清这里的一些困惑,如果您使用网络管理器来管理您的连接,它还包括一个小版本的 dnsmasq。这就是您的 resolv.conf 中的 127.* 地址 - 本地主机的 IP 地址,dnsmasq 已绑定到该地址。

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

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

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