断开连接后 OpenVPN 客户端 nslookup 失败

断开连接后 OpenVPN 客户端 nslookup 失败

目前,我正尝试通过运行 Debian Linux 的网关路由我的流量,该网关通过 VPN 连接转发所有传入流量(客户端 -> 带有 OpenVPN 客户端的网关 -> VPN 服务器 -> 互联网)。这工作正常,但它有时会丢失连接,并且由于 nslookup 超时而无法重新连接。这种情况每隔几天就会发生一次,大多是在晚上(据我所知,如果长时间没有发送流量,某些服务器会终止会话)。

发生这种情况时,我会尝试通过 SSH 连接,但输入用户名后,服务器会等待大约 20 秒才要求输入密码,这也很奇怪。通常它会立即要求输入密码。

查看系统日志时出现以下情况:

Jul 20 00:50:11 gateway ovpn-cyberghost[23893]: RESOLVE: Cannot resolve host address: 5-nl.cg-dialup.net: Temporary failure in name resolution

ifconfig 和 route 显示 VPN 接口仍然处于运行状态,但似乎已挂断。

root@gateway:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.129.57.169   128.0.0.0       UG    0      0        0 tun0
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth2
10.129.57.169   0.0.0.0         255.255.255.255 UH    0      0        0 tun0
93.190.138.125  192.168.0.1     255.255.255.255 UGH   0      0        0 eth2
128.0.0.0       10.129.57.169   128.0.0.0       UG    0      0        0 tun0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2
217.23.12.229   192.168.0.1     255.255.255.255 UGH   0      0        0 eth2

这是我的 OpenVPN 配置:

client
remote 5-nl.cg-dialup.net 443
dev tun 
proto udp
auth-user-pass /etc/openvpn/auth.txt
route-nopull

resolv-retry infinite 
redirect-gateway def1
persist-key
persist-tun
writepid /run/openvpn.pid
nobind
cipher AES-256-CBC
auth MD5
ping 5
ping-restart 20
persist-local-ip
ping-timer-rem
explicit-exit-notify 2
script-security 2
remote-cert-tls server
route-delay 5
tun-mtu 1500 
fragment 1300
mssfix 1300
verb 1
comp-lzo

这是我的 resolv.conf:

 root@gateway:~# cat /etc/resolv.conf
 nameserver 85.214.20.141
 nameserver 213.73.91.35

更改名称服务器,例如更改为 127.0.0.1(bind9 正确安装为 DNS 解析器),并没有解决任何问题,但我不希望在这里找到问题。

我猜,原因如下:由于客户端不活动,服务器关闭了会话,因此客户端尝试重新连接。在重新连接的过程中,OpenVPN 解析了 VPN 服务器的主机名,但它使用损坏的 VPN 接口(该接口被设置为默认网关,而不是正确的默认网关)。没有进行清理(删除 tun0 接口并删除路由),这也许可以解决问题。此外,我认为有两个默认网关可能会有问题,但我不确定。

手动终止 OpenVPN 进程并重新启动后,一切都正常运行,就像什么都没发生过一样。

我不知道如何告诉 OpenVPN 使用 eth2 接口进行初始 nslookup 或让 OpenVPN 清理路由。我是不是忘了在配置文件中添加某些内容(我在手册页中没有找到任何有用的命令)?

答案1

https://askubuntu.com/questions/28733/how-do-i-run-a-script-after-openvpn-has-connected-successfully告诉如何在连接建立或断开后执行自定义脚本。

因此,您应该创建一个关闭脚本,它将清理路由并让 OpenVPN 在连接断开时执行该脚本。

相关内容