Ubuntu 22.04——VPN 的 DNS 服务器不用于解析地址

Ubuntu 22.04——VPN 的 DNS 服务器不用于解析地址

我正在使用 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 设置为enp2s0f0192.168.1.1 旁边的辅助 DNS 服务器 - 但没有帮助。

答案1

我要做的基本是:

sudo resolvectl dns tun0 10.10.10.10
sudo resolvectl domain tun0 ~.

但每次连接到 VPN 后都必须运行它。为了使此设置持久,我需要执行以下操作:

  1. 标记“仅将此连接用于其网络上的资源”(IPv4 和 IPv6 选项卡)。
  2. 禁用自动 DNS 并在 IPv4 选项卡中将 10.10.10.10 设置为 DNS。
  3. 跑步nmcli connection modify <VPN-connection-name> ipv4.dns-search ~.
  4. 验证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: ~.

相关内容