我正在使用 Ubuntu 22.04,我一直在尝试让 VPN 连接在我的正常网络旁边工作。我想仅通过 VPN 路由其网络的流量(选择“仅将此连接用于其网络上的资源”)。
我还使用以下方法手动添加了 DNS resolvectl
:
sudo resolvectl dns tun0 10.10.10.10
此后,resolvectl
打印:
$ resolvectl
Global
Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 2 (enp2s0f0)
Current Scopes: DNS
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1 fe80::267f:20ff:fe5b:bde9%21981
DNS Domain: home
Link 3 (wlp3s0)
Current Scopes: none
Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Link 4 (enx00e04c6800a3)
Current Scopes: none
Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Link 8 (tun0)
Current Scopes: DNS
Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 10.10.10.10
DNS Servers: 10.10.10.10
因此看起来 DNS 服务器设置正确(enp2s0f0 为 192.168.1.1,tun0 为 10.10.10.10)。
192.168.1.1 可以解析的公共域名可以正常解析。遗憾的是,10.10.10.10 可以解析的域名却无法解析。
例如,当尝试internal.int
使用以下方法解决时dig
:
$ dig internal.int
; <<>> DiG 9.18.1-1ubuntu1-Ubuntu <<>> internal.int
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55035
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;internal.int. IN A
;; Query time: 4 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Sun Jul 03 21:53:23 CEST 2022
;; MSG SIZE rcvd: 40
但另一方面,当指定 10.10.10.10 作为 DNS 服务器时,它可以正常解析:
$ dig internal.int @10.10.10.10
; <<>> DiG 9.18.1-1ubuntu1-Ubuntu <<>> internal.int @10.10.10.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47904
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 987649b09c83e7c9763943a462c1f3f6e8bdcf9b730a1234 (good)
;; QUESTION SECTION:
;internal.int. IN A
;; ANSWER SECTION:
internal.int. 3600 IN A 10.2.97.6
internal.int. 3600 IN A 10.2.97.7
;; Query time: 28 msec
;; SERVER: 10.10.10.10#53(10.10.10.10) (UDP)
;; WHEN: Sun Jul 03 21:54:30 CEST 2022
;; MSG SIZE rcvd: 100
因此,VPN 总体而言运行良好(路由正常,因为我可以到达 10.10.10.10),解析公共域名也运行良好(例如 google.com),但似乎 systemd-resolved(或者可能是其他什么?)没有将 10.10.10.10 作为 DNS。
我的理解是,它应该使用 192.168.1.1 作为 DNS 来查找 internal.int,如果失败,则尝试使用 10.10.10.10 来解析地址。相反,当 192.168.1.1 无法解析时,它只是不返回地址。
是否可以让 systemd-resolved 同时使用 192.168.1.1 和 10.10.10.10 DNS 服务器?
PS 我尝试将 10.10.10.10 设置为enp2s0f0
192.168.1.1 旁边的辅助 DNS 服务器 - 但没有帮助。
答案1
我要做的基本是:
sudo resolvectl dns tun0 10.10.10.10
sudo resolvectl domain tun0 ~.
但每次连接到 VPN 后都必须运行它。为了使此设置持久,我需要执行以下操作:
- 标记“仅将此连接用于其网络上的资源”(IPv4 和 IPv6 选项卡)。
- 禁用自动 DNS 并在 IPv4 选项卡中将 10.10.10.10 设置为 DNS。
- 跑步
nmcli connection modify <VPN-connection-name> ipv4.dns-search ~.
- 验证
resolvectl
显示链接(或类似链接)的正确 DNS 服务器和域tun0
:
$ resolvectl
[...]
Link 21 (tun0)
Current Scopes: DNS
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 10.10.10.10
DNS Servers: 10.10.10.10
DNS Domain: ~.