第95篇:BGP 软复位与路由刷新
关键词
BGP、软复位、Soft Reset、Route-Refresh、路由刷新、策略更新
一、问题的由来
当修改了 BGP 路由策略后,需要让策略生效。传统的做法是重置 BGP 连接:
reset bgp 100 # 重置所有 BGP 连接
reset bgp 10.0.12.2 # 重置指定邻居的连接
重置的影响: - BGP 连接中断 - 所有 BGP 路由重新学习 - 业务短暂中断(几秒到几十秒)
软复位(Soft Reset)和路由刷新(Route-Refresh)就是为了避免中断而设计的。
二、Route-Refresh 能力协商
2.1 能力协商
Route-Refresh 是 BGP 能力协商的一部分,在 Open 报文中进行:
Open 报文中的 Capabilities:
Route Refresh: Supported ✅
查看能力:
display bgp peer 10.0.12.2 verbose
Negotiated capabilities:
Route Refresh: ✅ ← 支持软复位
2.2 触发热刷新
# 触发从指定邻居重新接收路由(不中断 BGP 连接)
refresh bgp 10.0.12.2 import # 重新从该邻居接收 BGP 路由
# 触发向指定邻居重新发送路由
refresh bgp 10.0.12.2 export # 重新向该邻居发送 BGP 路由
三、软复位的工作原理
3.1 入方向软复位
修改入方向 Route-Policy 后:
用户执行:
refresh bgp 10.0.12.2 import
Router 发送 Route-Refresh 报文到邻居:
RouterA ── Route-Refresh ──→ RouterB
RouterB 收到后,重新发送所有 Update:
RouterA ←── Update (所有路由) ── RouterB
RouterA 使用新的入方向策略重新匹配:
✅ 策略更新生效,BGP 连接未中断
3.2 出方向软复位
修改出方向 Route-Policy 后:
用户执行:
refresh bgp 10.0.12.2 export
Router 使用新策略重新发送路由:
RouterA ── Update (新策略的更新) ──→ RouterB
✅ 策略更新生效
四、华为设备的软复位实现
4.1 配置前提
Route-Refresh 需要邻居双方都支持。
# 查看是否支持
display bgp peer 10.0.12.2 verbose
4.2 如果对方不支持 Route-Refresh
如果邻居不支持 Route-Refresh,华为设备可以通过保留接收到的原始路由来实现软复位:
bgp 100
peer 10.0.12.2 keep-all-routes # 保留该邻居的所有原始路由
配置后:
# 更新策略后
refresh bgp 10.0.12.2 import # 基于保留的路由重新匹配策略
4.3 完整流程
# 步骤 1:使能保留所有路由
bgp 100
peer 10.0.12.2 keep-all-routes
# 步骤 2:查看保留的路由
display bgp routing-table 10.0.12.2 received-routes
# 步骤 3:修改策略
route-policy NEW_POLICY permit node 10
if-match ip-prefix NEW_PREFIX
bgp 100
peer 10.0.12.2 route-policy NEW_POLICY import
# 步骤 4:触发热刷新(不中断连接)
refresh bgp 10.0.12.2 import
五、硬重置 vs 软复位
| 对比项 | 硬重置(reset) | 软复位(refresh) |
|---|---|---|
| BGP 连接 | 断开重连 | 保持连接 |
| 业务中断 | ✅ 有 | ❌ 无 |
| 路由收敛 | 重新学习所有路由 | 只应用新策略 |
| 变更风险 | 高 | 低 |
| 建议 | 生产环境避免使用 | 变更时推荐使用 |
六、案例:BGP 策略变更不影响业务
6.1 场景
AS 100 修改了入方向策略:
原本:接受所有来自 AS 200 的路由
改后:只接受 172.16.0.0/16 的路由
业务不能中断。
6.2 实施步骤
# Step 1:先编写新策略
route-policy FILTER_200 permit node 10
if-match ip-prefix ONLY_172_16
ip ip-prefix ONLY_172_16 permit 172.16.0.0 16
# Step 2:应用到邻居
bgp 100
peer 10.0.12.2 route-policy FILTER_200 import
# Step 3:触发软复位(不中断!)
refresh bgp 10.0.12.2 import
# Step 4:验证
display bgp routing-table peer 10.0.12.2 received-routes
# 只看到 172.16.0.0/16 ← 新策略生效
七、其他相关命令
# 清除被抑制的路由
reset bgp 10.0.12.2 flap-info # 清除路由抖动信息
# 查看收到的所有路由(包括未经过策略的原始路由)
display bgp routing-table peer 10.0.12.2 received-routes
# 查看发给邻居的所有路由
display bgp routing-table peer 10.0.12.2 advertised-routes
# 查看 BGP 统计信息
display bgp statistics
八、总结
| 命令 | 作用 | 是否中断业务 |
|---|---|---|
reset bgp x.x.x.x |
重置 BGP 连接 | ✅ 中断 |
refresh bgp x.x.x.x import |
入方向软复位 | ❌ 不中断 |
refresh bgp x.x.x.x export |
出方向软复位 | ❌ 不中断 |
keep-all-routes |
保留原始路由 | - |
最佳实践:
- 变更策略时优先使用 refresh
- 对于不支持 Route-Refresh 的邻居,配置 keep-all-routes
- 只在必要时(如 Bug 修复)才使用 reset bgp
九、思考
reset bgp和refresh bgp有什么区别?哪个会影响业务?- Route-Refresh 能力是如何在 BGP 对等体之间协商的?
- 如果邻居不支持 Route-Refresh,如何实现不中断的策略更新?
- 入方向软复位和出方向软复位分别触发什么动作?
keep-all-routes命令的作用是什么?它有什么资源开销?
下篇预告:第96篇《BGP 前缀限制与安全防护》——保护 BGP 路由器免受路由泛洪攻击。