我从 Ubuntu 17.04 计算机连接到各种 OpenVPN VPN 服务器,所有这些服务器都使用dhcp-option DNS A.B.C.D
(我知道这是一个 Windows 扩展,但它们就是这样推送的)推送 DNS 服务器。DNS 服务器(每个提供商的)很少更改,因此如果需要,我也可以手动输入它们。
我通过 Gnome 的网络设置(“+” > “从文件导入...”)使用其配置文件添加了 VPN .ovpn
,使其仅对当前用户可用。相比之下,物理连接是可供所有用户使用的 wifi 连接。
系统根本不使用 VPN 的 DNS 服务器。如果我接受文件中给出的配置,VPN 会连接,但 DNS 服务器甚至不会出现在 的输出中systemd-resolve --status
。如果我手动将它们添加到 IPv4 设置中,它们会出现,但不会被使用。
例如,在连接之前,的输出systemd-resolve --status
最后显示如下内容:
Link 3 (wlp3s0)
Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 192.168.1.1
Link 2 (enp0s31f6)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
192.168.1.1
是我的路由器。连接到 VPN 后,我看到这个额外的条目多于其他:
Link 9 (tun0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: A.B.C.D
E.F.G.G
A.B.C.D
等代表 VPN 提供商的 DNS。但是,我已通过数据包检查确认,即使有了这些新条目,DNS 查找192.168.1.1
仍通过使用我的 ISP 的服务器完成。
为了完整性,ip route show
给出:
$ ip route show
default via 10.7.7.1 dev tun0 proto static metric 50
default via 192.168.1.1 dev wlp3s0 proto static metric 600
10.7.7.0/24 dev tun0 proto kernel scope link src 10.7.7.182 metric 50
I.J.K.L via 192.168.1.1 dev wlp3s0 proto static metric 600
169.254.0.0/16 dev wlp3s0 scope link metric 1000
192.168.1.0/24 dev wlp3s0 proto kernel scope link src 192.168.1.193 metric 600
192.168.1.1 dev wlp3s0 proto static scope link metric 600
(I.J.K.L
是 VPN 地址。)有太多不同的默认路由似乎很奇怪,但我猜度量是为了解决这个问题?
无论原因是什么,我希望在连接到 VPN 时使用 VPN 提供商的 DNS,而在未连接到 VPN 时不使用它们。我考虑尝试使用提供商的 DNS 条目为我的 wifi 接入点创建第二个网络管理器配置文件,但事实证明,您无法为网络管理器已经知道的接入点创建第二个(或用户特定的)配置文件。
我想避免的事情:
- 修改
.ovpn
配置文件。我有大约一百个这样的文件,VPN 提供商会定期更新它们。 - 永久更改用于 wifi 的系统范围连接或路由器本身的 DNS 服务器。我只想在连接到 VPN 时使用 VPN 的 DNS 服务器。
- 每次连接到 VPN 时手动运行命令。我或其他用户很容易忘记执行此操作。