在 Ubuntu 18.04 上强制使用 VPN 提供的 DNS 服务器

在 Ubuntu 18.04 上强制使用 VPN 提供的 DNS 服务器

在原始 Ubuntu 18.04 无头服务器上,OpenVPN 客户端用于以 Tap 模式连接到远程网络。地址、默认网关、DNS 服务器等由远程网络上的 DHCP 服务器提供。

但是,似乎并未强制使用 VPN 提供的 DNS 服务器。由于systemd-resolved默认情况下用作存根解析器,因此这是的相关输出systemd-resolve --status

Global
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa
                      168.192.in-addr.arpa
                      17.172.in-addr.arpa
                      18.172.in-addr.arpa
                      19.172.in-addr.arpa
                      20.172.in-addr.arpa
                      21.172.in-addr.arpa
                      22.172.in-addr.arpa
                      23.172.in-addr.arpa
                      24.172.in-addr.arpa
                      25.172.in-addr.arpa
                      26.172.in-addr.arpa
                      27.172.in-addr.arpa
                      28.172.in-addr.arpa
                      29.172.in-addr.arpa
                      30.172.in-addr.arpa
                      31.172.in-addr.arpa
                      corp
                      d.f.ip6.arpa
                      home
                      internal
                      intranet
                      lan
                      local
                      private
                      test

Link 16 (tap1)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 10.0.0.2
          DNS Domain: foo.bar

Link 2 (ens192)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.0.1
          DNS Domain: foo2.bar2

如您所见,两个 DNS 服务器(来自本地网络 DHCP 和 VPN 网络 DHCP)都存在。

  • systemd-resolved如何使用命令行实用程序找出实际使用的 DNS 服务器?
  • 如何强制所有请求都使用 VPN 提供的 DNS 服务器?理论上,这可以通过将 DNS 域设置为 来实现~.,如文档所述。但是,由于、和DHCPsystemd-resolved之间的复杂交互,我无法覆盖此设置。systemd-resolvedsystemd-networkdnetplan

答案1

我已经找到了第二个问题的解决方案:

  1. 删除netplantap 设备的所有配置,然后运行netplan apply。Netplan 配置始终覆盖自定义systemd-networkd配置,但它们不提供我们需要的必要选项。
  2. 添加systemd-networkd配置,例如/etc/systemd/network/tap1.network

    [Match]
    Name=tap1
    
    [Link]
    RequiredForOnline=no
    
    [Network]
    DHCP=ipv4
    LinkLocalAddressing=ipv6
    Domains=~.
    
    [DHCP]
    UseMTU=true
    RouteMetric=100
    UseDomains=false
    
  3. 重新启动 VPN 会话

现在按预期systemd-resolved用作DNS 域。关键元素是配置的和。~.[Network] Domains=~.[DHCP] UseDomains=falsesystemd-networkd

相关内容