条件宣告是什么
条件宣告(Conditional Advertisement)让「发不发某段前缀」取决于另一个监测前缀是否存在:监测前缀还在,就不发;监测前缀消失,才把 advertise-map 里的前缀发出去。它把「主路径失效」这个事件直接变成发布条件,常用于单活备份出口与按需宣告,减少对端长期接收无效通告。
基本信息
| 语法(Cisco) | neighbor <ip> advertise-map <AM> {exist-map|non-exist-map} <NAME> |
|---|---|
| exist-map | 监测前缀存在时发布 advertise-map 中的前缀 |
| non-exist-map | 监测前缀消失时发布 advertise-map 中的前缀 |
| 两个 map 的分工 | advertise-map 定义发布什么,exist/non-exist-map 定义何时发布 |
| 适用平台 | Cisco IOS/IOS-XE;华为 VRP 等平台用路由策略配合条件实现,写法不同 |
典型使用场景
- 主备双出口:主链路路由在时对备份邻居保持静默,主路由消失才向备份邻居宣告
- 防止对端提前选到备份路径:备份出口只在必要时才出现在对端路由表里
- 地址段搬迁过渡:新段可用时宣告新段,旧段撤下
- 按需宣告减少无效通告:对端不需要长期持有备选前缀时可降低前缀规模
- 演练与验证:手工撤销监测前缀,观察发布动作与回收动作是否都符合预期
配置示例与验证
配置示例与验证
# 监测前缀:主路径所在网段
ip prefix-list PL-MON permit 10.1.0.0/16
route-map RM-MON permit 10
match ip address prefix-list PL-MON
# 待发布前缀:备份路径要宣告的网段
ip prefix-list PL-ADV permit 10.2.0.0/16
route-map RM-ADV permit 10
match ip address prefix-list PL-ADV
router bgp 65001
neighbor 10.0.0.6 remote-as 65003
neighbor 10.0.0.6 advertise-map RM-ADV non-exist-map RM-MON
# 验证:比较撤销监测前缀前后的发布内容
show ip bgp neighbors 10.0.0.6 advertised-routes验证记录表
| 状态 | 预期现象 | 核对方式 |
|---|---|---|
| 监测前缀存在 | 备份前缀不出现在发布列表 | advertised-routes 中查不到 PL-ADV 网段 |
| 监测前缀消失 | 备份前缀出现在发布列表 | 再次查看 advertised-routes,条目与标签正确 |
| 监测前缀恢复 | 备份前缀应被撤回 | 对端路由表确认撤销,本端发布列表同步 |
| 评估延迟 | 条件成立到发布生效有时间差 | 记录两端的观测时间点,纳入收敛评估 |
上线前一定要做触发演练:手工撤销监测前缀,观察发布与撤回两个方向,并记录从条件变化到对端可见的延迟,否则真实故障时无法判断它在正常工作。