全新安装 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 查找的方式。