OpenVPN客户端针对双IP波动服务器的内部链路可用性检测与重连配置咨询
OpenVPN客户端针对双IP波动服务器的内部链路可用性检测与重连配置咨询
老哥,你这个需求太贴合企业双ISP冗余的真实场景了——确实默认的OpenVPN keepalive只盯着服务器的外部IP连通性,哪怕隧道建起来但内网完全传不了数据,它也不会主动切换到第二个IP重连。给你几个亲测有效的解决思路:
一、核心方案:脚本监控内网链路+触发定向重连
OpenVPN本身没有直接检测隧道内部连通性的原生参数,但可以通过自定义监控脚本+OpenVPN信号触发重连实现你的需求,步骤很清晰:
- 先给客户端配置开脚本执行权限
在你的OpenVPN客户端配置文件里加上这行,允许执行外部脚本:
script-security 2
同时配上这两个参数,重连时不用反复重建隧道和加载密钥,能大幅加快重连速度:
persist-tun persist-key
- 写一个内网连通性监控脚本
比如创建vpn-monitor.sh脚本,把INTERNAL_HOST改成你VPN内网里最稳定的节点(比如公司网关、内网DNS服务器这类不会轻易宕机的设备):
#!/bin/bash # 要检测的VPN内网稳定节点IP INTERNAL_HOST="192.168.30.1" # 连续ping失败的次数阈值 FAIL_THRESHOLD=3 # 每次检测的间隔时间(秒) CHECK_INTERVAL=20 while true; do # 执行ping检测,每个包超时2秒 if ! ping -c $FAIL_THRESHOLD -W 2 $INTERNAL_HOST > /dev/null 2>&1; then echo "$(date): 内部VPN链路中断,触发重连..." # 给OpenVPN进程发SIGUSR1信号,触发重连到下一个配置的remote IP killall -SIGUSR1 openvpn fi sleep $CHECK_INTERVAL done
给脚本加执行权限:chmod +x vpn-monitor.sh
- 让脚本随VPN启动自动运行
在客户端配置里加一行,让VPN连接成功后后台启动监控脚本:
up "/path/to/vpn-monitor.sh &"
这样每次VPN连上,脚本就会在后台定时检测内网连通性,一旦触发失败阈值,就会让OpenVPN自动切换到下一个配置的remote IP重连。
二、优化重连逻辑的辅助参数
除了脚本监控,还可以调整这些参数让重连更顺畅:
remote-random:如果想让客户端随机选择两个IP发起连接(而非按配置顺序轮询),可以加上这行;偏好顺序轮询就不用加connect-retry 5 10:意思是每次重连失败后,间隔5秒重试,最多重试10次(数值可以根据你的网络稳定性调整)connect-retry-max 0:设置为0表示无限重试,直到连上可用的IP
三、为什么默认keepalive解决不了你的问题?
补充下你提到的keepalive的局限:keepalive n m的逻辑是客户端每n秒给服务器发一个控制通道的ping,如果m秒没收到回复,就认为服务器不可达然后重连。但这个检测的是OpenVPN控制通道的外部连通性——也就是你配置的IP1/IP2能不能通,完全不管隧道内部的内网流量是否正常。哪怕隧道建起来但内网路由出问题,控制通道的ping还是能通,所以不会触发重连。
备注:内容来源于stack exchange,提问作者Kevin M
相关产品推荐
相关产品推荐

