NetworkManager 没有根据我提供的配置更新 /etc/resolv.conf

NetworkManager 没有根据我提供的配置更新 /etc/resolv.conf

我正在笔记本电脑上设置 VPN 客户端。

为了避免 DNS 泄漏,我需要使用我的 VPN 提供商提供的 DNS 服务器。假设这些服务器是<DNS1><DNS2>

为了使用这些 DNS 服务器,我发出了以下命令:

nmcli con down <SSID>
sudo ifconfig <INTERFACE> down
sudo ifconfig <INTERFACE> up
nmcli con modify <SSID> ipv4.ignore-auto-dns yes
nmcli con modify <SSID> ipv4.dns "<DNS1> <DNS2>"
nmcli con up <SSID>

之后我重新启动。

/etc/resolv.conf的如下:

$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.53

尽管 NetworkManager 收到了指令:

$ nmcli con show <SSID> | grep dns
ipv4.dns:                               <DNS1>,<DNS2>
ipv4.ignore-auto-dns:                   yes

由于名称解析不起作用,我认为它仍在使用我的 ISP 通过 DHCP 提供的 DNS 服务器。

如果我强制使用 DNS 服务器,名称解析就会开始起作用:

sudo chattr -i /etc/resolv.conf
sudo chmod 666 /etc/resolv.conf
sudo echo "nameserver <DNS1>" > /etc/resolv.conf
sudo echo "nameserver <DNS2>" >> /etc/resolv.conf
sudo chmod 444 /etc/resolv.conf
sudo chattr +i /etc/resolv.conf

为什么 NetworkManager 没有/etc/resolv.conf根据我给出的配置进行更新?

答案1

您已启用 systemd-resolved,因此不是直接在 resolv.conf 中配置名称服务器,而是通过解析守护进程间接配置它们。

您的 resolv.conf 指向本地“已解析”服务,并且 NetworkManager 通过 D-Bus 将所有名称服务器信息提交给该服务,然后您可以使用来查看这些信息resolvectl

如果您想禁用此功能,请更改NetworkManager.conf 中的dns=和选项。resolv-manager=

(这样做是因为 systemd-resolved 允许不同的连接同时配置不同的 DNS 服务器。例如,许多使用企业 VPN 连接的人需要将 VPN 提供的 DNS 用于“corp.example.com”,但宁愿避免将其用于其他所有用途,因为他们不想将其浏览历史记录泄露给公司网络。

此类配置无法仅通过 resolv.conf 来表达,因此需要使用中间件,例如 Dnsmasq、Unbound,或者(如您的情况)systemd-resolved。)

相关内容