返回技术博客

SKNK 中文技术指南

BGP Session 已 Established,为什么路由还是不通?从 IRR Route Object 查起

BGP 会话已建立但前缀发布不出去?问题通常不在会话,而在上游的过滤白名单。本文给出从 IRR Route Object 开始的排查顺序、四个最常见错误和一页式检查清单。

最容易遇到的一种情况是:BGP Session 已经 Established,路由器也在发前缀,上游却回复一句“No route object found”。这类问题常见于上游过滤,但也可能出在本地 export、客户白名单或后续传播链路。下面按顺序排查。

本文按排障顺序展开:先看懂 Route Object 是什么,再按步骤检查为什么上游不收,最后给出上线检查清单。RPKI、ROA 等基础概念不重复展开,需要时直接链接已有文章。

一句话结论:IRR 是路由登记和过滤依据,不是路由器配置。对象存在 ≠ 路由在跑;对象缺失或错误,路由可能被上游直接过滤掉。

白脸小鹿拿着空白前缀卡,旁边的 BGP 设备已经用线缆连通,但前缀仍被独立的上游闸门拦住。

Session 已建立,只能说明控制连接起来了;前缀是否被接受,还要看过滤和传播。


看懂一个 Route Object

一个 Route Object 是一小段公开的路由登记记录,说明“这个前缀计划由哪个 ASN 起源”。最常见的五个字段:

字段 示例 含义
route 192.0.2.0/24 被登记的 IPv4 前缀
route6 2001:db8:1200::/48 被登记的 IPv6 前缀
origin AS64496 计划起源该前缀的 ASN
mnt-by EXAMPLE-MNT 可以修改这条记录的维护者
source RIPE 记录存放在哪个 IRR 数据库

以 IPv6 为例,一条简化记录长这样:

route6:     2001:db8:1200::/48
origin:     AS64496
mnt-by:     EXAMPLE-MNT
source:     RIPE

在 RIPE Database 中,前缀与 Origin ASN 共同构成对象的组合主键。换句话说:同一个前缀可以有多个不同 Origin 的对象(Anycast、迁移等场景),但每一组“前缀 + Origin”是独立记录。routeroute6 的作用完全相同,只是地址族不同——IPv4 用 route,IPv6 用 route6,两者互不替代。

想深入了解对象字段和 RPSL 语言,参见什么是 IRR Route Object?


为什么 IPv4 和 IPv6 要分别检查

没有自动转换:一个 IPv4 的 route 对象不会覆盖你的 IPv6 前缀,反之亦然。

同时发布双栈的网络,最常见的问题是只建了 IPv4 对象、忘了 route6。结果 IPv4 一切正常,IPv6 前缀在部分上游那里一直不可见,而 BGP 会话本身没有任何异常提示。

检查时不要只搜一次 ASN 就结束,应分别核对:

  • IPv4 前缀对应的 route
  • IPv6 前缀对应的 route6
  • 两者是否都在上游采信的 IRR 数据源里。

为什么“在 RIPE Database 查到了”仍然可能不够

很多人遇到的问题是:RIPE Database 里明明有对象,上游还是拒绝。原因通常有三个:

  1. 上游使用其他 IRR 数据源。 RADb、ARIN IRR、APNIC IRR 等都是独立数据库。你在 RIPE 看到的对象,不会自动出现在上游读取的那个源里。
  2. 上游要求精确前缀。 上游生成的过滤器通常只允许与你宣告完全一致的 Prefix。你宣告 /48,对象却登记成 /44,过滤器匹配不上。
  3. 上游有自己的客户白名单。 有些运营商在 IRR 之外还维护一份客户前缀清单,新前缀需要人工加入,不会因为你建了对象就自动放行。

所以排查时不能只问“对象存在吗”,还要问“存在在哪里、精确匹配吗、上游信这个源吗”。


IRR、ROA、BGP 分别处在哪一层

三条链路经常被写在同一张上线清单里,但它们是不同的系统:

IRR Route Object ROA 实时 BGP 路由
本质 公开登记的路由意图 加密签名的起源授权 路由器之间正在交换的宣告
谁创建 网络运营者 / 维护者 地址资源持有方(或其 LIR) 任何配置了 BGP 的路由器
输出 供过滤器使用的数据 Valid / Invalid / NotFound 被接受、被过滤或正在传播
能否证明可达 不能 不能 需要结合公网观测确认

关键结论:IRR 和 RPKI 不是同一个系统,也不会自动同步。 在 RIPE Database 创建对象不会生成 ROA,创建 ROA 也不会生成对象。更完整的对比与排障方法,见RPKI、IRR、ROA 到底有什么区别?


四个最常见错误

1. 把上游 ASN 填进 origin

origin 通常对应 AS_PATH 最右侧的起源 ASN,但最终要以实际宣告该前缀的网络为准。填错后过滤器会认为“这个 ASN 无权宣告该前缀”而拒绝。

2. IPv6 忘了创建 route6

只有 IPv4 对象,IPv6 宣告对依赖 IRR 的上游不可见。双栈网络必须分别建两个对象。

3. 查到了旧对象,没核对 last-modified

切换上游、改过 Origin、迁移过前缀之后,旧对象可能残留。last-modified 只能提示你需要复核,不能单凭日期判断对象已经失效。

4. 对象存在,但上游不采信该数据源

对象在 RIPE 里存在 ≠ 上游会读 RIPE。有些运营商只信 RADb 或自己的本地数据。先确认上游的过滤来源,再决定去哪里建对象。


实际检查顺序

路由发布不出去时,按下面的顺序逐层查,不要一上来就改路由器配置:

  1. 路由器是否真的 export? 先看本地 export policy 是否匹配你的前缀,很多问题在这一步就结束了。
  2. Route Object 是否精确存在? 用工具查 route / route6,确认 Prefix 与宣告完全一致。
  3. Origin ASN 是否一致? 对象里的 origin 与 BGP 宣告的 Origin 必须完全相同。
  4. 上游是否采信该 IRR? 确认对象在你上游实际读取的数据源里。
  5. 公网 BGP 是否可见? 用 Looking Glass 从多个区域查询,确认前缀真的被传播出去了。

可以用 IRR Route Object 查询工具RPKI 与 BGP 状态查询BGP 与 IRR 一致性审计 快速核对第 2–4 步。


谁能创建和修改对象:PI、PA、Sponsoring LIR

不是谁拿到 ASN 就有权为任意前缀建对象。能否创建 route / route6,取决于地址资源的管理关系:

  • PI 地址(自己持有):资源登记给 End User,但具体的 Route Object 和 ROA 管理方式,仍要看 Sponsoring LIR、维护者授权和协议边界。
  • PA 地址(上游或 LIR 提供):通常由地址持有方或其授权的维护者操作。
  • Sponsoring LIR 提供的 PA 前缀:由 LIR 按合同和实际 Origin 协助创建,客户一般不能直接在 RIPE Portal 里改。

这也是常被忽略的一点:你拥有 ASN,不代表你有权为赞助方提供的 PA 前缀创建 Route Object;同理,PA 前缀的 ROA 也通常由 LIR 管理,详见什么是 ROA?


一页式检查清单

上线前或排查时逐项打勾:

  • BGP Session 已 Established,本地 export policy 确认包含该前缀
  • IPv4 有精确的 route,IPv6 有精确的 route6
  • origin 与实际宣告的 Origin ASN 完全一致
  • 对象位于上游实际采信的 IRR 数据源
  • 前缀长度与宣告一致(没有用更宽或更短的记录代替)
  • 已确认谁有权创建/修改该对象(PI 自己、PA 的持有方或 LIR)
  • 若双栈,IPv4 和 IPv6 对象都存在
  • 多区域 Looking Glass 均能看到前缀、Origin 正确
  • 停用或迁移时,有明确的清理负责人

FAQ

有了 ROA,还需要 Route Object 吗?

取决于上游的过滤政策。ROA 解决起源授权,Route Object 解决登记与过滤,两者是独立系统。有的上游强制要求对象,有的根本不查。先确认上游用哪些检查,再对齐对应数据。

为什么 bgp.tools 上查得到我的前缀,上游还是说没有?

bgp.tools 反映的是公网观察到的路由,不代表你的每个上游都接受并转发。可能的原因包括:上游 IRR 过滤未通过、上游客户白名单未加入、或前缀长度被上游过滤。

为什么改完对象,路由还是不通?

对象更新后,上游要按自己的周期同步数据库并刷新过滤器(从几分钟到数天)。不要在上线窗口才开始改,也不要在几分钟内反复删除重建。

谁帮我创建 Route Object?

你自己持有的 PI 地址通常可以自己建;Sponsoring LIR 提供的 PA 前缀,需要找 LIR 或由其授权的维护者处理。先确认权限关系再操作。


小结

Session 已建立但前缀不通,问题不一定在会话本身。按“本地 export → IRR 对象 → Origin ASN → 上游采信的数据源 → 公网可见性”的顺序排查,多数情况能在前几步定位。IRR 只是登记与过滤的依据,不是路由器配置,也不是 RPKI 的替代品。

一句话记住

Route Object 存在不代表路由在跑;对象精确、位于上游采信的 IRR,才说明过滤这一关可能通过。

参考资料


继续阅读