下一跳在 BGP 里怎么被改写
NEXT_HOP 是必遵属性,决定接收方如何转发这批流量。eBGP 发送路由时,默认把下一跳改写为本地出接口地址;iBGP 则默认保留原始下一跳不变。这个差异导致典型的双出口组网问题:出口路由器的下一跳指向外部设备,iBGP 邻居无法解析,必须用 next-hop-self 把下一跳改成自己。
基本信息
| eBGP 默认 | 改写为本地出接口地址(对端可直接解析) |
|---|---|
| iBGP 默认 | 保留原始下一跳,需要本 AS 内部可达 |
| 第三方下一跳 | 发送方与原始下一跳位于同一网段时保持不改写 |
| 常用命令 | neighbor x next-hop-self;route-map 中 set ip next-hop |
| 下一跳跟踪 | 部分平台支持 BGP 下一跳跟踪,不可达时抑制该路由 |
典型使用场景
- 双出口组网:出口设备对 iBGP 邻居设置 next-hop-self,避免内部设备无法解析
- RR 场景:RR 反射路由时保持下一跳不变,需确认客户端到下一跳的可达性
- 多跳 eBGP:两端用环回建立邻居,需核对下一跳可达性与 update-source 配置
- 共享媒体环境:理解第三方下一跳条件,避免误判对端行为
- 路由存在但不转发:检查下一跳是否可解析,这是仅次于入策略的常见原因
配置与查看
配置与查看
router bgp 65001
neighbor 10.0.0.2 remote-as 65002
neighbor 172.16.1.2 remote-as 65001
neighbor 172.16.1.2 next-hop-self
!
# 查看前缀的下一跳
show ip bgp 10.100.0.0/16
# 关注 Next Hop 列
# 检查该下一跳是否真的可解析
show ip route 10.0.0.2
show ip route 172.16.1.2场景与下一跳行为
| 场景 | 默认下一跳 | 处理方式 |
|---|---|---|
| 直连 eBGP | 本端出接口地址 | 一般无需额外配置 |
| 多跳 eBGP(环回建邻) | 本端出接口地址或环回 | 确认对端到该地址有回程路由 |
| iBGP 传递外部路由 | 保留外部下一跳 | 出口设备对邻居配置 next-hop-self |
| 共享媒体第三方下一跳 | 保持原始下一跳不变 | 确认对端与下一跳在同一网段 |
下一跳不可达的排查
下一跳不可达的排查
# 1) 看前缀的下一跳属性
show ip bgp 10.100.0.0/16
# 2) 查该下一跳是否有路由
show ip route 10.0.0.2
# 3) 查 CEF 是否安装了转发项
show ip cef 10.100.0.0
# 4) 若未安装,确认 BGP 是否因下一跳不可达而抑制路由
show ip bgp 10.100.0.0/16 | include Not「BGP 表里有路由、转发表里没有」几乎都可以归结为下一跳不可达或递归解析失败。排查顺序建议固定为:先看属性中的下一跳,再查该地址的路由,最后看转发表项。