第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


九、思考

  1. reset bgprefresh bgp 有什么区别?哪个会影响业务?
  2. Route-Refresh 能力是如何在 BGP 对等体之间协商的?
  3. 如果邻居不支持 Route-Refresh,如何实现不中断的策略更新?
  4. 入方向软复位和出方向软复位分别触发什么动作?
  5. keep-all-routes 命令的作用是什么?它有什么资源开销?

下篇预告:第96篇《BGP 前缀限制与安全防护》——保护 BGP 路由器免受路由泛洪攻击。