高可用VPN集群部署指南:基于Keepalived与IPsec的冗余链路设计
4/28/2026 · 3 min
引言
在现代企业网络中,VPN(虚拟专用网络)是连接远程站点和移动用户的关键技术。然而,单点故障可能导致整个VPN服务中断,造成业务损失。通过部署高可用VPN集群,利用Keepalived实现虚拟IP(VIP)漂移,结合IPsec提供加密隧道,可以显著提升网络的可靠性和安全性。
架构设计
组件说明
- Keepalived:基于VRRP协议,提供VIP管理和健康检查功能。当主节点故障时,备用节点自动接管VIP,确保服务不中断。
- IPsec:提供数据加密和认证,支持IKEv1/IKEv2协议,适用于站点到站点或远程访问场景。
- 集群节点:至少两台服务器,分别配置为主(MASTER)和备(BACKUP)角色。
网络拓扑
[Internet] <--> [VIP: 203.0.113.10] <--> [Node1 (MASTER): 10.0.0.1]
<--> [Node2 (BACKUP): 10.0.0.2]
VIP对外提供VPN服务,内部节点通过私有IP通信。Keepalived监控IPsec进程状态,一旦主节点故障,VIP自动漂移至备用节点。
部署步骤
1. 环境准备
- 操作系统:Ubuntu 22.04 LTS或CentOS 7+
- 安装必要软件包:
strongswan(IPsec实现)和keepalived - 确保节点间网络互通,并开放UDP 500、4500端口(IPsec)以及VRRP组播地址(224.0.0.18)
2. 配置IPsec
在 /etc/ipsec.conf 中配置连接参数,例如:
conn site-to-site
left=10.0.0.1
leftsubnet=192.168.1.0/24
right=203.0.113.20
rightsubnet=192.168.2.0/24
auto=start
注意:主备节点需使用相同的IPsec配置,但left地址应指向各自的实际IP。
3. 配置Keepalived
主节点 /etc/keepalived/keepalived.conf:
vrrp_script chk_ipsec {
script "/usr/bin/pgrep -x charon" # 检查strongSwan进程
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
203.0.113.10/24 dev eth0
}
track_script {
chk_ipsec
}
}
备用节点配置类似,仅将state改为BACKUP,priority设为90。
4. 启动服务
systemctl enable strongswan keepalived
systemctl start strongswan keepalived
验证VIP是否已绑定到主节点:ip addr show eth0。
故障切换测试
- 停止主节点IPsec服务:
systemctl stop strongswan - 观察Keepalived日志:
tail -f /var/log/syslog,应看到VIP漂移至备用节点。 - 从远端尝试连接VIP,验证VPN隧道是否正常建立。
优化建议
- 健康检查增强:除进程检查外,可添加更精细的脚本,例如测试IPsec隧道连通性。
- 会话同步:对于有状态VPN(如IPsec),建议使用连接同步机制(如strongSwan的
charon-cmd),避免切换时中断现有连接。 - 监控与告警:集成Prometheus或Nagios监控VIP状态和IPsec隧道数量。
总结
通过Keepalived与IPsec的组合,可以低成本实现高可用的VPN集群。该方案适用于中小型企业,能够有效应对单节点故障,保障远程访问的稳定性。