Keepalived 默认使用 VRRPv2,启用 VRRPv3 需移除 vrrp_strict 和 authentication 块,并确认版本 ≥1.3.0;抓包验证版本字段为 3 即生效。

确认 Keepalived 版本支持 VRRPv3
Keepalived v1.3.0+ 原生支持 VRRPv3。运行以下命令验证:
keepalived -v
输出中应包含 vrrp v3 或类似字样(如 Build options: ... VRRPv3)。低于 v1.2.24 的版本不建议启用 v3。
删除或注释掉 VRRPv2 强制参数
VRRPv3 不兼容 `vrrp_strict` 和 `auth_type/auth_pass`(v2 的简单密码认证在 v3 中已被废弃)。若配置中存在这些,Keepalived 会自动降级回 v2 模式:
- 务必注释或删除
vrrp_strict(它强制检查通告源地址、TTL 等,与 v3 不兼容) - 彻底移除
authentication { ... }块 —— VRRPv3 仅依赖 IP 层完整性(如 IPv4 的校验和、IPv6 的扩展头校验),不再支持应用层密码
显式指定 VRRPv3 所需的基础参数
在 vrrp_instance 块中,确保使用 v3 兼容的写法:
-
virtual_router_id仍为 1–255 整数,保持不变 -
advert_int可设为小数(如0.5),v3 支持亚秒级通告间隔,提升检测灵敏度 - 若使用 IPv6 VIP,写法为
2001:db8::100/64 dev eth0,v3 原生支持;v2 仅支持 IPv4 - 多播地址默认为
224.0.0.18(IPv4)或ff02::12(IPv6),无需修改
验证是否真正运行在 VRRPv3 模式
启动后执行:
sudo tcpdump -i eth0 -n 'ip proto 112 or ip6 proto 112' -c 4
观察抓包中的 VRRP 报文版本字段(IP 协议号 112 的报文头第 1 字节):值为 3 即表示 VRRPv3 已生效。也可查看日志:
sudo journalctl -u keepalived -n 20 | grep -i "vrrp.*version"
正常输出应含 VRRPv3 字样,而非 VRRPv2。
不复杂但容易忽略

















