BGP已Established但收发前缀为0:地址族与策略排查指南
先不要重启会话。保存邻居摘要、协商能力和每个地址族的接收/发送计数,确认两端都激活了同一 AFI/SAFI。然后在发送端确认目标前缀已进入 BGP Loc-RIB,检查 network/
本文目录(22 节)
直接答案
先不要重启会话。保存邻居摘要、协商能力和每个地址族的接收/发送计数,确认两端都激活了同一 AFI/SAFI。然后在发送端确认目标前缀已进入 BGP Loc-RIB,检查 network/
一、固定邻居、VRF和地址族
记录本地/Remote AS、邻居地址、VRF、AFI/SAFI 和预期前缀。默认 VRF 中的 IPv4 会话不能证明业务 VRF 的 VPNv4 或 IPv6 Unicast 正常。
二、Established是会话状态,不是路由证明
RFC 4271 定义的 Established 状态表明 BGP 可以交换 UPDATE。没有可通告 NLRI 时,会话仍可持续发送 Keepalive,所以 uptime 很长也不是前缀存在的证据。
三、确认两端协商了同一AFI/SAFI
MP-BGP 通过 Multiprotocol Capability 表示支持的 AFI/SAFI。一端只激活 IPv4 Unicast,另一端只查 IPv6 Unicast,会得到“已建立但 0 前缀”。要查实际协商能力,不只看配置文本。
四、检查邻居是否在地址族下激活
有些实现需要在 address-family 下显式 activate,有些存在 IPv4 Unicast 默认激活。不要把某个版本的默认值套用到所有设备;以 running configuration 和邻居的 negotiated AFI/SAFI 为准。
五、先证明发送端Loc-RIB里有路由
用精确前缀查 BGP table,区分“主 RIB 有”与“BGP Loc-RIB 有”。静态或 connected 路由存在,不会自动变成 BGP NLRI,除非 network、redistribute 或 aggregate 配置的条件成立。
六、network通告要求精确匹配
常见实现要求主 RIB 中存在与 network 语句相同的 prefix length。只有 10.0.0.0/8 时,配置 10.1.0.0/16 不会凭空生成更具体路由。同时检查 route-map 是否拒绝了起源。
七、redistribute与aggregate也有前置条件
redistribute 的源协议、VRF 和 route-map 必须匹配;aggregate 通常需要至少一条可用的更具体 BGP 路由。检查源路由消失、tag/community 条件与 suppress-map。
八、RFC 8212可能让eBGP默认不收也不发
RFC 8212 要求 External BGP 在没有明确入口或出口策略时不接收或不通告路由。支持该行为的软件可保持会话 Established,同时显示策略缺失或前缀为 0。不要用全放行长期规避,应配置精确 prefix-
九、检查出口策略是否真正permit
prefix-list 的 ge/le、route-map 序号、未命中时的默认 deny,都可能把全部前缀滤掉。记录命中计数,用一个预期前缀逐条演算,不要仅凭策略名称判断。
十、区分Adj-RIB-Out与对端收到的路由
发送端的 Loc-RIB 有路由但 Adj-RIB-Out 为空,问题在本地出口选择或策略。Adj-RIB-Out 有而对端 received 为 0,再查地址族、软刷方式、会话方向和对端入口计数。命令语义因平台而异,要确认查到的是政策前还是政策后视图。
十一、入口策略会让received与accepted不同
邻居可能已发送 UPDATE,但本地 inbound prefix-list、AS-path filter、community-list、maximum-prefix 或 RPKI 策略拒绝了它。分开查“收到”、“接受”和“最优”数量。
十二、不要把未入主RIB误判为未收到
路由可以已在 BGP table,却因 next-hop 不可达、更优 BGP path、更低管理距离或 RIB failure 没有进入主 RIB。这时前缀数不是 0 问题,应转入 best-path、next-hop 和 RIB/FIB 排查。
十三、策略修改后执行定向刷新
如果对端支持 Route Refresh,优先对正确 AFI/SAFI 做 inbound 或 outbound soft refresh。不分对象的 hard clear 会中断会话并混淆现场证据,也可能同时影响多个地址族。
刷新前先记录政策命中计数和邻居前缀计数,刷新后以同一查询复查。如果只有对端重发才生效,说明问题可能是本地入口政策未重算;如果本地 outbound soft refresh 后对端计数上升,则应继续核对出口政策的应用时机。
十四、双端证据表
| 层级 | 发送端证据 | 接收端证据 |
|---|---|---|
| 会话 | Established、uptime、OPEN 能力 | 相同邻居和 AFI/SAFI |
| 起源 | BGP Loc-RIB 存在精确前缀 | 不适用 |
| 导出 | outbound policy 命中、Adj-RIB-Out | UPDATE/received 计数 |
| 导入 | 不适用 | inbound policy 命中、accepted 计数 |
| 选路 | best/valid 标记 | best-path、next-hop、RIB/FIB |
十五、一个可复现的最小验收流程
- 选定一个测试前缀,记录双端当前状态和计数。
- 证明发送端 Loc-RIB 存在该前缀且属性正确。
- 证明双方协商了目标 AFI/SAFI。
- 证明出口策略允许并出现于政策后 Adj-RIB-Out。
- 证明对端收到、接受并选中该前缀。
- 保存修改 diff、soft refresh 时间和前后计数。
十六、用时间线区分配置问题与路由波动
将首次出现 0 前缀的时间,与配置提交、软件升级、对端维护、路由起源消失和 maximum-prefix 事件对齐。若会话从未下线但计数在某次政策提交后归零,优先对比政策 diff;若双端同时归零,再查起源路由和上游变更。
十七、变更和回退要保留最小范围
修复时只对一个邻居、一个 AFI/SAFI 和一个测试前缀放开必要规则,验证后再扩展到经审核的 prefix set。回退条件应包括意外前缀数突增、非预期默认路由、路由泄漏和邻居重置。比“让数字不再是 0”更重要的,是证明收发的每个前缀都在授权范围内。
常见错误
- 看到 Established 就认为地址族和路由都正常。
- 只查主 RIB,不查 BGP Loc-RIB 和 Adj-RIB。
- 忽略 RFC 8212 的 eBGP 显式政策要求。
- 临时配置全放行后忘记收紧范围。
- 策略修改后没有刷新,或盲目 hard clear 破坏现场。
FAQ
1. Established但PfxRcd为0一定是对端没发吗?
不一定。可能未激活该 AFI/SAFI,对端无可通告路由,出口策略拒绝,或本地入口策略拒绝。要对照双端 Adj-RIB 和策略命中。
2. 为什么升级路由软件后突然变成0前缀?
新版本可能启用了 RFC 8212 相关默认行为,或改变地址族默认激活方式。对照版本变更说明与当前 running configuration,补充明确导入/导出策略。
3. 可以直接重置BGP会话吗?
不建议作为第一步。先保存能力、AFI/SAFI、路由和策略计数。支持 Route Refresh 时优先定向 soft refresh,减少中断和证据丢失。
4. received-routes、routes和advertised-routes有什么区别?
它们通常分别对应收到的候选路由、策略处理后可用/接受路由和向邻居导出的路由,但具体命令是策略前还是政策后因实现而异,必须查当前平台文档。
5. iBGP也受RFC 8212影响吗?
RFC 8212 的核心要求面向 External BGP。iBGP 为 0 时仍应检查 AFI/SAFI、起源、route-reflector、next-hop 和显式策略,但不应把 eBGP 默认拒绝机制生搬硬套。
总结
排查 BGP Established 但 0 前缀的关键,是不把会话层成功当成路由层成功。固定邻居、VRF 和 AFI/SAFI,再从 Loc-RIB、起源、出口策略、Adj-RIB-Out、对端入口策略到 RIB/FIB 逐层证明。如果是 RFC 8212 政策门禁,应补充最小精确的导入导出规则,而不是长期全放行。
来源资料
- RFC 4271: A Border Gateway Protocol 4 (BGP-4)
- RFC 4760: Multiprotocol Extensions for BGP-4
- RFC 8212: Default External BGP Route Propagation Behavior without Policies
- FRRouting BGP documentation
> 推荐/广告:如果需要计算、网络或站点托管资源,可了解 边界云。该链接为统一推荐位,不构成本文技术结论的来源。