Ubuntu 20.10。尝试修复拆分连接的 DNS(工作使用 Wireguard VPN,其他所有连接使用公共链接),但陷入 NetworkManager+systemd-resolved 设置中。
一个问题是,我需要禁用通过 wireguard 链接进行的任何查询的 DNS-over-TLS(仅限于单个域)。
/etc/systemd/resolved.conf似乎只允许全局设置。因此,当我在那里启用 DNS over TLS 时,它也对我的 wireguard 链接有效。
我可以使用 手动关闭 wireguard 链接resolvectl dnsovertls wg0 no
,但每次重新启动 systemd-resolved 时,它都会重新打开。
如果我理解正确的话,systemd-resolved 的每个链接设置由 NetworkManager 管理。但是 NetworkManager 的关键文件(/etc/NetworkManager/系统连接/) 似乎没有针对 tls 上的 dns 的设置。
我怎样才能使这个设置持续下去?
答案1
我遇到了同样的问题,并能够通过使用 NetworkManager-dispatcher 来解决它,它允许在连接事件上运行脚本。
由于我使用的是 Fedora,所以我不确定它是否可以在 Ubuntu 上运行,但以下是我所做的:
- 启用 NetworkManager-dispatcher.service
systemctl enable NetworkManager-dispatcher.service
- 在 /etc/NetworkManager/dispatcher.d/ 目录中创建脚本,内容如下:
#!/bin/bash
readonly interface="$1"
readonly action="$2"
if [[ $action = vpn-up && $CONNECTION_ID = udp-other ]]; then
resolvectl dnsovertls "$interface" no
fi
用您的 VPN 连接名称替换udp-other
(或者您也可以使用$CONNECTION_UUID
),并确保脚本的所有者和组是 root,并且它被标记为可执行。
答案2
现在可以通过以下connection.dns-over-tls
设置实现此目的:这次提交。
要设置所有 NetworkManager 管理的连接的默认值,请编辑NetworkManager.conf
以包括:
[connection]
connection.dns-over-tls=0
要在单个连接上设置,请执行:
nmcli connection modify MyConnection connection.dns-over-tls 0