我有两个 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-alive
tun-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
在此处为您的服务器指定多行可能会很有用。