Keepalived 不监控防火墙进程,而是通过脚本探测其出口转发能力(如 ping 下游节点),根据结果控制 VIP 漂移实现双防火墙出口高可用;需放行 VRRP 组播及健康检查所需协议。

Keepalived 本身不直接监控“防火墙状态”,它监控的是网络连通性、服务端口或自定义脚本的执行结果。所谓“监控后端防火墙状态”实现出口高可用,实际是指:在多出口(如双防火墙/双网关)场景下,用 Keepalived 判断某台防火墙是否可达、是否能正常转发流量,从而控制虚拟 IP(VIP)漂移到健康出口,确保业务流量始终走有效路径。
明确监控目标:不是防火墙进程,而是出口能力
防火墙通常作为网络边界设备,本身不提供标准服务端口。因此不能简单用 tcp_check 去连它的管理端口(如 443/80),而应验证其“转发能力”。常用方式包括:
- 向该防火墙下游的真实服务(如内网 DNS、HTTP 接口、或一个专用探测主机)发起探测,确认路径通达
- 使用
ping或fping检测防火墙的内网接口 IP(需确保 ICMP 不被策略阻断) - 调用
curl或nc测试其 NAT 后暴露的关键出口服务(如代理端口、SNMP 状态接口等)
配置健康检查脚本(推荐方式)
在 /etc/keepalived/check_fw.sh 中写一个可执行脚本,返回 0 表示防火墙“可用”,非 0 表示“故障”:
#!/bin/bash
# 探测下游可信节点 rs1(172.25.254.10),超时3秒,仅发1个包
if fping -c1 -t3000 172.25.254.10 &>/dev/null; then
exit 0
else
exit 1
fi赋予执行权限:chmod +x /etc/keepalived/check_fw.sh
然后在 keepalived.conf 的 vrrp_instance 段中引用:
vrrp_script chk_fw1 {
script "/etc/keepalived/check_fw.sh"
interval 2
weight -5
fall 2
rise 2
}再将该脚本绑定到实例:
track_script {
chk_fw1
}配合 VRRP 实现出口 VIP 漂移
假设两台防火墙分别部署在 KA1(172.25.254.50,MASTER)和 KA2(172.25.254.60,BACKUP),共用 VIP 172.25.254.100 作为默认网关出口:
- KA1 上脚本探测成功 → 保持 MASTER,VIP 留在 KA1
- KA1 脚本连续失败 2 次 → 权重下降触发切换 → KA2 升为 MASTER,VIP 漂移到 KA2
- KA1 恢复后,若配置
nopreempt,则不抢回;否则按优先级自动回切
注意防火墙自身规则对 Keepalived 的影响
Keepalived 依赖 VRRP 组播(224.0.0.18)和健康检查通信。若防火墙本身运行在 Linux 上(即它也是 Keepalived 节点),必须放行以下流量:
- VRRP 协议(IP 协议号 112)或目标组播地址
224.0.0.18 - 健康检查所用端口(如脚本中调用的
fping需要 ICMP;curl需要对应 TCP 端口) - 避免使用
-j DROP静默丢弃——建议用-j REJECT --reject-with icmp-host-unreachable,便于快速感知故障

















