路由可用的前提是下一跳可解析
BGP 路由要装入 RIB 与 FIB,必须先递归解析出下一跳的可达路径:BGP 只负责说「去哪个下一跳」,能不能到达由 IGP 决定。底层 IGP 没有覆盖下一跳时,路由会显示为不可用或不参与转发。eBGP 场景下一跳通常是互联地址,iBGP 场景默认保留从 eBGP 学到的外部下一跳——这正是 next-hop-self 与 IGP 覆盖成为同一件事两面的原因。
基本信息
| 机制 | BGP 下一跳依赖 IGP 路由做递归解析 |
|---|---|
| 失败表现 | show ip bgp 显示不可用或 rib-failure 标记 |
| 常见原因 | 对端未配 next-hop-self、互联地址未进 IGP、下一跳被过滤 |
| 修复方向 | 补齐 IGP 覆盖,或改用 next-hop-self 重新宣告 |
| 影响放大 | 解析链越长,IGP 抖动对 BGP 的影响越大 |
| 核对命令 | show ip bgp <前缀>、show ip route <下一跳地址> |
典型使用场景
- iBGP 场景:内部设备学到路由但下一跳不可达
- 双边界出口:从同一 AS 的多个边界学到路由时设计下一跳传递
- 排查「路由时有时无」:解析依赖的 IGP 路由在抖动
- 与静态路由配合:关键邻居用静态路由直达下一跳,降低递归依赖
- 策略变更评审:修改下一跳相关策略前评估对整个域的影响
核查命令
核查命令
show ip bgp 10.1.0.0/16 # 看下一跳与可用性标记
show ip bgp 10.1.0.0/16 | include not|invalid|resolved # 关注解析状态
show ip route 10.0.0.2 # 确认下一跳在 IGP 中可达
show ip cef 10.1.0.0/16 # 确认转发面是否已装载下一跳不可用的常见原因
| 原因 | 现象 | 核对方式 |
|---|---|---|
| 互联地址未进 IGP | 路由不可用或 rib-failure | show ip route 查下一跳 |
| 对端未配 next-hop-self | 内部设备下一跳指向外部地址 | 确认下一跳是否在本域可达范围内 |
| 下一跳被过滤或汇总 | 路由在表但解析失败 | 核对 IGP 过滤与汇总策略 |
| 递归路径抖动 | 路由时有时无 | 关联观察 IGP 收敛与 BGP 变化 |
| 转发面未装载 | 控制面正常但转发异常 | 用 CEF 等转发面命令核对 |
常见误区是只在 BGP 侧找原因:下一跳不可用本质上是「IGP 没有覆盖到」,排查必须落到路由表与 IGP 上,BGP 命令只能告诉你结果。
递归层次越深,IGP 的每次抖动都可能引发 BGP 前缀重新计算;关键邻居可以用静态路由直达下一跳,减少递归层次,用可维护性换稳定性。