优先考虑 VPN 的 DNS 服务器

优先考虑 VPN 的 DNS 服务器

有没有办法仅在通过网络管理器或其配置文件之一连接到 VPN(OpenVPN)时优先考虑特定的 DNS 服务器?

我有一个经常连接的 VPN ( 192.168.1.*),其 DNS ( 192.168.1.53) 配置为解析其网络上的主机名*.internal.example.com。我的本地路由器 ( 192.168.0.1) 上有 DD-WRT 和 Google 的 DNS 设置(这些不是必需的)。

/etc/resolv.conf我已经用符号链接替换了 systemd存根/run/systemd/resolve/resolv.conf,以便主机名实际上可以使用 VPN 的 DNS 服务器进行解析。昨天它运行正常,因为 VPN 的 DNS 服务器位于列表顶部。

# /etc/resolv.conf -> /run/systemd/resolve/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
# ...

nameserver 192.168.1.53
nameserver 192.168.0.1
nameserver 8.8.8.8
# Too many DNS servers configured, the following entries may be ignored.
nameserver 8.8.4.4
search Home internal.example.com

但是,今天我连接时 DNS 条目被重新排序了。

# /etc/resolv.conf -> /run/systemd/resolve/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
# ...

nameserver 192.168.0.1
nameserver 8.8.8.8
nameserver 8.8.4.4
# Too many DNS servers configured, the following entries may be ignored.
nameserver 192.168.1.53
search Home internal.example.com

重启后顺序经常会发生变化。有时重新连接到 VPN 后我会注意到顺序发生了变化(在遇到分辨率问题后)。

systemd-resolve运行正常,并且可以使用正确的 DNS 服务器解析主机。

$ systemd-resolve --status --no-pager
Global
          DNSSEC NTA: ...

Link 10 (tun0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.1.53
          DNS Domain: internal.example.com

Link 2 (eno1)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.0.1
                      8.8.8.8
                      8.8.4.4
                      192.168.1.53
          DNS Domain: Home
$ systemd-resolve srv1.internal.example.com
srv1.internal.example.com: 192.168.1.113

-- Information acquired via protocol DNS in 2.1ms.
-- Data is authenticated: no

pingnslookupssh失败了。

$ ping srv1.internal.example.com
ping: srv1.internal.example.com: Name or service not known
$ nslookup srv1.internal.example.com
Server:         192.168.0.1
Address:        192.168.0.1#53

** server can't find srv1.internal.example.com: NXDOMAIN
$ ssh srv1.internal.example.com
ssh: Could not resolve hostname srv1.internal.example.com: Name or service not known

几点说明。

我通过网络管理器连接到 VPN。我在 VPN 上手动指定了 VPN 的 DNS:IPv4 > DNS 服务器。

我尝试使用单独的有线以太网连接,并在 IPv4 > 其他 DNS 服务器下配置 VPN 的 DNS。

答案1

既然您接受使用 dnsmasq,那么这样怎么样:

  1. 将您的 resolv.conf 指向 127.0.0.1(名称服务器 127.0.0.1)
  2. 在你的 dnsmasq 上尝试此配置:
server=/internal.example.com/192.168.1.53
server=8.8.8.8

这将使用 192.168.1.53 作为域“internal.example.com”,并使用 8.8.8.8 作为其他所有域。

查看 dnsmasq 手册页上的“-S, --local, --server=”选项。

更新:您可能还想禁用 DHCP,以避免与本地路由器发生冲突。也许只监听 lo(127.0.0.1)接口。

答案2

可以使用

nmcli -p 连接修改 MY_VPN_CONNECTION ipv4.dns-priority -42

在这里找到https://github.com/systemd/systemd/issues/6076

答案3

感谢 JucaPirama 的回答对于我需要的方向,这是我的最终设置域名系统在...前面systemd-已解决

禁用systemd-已解决存根 DNS 服务器。在/etc/systemd/resolved.conf 更改

#DNSStubListener=yes

DNSStubListener=no

重新开始systemd-已解决

sudo systemctl restart systemd-resolved

安装域名系统

sudo apt-get install dnsmasq

设置域名系统。 正在/etc/dnsmasq.conf使用systemd-已解决解析配置文件通过更改文件

#resolv-file=/etc/resolv.conf

resolv-file=/run/systemd/resolve/resolv.conf

通过添加以下选项设置 VPN 的 DNS 服务器,使其仅用于其域

server=/internal.example.com/192.168.1.53

禁用 DHCP 以防止任何潜在冲突,方法是更改

#no-dhcp-interface=

no-dhcp-interface=

重新开始域名系统

sudo systemctl restart dnsmasq

解除关联/etc/resolv.confsystemd-已解决的配置。

sudo unlink /etc/resolv.conf

编辑/etc/resolv.conf以使用域名系统。此步骤可能不需要,因为网络管理器在某些时候会覆盖它以指向127.0.0.53反正。

nameserver 127.0.0.53

相关内容