有没有办法仅在通过网络管理器或其配置文件之一连接到 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
ping
但nslookup
都ssh
失败了。
$ 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,那么这样怎么样:
- 将您的 resolv.conf 指向 127.0.0.1(名称服务器 127.0.0.1)
- 在你的 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
答案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.conf
自systemd-已解决的配置。
sudo unlink /etc/resolv.conf
编辑/etc/resolv.conf
以使用域名系统。此步骤可能不需要,因为网络管理器在某些时候会覆盖它以指向127.0.0.53反正。
nameserver 127.0.0.53