如果服务器没有响应,如何停止 OpenVPN 隧道?

如果服务器没有响应,如何停止 OpenVPN 隧道?

我有两个 openvpn 服务器,但两个都路由到一个网络。这是为了容错。如果其中一个服务器宕机,流量应该通过另一个服务器。客户端接收具有不同度量的路由,因此这个任务解决了。

但当其中一台服务器离线时,客户端会尝试重新连接到该服务器,而不会关闭 tun-interface。因此流量会尝试通过有问题的服务器。

我希望客户端在服务器离线时关闭 tun 接口,并在服务器恢复时自动打开它。

这是客户端的配置:

tls-client

dev tun
proto udp
remote server1.ovpn.example.com 2100

topology subnet

pull

#resolv-retry infinite
#nobind

tls-auth keys/ta.key 1
ca keys/ca.crt
cert keys/client.crt
key keys/client.key
ns-cert-type server

cipher DES-EDE3-CBC

keepalive 10 120

comp-lzo

user nobody
group nogroup

persist-key
persist-tun

status /var/log/openvpn-status.log
log-append  /var/log/openvpn.log

verb 3

route 172.19.20.0 255.255.255.0 172.16.150.3
route-metric 3

我认为如果我删除keep-alivetun-interface,它将在 ping 超时后离线,但是当服务器返回时它会恢复吗?

答案1

删除该persist-tun选项。如果没有该选项,VPN 链接就会断开,tun 设备将关闭并被删除。当然,问题是删除该选项意味着您需要以 root 而不是 nobody 身份运行 VPN 守护程序。因为作为 nobody 帐户,OpenVPN 在重新建立连接时将无法创建新的 tun 设备。

答案2

创建 VPN 项目后Qubes 的,我发现当连接中断时,OpenVPN 肯定会挂起。

以下是我添加的使 OpenVPN 响应断开连接的选项:

ping 10
ping-restart 40
connect-retry 5 30
connect-retry-max 7
resolv-retry 15

根据文档,如果您有多个remote条目,则在连接失败时 ping-restart 将导致使用下一个远程。因此,remote在此处为您的服务器指定多行可能会很有用。

相关内容