Kubuntu 20.04、Wireguard 和 systemd 解决的 DNS 泄漏

Kubuntu 20.04、Wireguard 和 systemd 解决的 DNS 泄漏

全新安装 Kubuntu 20.04(默认使用 systemd-resolve),并安装 Wireguard。我有一个 wg 隧道(通过 wifi 接口wlp0s20f3),所有流量都应该通过该隧道路由,而且几乎所有流量都通过了该隧道。但是,DNS请求通过wifi接口路由(wlp0s20f3) 出于某种原因。以下是 wg 配置 (WG0

[Interface]
Address = 10.0.0.7/32
PrivateKey = [[PRIVATE KEY]]
DNS = 213.136.95.10,213.136.95.11

[Peer]
PublicKey = [[PUBLIC KEY]]
PresharedKey = [[PRESHARED KEY]]
Endpoint = [[IP:PORT]]
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

/etc/resolv.conf/run/systemd/resolve/stub-resolv.conf是一个符合预期的符号链接

nameserver 127.0.0.53
options edns0 trust-ad
search dlinkrouter

一旦我建立了 wg 隧道(WG0)我偷偷看了/run/systemd/resolve/resolv.conf一眼

nameserver 192.168.0.1
nameserver 213.136.95.10
nameserver 213.136.95.11
search dlinkrouter

Wifi 网络的 DNS 始终处于领先地位,即使WG0DNS 服务器添加于其下方。

我运行以下命令以确保

$ resolvectl dns
Global: 213.136.95.10 213.136.95.11
Link 17 (wg0): 213.136.95.10 213.136.95.11
Link 2 (wlp0s20f3): 192.168.0.1
$ resolvectl domain
Global:
Link 17 (wg0): ~.
Link 2 (wlp0s20f3): ~. dlinkrouter
$ resolvectl query google.com
google.com: 172.217.17.238                     -- link: wlp0s20f3

-- Information acquired via protocol DNS in 8.5ms.
-- Data is authenticated: no

https://www.dnsleaktest.com/还报告了 DNS 泄漏。

中未配置任何内容/etc/systemd/resolved.conf

一个临时的解决方法是转到 NetworkManager 并编辑 WiFi 连接的网络设置,其中我设置 IPv4 -> 方法 -> 自动(仅地址),它不从 DHCP 获取 DNS 地址,但我必须对我连接的每个网络都这样做,这听起来不是一个好主意。

非常感谢任何关于如何解决此问题的想法。

答案1

$ resolvectl domain
Global:
Link 17 (wg0): ~.
Link 2 (wlp0s20f3): ~. dlinkrouter

这是 NetworkManager 旧版本的问题。这表明全部您的接口~.没有必要指定;这会使它们具有同等优先级,并且 systemd-resolved 将通过两者发送请求。请参阅此博客文章。

一般来说,~.除了隐私 VPN(例如 wg0)之外,不应在任何接口上设置。

您可以通过systemd-resolved=false在 NetworkManager.conf 中进行设置来解决这个问题(这样那里的设置就来自其他工具,例如 wg-quick,而不是来自 NM),或者用一个不受 systemd-resolved 管理的文件完全替换 /etc/resolv.conf,并且只列出您的静态 DNS 服务器。

我查看了 /run/systemd/resolve/resolv.conf 并看到 [...] 尽管 wg0 DNS 服务器已添加到 Wifi 网络的 DNS 下方,但它仍保持在顶部。

这几乎无关紧要。您的系统上没有任何内容使用此文件,并且它不代表 systemd-resolved 执行 DNS 查找的方式。

相关内容