next-hop-self 的作用
IBGP 传递路由时默认不改写下一跳:从 EBGP 学到的路由仍带着外部下一跳地址传给内网设备。如果内网设备没有到那个外部地址的路由,路由虽在 BGP 表中却无法使用。next-hop-self 让边界设备对外发布时把下一跳改成自己,从根源上消除这个问题。
基本信息
| 问题 | EBGP 学到的路由下一跳是外部地址,IBGP 不再改写 |
|---|---|
| 后果 | 内网设备没有到外部下一跳的路由,路由存在但不可用 |
| 命令 | neighbor <ip> next-hop-self |
| 生效方向 | 对 IBGP 邻居的出向 |
| 替代思路 | 让内网设备本身能到达外部下一跳 |
| 验证 | show ip bgp <前缀> 查看下一跳字段 |
典型使用场景
- 边界设备与内网设备建立 IBGP,内网不掌握外部地址
- 双边界双出口:让内网按 IGP 度量选择出口,而不是跟着外部下一跳走
- 与环回口对等配合:下一跳统一指向稳定的环回地址
- 多厂商互联时统一下一跳处理方式,减少互通问题
- 排查「有路由但不通」时确认下一跳是否可达
配置与验证
配置与验证
router bgp 65001
neighbor 10.0.0.5 remote-as 65001
neighbor 10.0.0.5 update-source Loopback0
neighbor 10.0.0.5 next-hop-self # 对外发布时改写为自身地址
!
show ip bgp 10.1.1.0/24 # 查看下一跳字段是否为本机地址
show ip route 10.1.1.0/24 # 内核视角的下一跳与出接口
show ip bgp neighbors 10.0.0.5 advertised-routes | include 10.1改与不改的取舍
| 做法 | 优点 | 代价 |
|---|---|---|
| 配置 next-hop-self | 内网无需掌握外部地址,可用性稳定 | 下一跳不再反映真实出口,路径可视化变弱 |
| 保持默认下一跳 | 属性真实,便于流量工程与可视化 | 内网必须能到达外部下一跳,否则路由不可用 |
| 配合环回口对等 | 下一跳稳定,链路切换不影响可用性 | 需要 IGP 正确通告环回地址 |
判断路由是否真正可用,看的是下一跳可达性与主表装载结果,而不是 BGP 表里有没有这条前缀。
对所有邻居一刀切配置会削弱路径可视化能力:建议按邻居类型区分,边界设备对内部邻居启用即可。