如何在连接到VPN时强制使用不同的DNS服务器?

我有从我的Ubuntu 17.04机器连接的各种OpenVPN VPN服务器,所有这些服务器都使用dhcp-option DNS ABCD推送DNS服务器(我知道这是一个Windows扩展,但这就是它们的推送方式)。 DNS服务器(对于每个提供商)很少更改,因此如果需要,我也可以手动输入它们。

我通过Gnome的网络设置(“+”>“从文件导入…”)使用其.ovpn配置文件添加VPN,使其仅供当前用户使用。 相比之下,物理连接是所有用户都可以使用的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: ABCD EFGG 

ABCD等代表VPN提供商的DNS。 但是,我已通过数据包检查确认即使使用这些新条目,DNS查找也是通过192.168.1.1完成的, 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 IJKL 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 

IJKL是VPN地址。)看起来很奇怪,默认路由太多了,但我想这个指标是为了解决这个问题?

无论是什么原因,我想在连接到VPN时使用VPN提供商的DNS,而在我不连接时不使用它们。 我考虑过尝试使用提供商的DNS条目为我的wifi接入点创建第二个网络管理器配置文件,但事实certificate,您无法为网络管理器已经知道的接入点创建第二个(或用户特定的)配置文件。

我宁愿避免的事情:

  • 修改.ovpn配置文件。 我有大约一百个,它们由VPN提供商定期更新。
  • 永久更改用于wifi的系统范围连接的DNS服务器,或路由器本身。 我连接到VPN时只想使用VPN的DNS服务器。
  • 每次连接到VPN时都手动运行命令。 我或其他用户很容易忘记这样做。