每个链接的 DNS over TLS 设置(NetworkManager + systemd-resolved)

每个链接的 DNS over TLS 设置(NetworkManager + systemd-resolved)

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 上运行,但以下是我所做的:

  1. 启用 NetworkManager-dispatcher.service
systemctl enable NetworkManager-dispatcher.service
  1. 在 /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

相关内容