本地 BGP 表里有前缀,对端却没收到——这是「BGP 宣告不生效」最典型的表现。下面按从易到难的七个方向逐层剥离。
一、先确认对方到底收没收到前缀
排障第一步不是改配置,而是把「本地优选 → 本地已发送 → 对端已接收 → 对端已优选」这四个环节切开,定位断点在哪一段。很多所谓「宣告不生效」,其实前缀已经在对端 BGP 表里,只是没被优选或没进转发表。
show ip bgp 45.123.45.0/24 show ip bgp neighbors 203.0.113.1 advertised-routes show ip bgp neighbors 203.0.113.1 received-routes show ip bgp summary | include 203.0.113.1
advertised-routes 显示的是经过出方向策略后实际发出的前缀,如果这里面没有,问题在本地;如果有而对端 Looking Glass 上没有,问题在对端。注意 received-routes 必须先配 neighbor 203.0.113.1 soft-reconfiguration inbound,否则命令直接报错;不想开软重配就用 clear ip bgp 203.0.113.1 soft in 触发 route-refresh 再看 routes。
还要区分三种本地成因:
- network 命令不匹配:
network 45.123.45.0 mask 255.255.255.0要求路由表里存在掩码完全一致的路由,有一条 /24 明细但写成network 45.123.45.0(类自然掩码)就发不出去。 - aggregate-address 无明细:BGP 表里只有聚合前缀,没对应的明细路由,聚合不会被宣告。
- 出方向策略过滤:ACL、prefix-list、route-map 过滤掉了前缀,导致
advertised-routes里没显示该前缀。
具体排查步骤:
- 执行
show ip route 45.123.45.0,确认本地路由表是否存在对应路由,且掩码匹配。 - 检查 BGP 配置中
network和aggregate-address命令,确认是否包含该前缀或聚合。 - 执行
show ip bgp neighbors 203.0.113.1 advertised-routes,确认前缀是否真正发出。 - 若
advertised-routes有该前缀但对端无,联系对端确认或使用对端 Looking Glass 工具验证。
二、确认 BGP 会话状态和邻居能力
BGP 会话不稳定或邻居能力不匹配,都会导致前缀无法正常传递。常见问题有 TCP 会话断开、BGP 版本不兼容、邻居认证失败等。
show ip bgp summary show ip bgp neighbors 203.0.113.1
关键字段说明:
| 字段 | 说明 |
|---|---|
| State/PfxRcd | 显示邻居状态和已接收前缀数,若显示 Idle/Active,说明会话未建立;若为 Established,说明会话正常。 |
| Last reset | 显示上次会话重置时间,频繁重置可能是链路或配置问题。 |
| Capabilities | 确认是否启用 Route Refresh、4字节 ASN、Add-path 等功能,缺少关键能力可能导致路由不同步。 |
排查步骤:
- 确认 TCP 端口 179 通畅,可使用
telnet 203.0.113.1 179或ping测试链路。 - 查看 BGP 会话状态,确认是否处于 Established。
- 检查邻居配置,确认 ASN、密码、BGP 版本是否匹配。
- 确认双方是否都支持必要的能力,如 Route Refresh,避免必须重启 BGP 才能同步路由。
- 若频繁断开,查看系统日志
show logging | include BGP,定位原因。
三、检查路由策略和过滤规则
路由策略是 BGP 宣告的关键环节,错误配置或策略冲突会导致前缀被过滤或修改,影响对端接收。
常见策略包括 prefix-list、route-map、distribute-list、policy-map 等。需逐一确认入站和出站方向是否正确。
示例检查命令:
show run | section prefix-list show run | section route-map show ip bgp neighbors 203.0.113.1 route-map show ip prefix-list
具体排查步骤:
- 确认出站方向的策略是否允许该前缀通过,例如
route-map OUT permit 10是否匹配该前缀。 - 检查是否有 deny 规则误伤目标前缀。
- 使用
show ip bgp neighbors 203.0.113.1 advertised-routes对比策略前后路由。 - 若使用 prefix-list,确保前缀和掩码范围精确匹配,避免因掩码不符被拒。
- 针对复杂策略,使用
debug ip bgp updates(生产环境谨慎)观察路由更新的匹配过程。
四、确认本地路由表和 BGP 路由选择
BGP 宣告前提是本地路由表必须有对应路由,且 BGP 需要优选该路由。若本地路由不符合要求,BGP 不会宣告。
检查本地路由状态:
show ip route 45.123.45.0/24
确认路由来源(静态、直连、OSPF、EIGRP 等),以及是否存在更优路由覆盖该前缀。
查看 BGP 表中该前缀的路径:
show ip bgp 45.123.45.0/24
重点关注:
- 路径是否存在,是否被标记为 valid。
- AS_PATH 是否合理。
- 是否被 local-preference、weight 或 MED 影响,导致不被优选。
如果 BGP 表中没有该前缀,确认是否有路由重分发或同步策略遗漏。
示例命令:
show run | section redistribute show ip bgp summary
若使用 aggregate-address 聚合,确认是否配置了 summary-only 选项,防止明细路由被宣告。
五、验证对端 BGP 表和路由转发
确认对端收到前缀后,是否已优选并安装入转发表。对端不优选可能因本地路由冲突、策略过滤或路由环路检测。
常用对端验证方式:
- 使用对端 Looking Glass 查询 BGP 表和路由表。
- 请求对端执行
show ip bgp 45.123.45.0/24和show ip route 45.123.45.0/24。 - 确认对端是否有更优路径覆盖该前缀。
示例对端命令:
show ip bgp 45.123.45.0/24 show ip route 45.123.45.0/24
若对端未安装路由,需排查对端策略或本地发出的 BGP 属性是否合理,如 MED、local-preference。
六、检查 BGP 属性和路径选择
BGP 属性直接影响路径优选和宣告,错误设置可能导致前缀虽发出但不被对端优选。
重点属性:
| 属性 | 作用 | 排查重点 |
|---|---|---|
| AS_PATH | 路径长度,影响优选 | 确认无环路,路径合理 |
| LOCAL_PREF | 本地优先级,影响出口选择 | 确认对端设置合理,非零或默认值 |
| MED | 多出口间优选 | 确认是否被对端忽略或误用 |
| COMMUNITY | 策略标记 | 确认是否触发过滤或修改 |
排查步骤:
- 使用
show ip bgp 45.123.45.0/24查看本地属性。 - 确认路由策略中是否修改了上述属性。
- 对端是否有策略过滤特定社区或 MED。
- 必要时用
debug ip bgp updates跟踪属性变化。
七、排查软硬件和链路问题
若以上均正常,仍无法宣告,需排查软硬件故障或链路异常。
- 确认路由器 CPU、内存使用率正常,避免资源瓶颈。
- 检查接口状态和链路质量,使用
show interfaces和show controllers。 - 查看 BGP 相关日志,确认无异常重启或错误。
- 确认机房侧(如南方數據 IDC)是否有链路变更或过滤策略。
- 必要时升级路由器 IOS/Firmware,修复已知 BUG。
示例命令:
show processes cpu sorted show interfaces GigabitEthernet0/0 show logging | include BGP
常见问题
问:为什么本地有路由但 BGP 不宣告?
答:通常是 network 命令掩码不匹配,或者出方向策略过滤。确认本地路由掩码和 BGP 配置严格一致,且策略允许。
问:对端显示已接收路由,但无法转发?
答:可能对端路由策略过滤或本地路由冲突,导致未安装入转发表。建议检查对端路由优选和策略。
问:BGP 会话频繁断开如何排查?
答:查看链路稳定性、TCP 会话状态和邻居配置,关注日志中的错误信息,确认认证和版本匹配。