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

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

我从 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 时手动运行命令。我或其他用户很容易忘记执行此操作。

相关内容