首先,这个问题与 NetworkManager 的每个连接 DNS 设置无关 - 这有许多 已回答 问题已经并有详尽的记录。
我问的是如何更改 NetworkManager 的全局 DNS 设置,但据我所知,Network Manager KDE GUI 和手册页中均未显示该设置nmcli
。有问题的设置是、等,它们相当晦涩难懂,主要在nmcli
nmcli-examples
global-dns
global-dns-domains
Gnome 开发者文档。
事实上,如果不是 Mullvad VPN 实例出了问题,导致我的 DNS/etc/resolv.conf
永久被填满,我甚至不会发现 NetworkManager 存在这样的全局 DNS 设置nameserver 10.64.0.1
- 即使设置每个连接的 DNS 也无济于事,全局 DNS 覆盖了一切。在调查中,运行nmcli
有所帮助 - 有一个部分
DNS configuration:
servers: 10.64.0.1
在所有连接详细信息下方,这暗示着它是某种全局 DNS 设置。在递归地搜索之后/home/
,/etc/
我/var/
终于找到了/var/lib/NetworkManager/NetworkManager-intern.conf
包含以下部分的文件:
# Internal section. Not overwritable via user configuration in 'NetworkManager.conf'
[.intern.global-dns-domain-*]
servers=10.64.0.1
options=
这似乎是罪魁祸首。编辑掉这部分内容为空应该很容易,但是这部分:
# Internal configuration file. This file is written and read
# by NetworkManager and its configuration values are merged
# with the configuration from 'NetworkManager.conf'.
(...)
#
# CHANGES TO THIS FILE WILL BE OVERWRITTEN
告诉我在更改此文件之前我应该关闭NetworkManager.service
。所以我基本上找到并解决了我的问题(并在这里描述它,以便有类似问题的人可能发现在互联网上找到有关它的任何信息并不是什么问题),但我仍然有疑问:
- 此全局 DNS 设置是否用于覆盖目的?如果不是,它有什么用途?
- 我假设 Mullvad VPN 应用程序是如何更改变量的?
- 可以通过 GUI 或 更改此全局 DNS 设置吗
nmcli
?更改它的“正确”方法是什么,因为我认为/var/lib/
在服务关闭时手动修改文件不是“正确”的解决方案。
答案1
我在处理类似问题时发现了这个问题。
我也希望每个网络连接都使用相同的 DNS 配置。但我不想破坏 VPN,因为 VPN 可能需要内部 DNS 服务器来解析私有主机名。我认为答案是接受 Unix 哲学,让不同的工具完成它们的工作,配置它们以相互通信。
例如,本教程展示了如何通过配置systemd-resolved
使用全局 DNS 服务器来解决此问题,并停止NetworkManager
告知systemd-resolved
每个连接使用 DHCP 提供的 DNS 服务器。
[main]
但是,我怀疑这种配置会破坏您的 VPN,除非您覆盖用于NetworkManager
停止管理 DNS 或告知DHCP 对 DNS 的说明的部分中的这两个指令systemd-resolved
。VPN 需要使用内部 DNS 服务器来解析内部主机名。
我可能错了——我还没有读过 NetworkManager 插件的工作原理,VPN 插件可能会为您覆盖这些设置,而您无需手动执行任何操作。请先尝试按照该教程进行操作并测试您的 VPN。
如果您无法解析 VPN 上的内部主机名,我认为您可以使用附加部分为您的 VPN 链接重新启用 DHCP 提供的 DNS,以便可以解析内部主机名。也许是这样的:
[connection-vpn]
match-device=interface-name:tun0
dns=systemd-resolved
systemd-resolved=true
您必须match-device
根据 VPN 连接的样子来调整指令或使用其他选择器。运行man NetworkManager.conf
并搜索“设备列表格式”以查看一些选项。您也可以选择完全不同的方法,例如使用dnsmasq
或其他方法。