keepalived 不支持 virtual_routes 配置项,正确关键字是 static_routes,需置于 vrrp_instance 块内,master 状态时自动添加、backup 时自动删除路由,via 后必须为本机可达的真实网关 ip,不可为 vip。

Keepalived 本身 不提供 virtual_routes 配置项,你提到的 virtual_routes 并非 Keepalived 官方配置语法(截至 2026 年最新稳定版 v2.2.x)。标准 Keepalived 配置中与路由相关的合法关键字是:
-
static_ipaddress(静态地址,用于配置真实 IP) -
static_routes(静态路由,用于添加/删除内核路由表项) -
virtual_ipaddress(VIP,即漂移的虚拟 IP,这才是高可用的核心)
⚠️ 注意:virtual_routes 是常见误写或混淆项,实际应为 static_routes —— 它可在 VIP 切换时同步增删路由条目,从而实现“双机切换后默认路由自动更新”的效果。
下面直接说明如何用 static_routes 达成你的目标:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
✅ 目标场景还原
两台服务器 A 和 B 组成热备对,共用 VIP 172.16.1.129/24。
当 A 是 MASTER 时,希望客户端流量经 A 转发到后端网络(如 10.10.0.0/16),并让 A 成为该网段的默认下一跳;
当 B 接管 VIP 后,需自动把这条路由也迁移到 B,确保下游设备无需改网关即可持续通信。
✅ 正确做法:在 vrrp_instance 中嵌入 static_routes
Keepalived 支持在 vrrp_instance 块内使用 static_routes(注意不是 virtual_routes),它会在状态变为 MASTER 时自动添加路由,BACKUP 时自动删除。
示例:主机 A(MASTER)配置节选
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.1.129/24 dev eth0
}
static_routes {
10.10.0.0/16 via 172.16.1.1 dev eth0 # ← 主机A的物理网关IP(非VIP)
default via 172.16.1.1 dev eth0 # ← 切换后生效的默认路由
}
}
示例:主机 B(BACKUP)配置节选
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 66
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.1.129/24 dev eth0
}
static_routes {
10.10.0.0/16 via 172.16.1.1 dev eth0 # ← 主机B的物理网关IP(需对应B的真实网关)
default via 172.16.1.1 dev eth0
}
}
? 关键点:
static_routes必须写在vrrp_instance内部,不能放在global_defs或顶层;- 路由条目仅在本节点成为
MASTER时生效,BACKUP状态下自动清理;via后面必须是本机可达的真实网关 IP(例如交换机、防火墙接口地址),不能是 VIP;- 若需设置默认路由(
default),确保上游设备(如核心交换机)已启用代理 ARP 或 ICMP 重定向,否则可能不可达。
✅ 补充:确保路由生效的前提条件
- 系统内核需开启转发(尤其做网关时):
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf sysctl -p
- 确保
iproute2工具可用(static_routes底层调用ip route add/del); - 检查路由是否成功加载:
ip route show | grep "via"
❌ 常见误区提醒
- 不要用
virtual_routes(不存在,配置会报错或被忽略); - 不要试图在
virtual_ipaddress下配路由(它只管 IP 地址绑定); - 不要将
default via指向 VIP(172.16.1.129)——那只是服务入口,不是网关出口; -
static_routes不支持通配符或动态变量,所有地址必须写死或通过外部脚本生成。
这样配置后,当主节点宕机,备节点升为 MASTER 的瞬间,不仅 VIP 自动绑定,关联的静态路由也会同步注入内核路由表,下游设备继续以原 VIP 为网关通信,实际流量路径已悄然切换到新主机。










