![VPN 地址的 DNS 异常行为](https://linux22.com/image/778360/VPN%20%E5%9C%B0%E5%9D%80%E7%9A%84%20DNS%20%E5%BC%82%E5%B8%B8%E8%A1%8C%E4%B8%BA.png)
当我使用 barracudavpn 连接到公司 VPN 时,出现了这种奇怪的行为(我的操作系统是 Fedora 36)。连接后网络配置似乎正常:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.16.40.1 0.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 wlp0s20f3
10.16.40.0 0.0.0.0 255.255.252.0 U 0 0 0 tun0
88.157.223.5 192.168.1.1 255.255.255.255 UGH 0 0 0 wlp0s20f3
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.22.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-533d90405936
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp0s20f3
192.168.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 wlp0s20f3
$ cat /etc/resolv.conf
nameserver 10.0.1.3
nameserver 10.40.0.6
nameserver 10.0.1.2
nameserver 10.40.0.7
nameserver 127.0.0.53
search mycompany.xx home
如果我向 DNS 查询某些服务,它会按预期工作:
$ nslookup bitbucket.mycompany.xx
Server: 10.0.1.3
Address: 10.0.1.3#53
bitbucket.mycompany.xx canonical name = app-bitbucket.mycompany.xx.
Name: app-bitbucket.mycompany.xx
Address: 10.0.1.246
但任何其他命令都会失败:
$ ping bitbucket.mycompany.xx
ping: bitbucket.mycompany.xx: Name or service not known
我在这里遗漏了什么?
答案1
通过@PatrickMevzek 和@user1686 的见解,我设法了解了这个问题,所以我将发布这个答案来帮助任何遇到同样问题的人。
barracudavpn
连接后,程序会更改以/etc/resolv.conf
添加 VPN 名称服务器,但是默认情况下,此文件被 systemd.resolved 忽略来自 systemd-resolved.service(8) 手册页:
为了提高兼容性,需要读取 /etc/resolv.conf 来发现已配置的系统 DNS 服务器,但前提是它不是符号链接到 /run/systemd/resolve/stub-resolv.conf、/usr/lib/systemd/resolv.conf 或 /run/systemd/resolve/resolv.conf。
默认的 Fedora 36 安装有以下内容:
$ ls -l /etc/resolv.conf
lrwxrwxrwx. 1 root root 39 jun 27 02:54 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
因此,只要删除此链接(该文件将由 systemd-resolved 重新创建),一切就会按预期工作。