![在 Ubuntu 16.04 上断开 VPN 连接后,DNS 名称服务器发生更改](https://linux22.com/image/1020556/%E5%9C%A8%20Ubuntu%2016.04%20%E4%B8%8A%E6%96%AD%E5%BC%80%20VPN%20%E8%BF%9E%E6%8E%A5%E5%90%8E%EF%BC%8CDNS%20%E5%90%8D%E7%A7%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8F%91%E7%94%9F%E6%9B%B4%E6%94%B9.png)
我在网络管理器小程序中使用 Google DNS 8.8.8.8 已有一段时间了,一切似乎都运行良好。几天前,我将设置从手动切换为自动,并删除了 Google DNS 以获取其他 DNS 服务器。我每天都使用 VPN 连接到客户的资源,现在每次我断开与 VPN 的连接时,我的 DNS 名称服务器都会自动设置为 8.8.8.8,这会降低我的互联网连接性能。我通过执行以下操作来验证这一点nslookup
。
nslookup www.o2.pl
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: www.o2.pl
Address: 212.77.100.61
当我重新启动电脑时,名称服务器设置为 127.0.1.1,并且互联网运行正常。
nslookup www.o2.pl
Server: 127.0.1.1
Address: 127.0.1.1#53
Non-authoritative answer:
Name: www.o2.pl
Address: 212.77.100.61
当我连接到 VPN 并断开连接时,DNS 会自动设置为 8.8.8.8。为什么会发生这种情况?我该如何解决?
答案1
我找到了问题的根本原因和解决方案。
openconnect
使用/usr/share/vpnc-scripts/vpnc-script
脚本,OpenConnect 调用该脚本进行所有路由和 DNS 设置。经过一番谷歌搜索后,我意识到我在后台运行 openconnect,并使用了错误的信号来断开连接。以下是我使用的命令:
连接:
sudo openconnect -b -u MY_USER --authgroup=any HOST --pid-file=/var/run/openconnect.pid
断开:
sudo kill `cat /var/run/openconnect.pid`
根据man kill
,kill
命令默认发送 TERM 信号,根据man openconnect
-SIGTERM 使 openconnect 立即退出,而无需注销或运行 vpnc-script。所以,我使用了错误的信号来断开 openconnect,这就是为什么 openconnect 没有使用 来vpnc-script
恢复路由和 DNS。解决方案很简单,我需要的是在 kill 命令中使用 -SIGINT 信号:
sudo kill -SIGINT `cat /var/run/openconnect.pid`
不是
sudo kill `cat /var/run/openconnect.pid`
这是针对版本 v7.06 的。另一个解决方案是从此 PPA 安装 openconnect 版本 8 https://launchpad.net/~dwmw2/+archive/ubuntu/openconnect 它使用 vpnc-script 来表示 SIGTERM 和 SIGINT。
SIGNALS
In the data phase of the connection, the following signals are handled:
SIGINT / SIGTERM
performs a clean shutdown by logging the session off, disconnecting from the gateway, and running the vpnc-script to restore the network configuration.