在 Ubuntu 16.04 上断开 VPN 连接后,DNS 名称服务器发生更改

在 Ubuntu 16.04 上断开 VPN 连接后,DNS 名称服务器发生更改

我在网络管理器小程序中使用 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 killkill命令默认发送 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.

相关内容