SKNK 中文技术指南
BGP Session 已 Established,为什么路由还是不通?从 IRR Route Object 查起
BGP 会话已建立但前缀发布不出去?问题通常不在会话,而在上游的过滤白名单。本文给出从 IRR Route Object 开始的排查顺序、四个最常见错误和一页式检查清单。
最容易遇到的一种情况是:BGP Session 已经 Established,路由器也在发前缀,上游却回复一句“No route object found”。这类问题常见于上游过滤,但也可能出在本地 export、客户白名单或后续传播链路。下面按顺序排查。
本文按排障顺序展开:先看懂 Route Object 是什么,再按步骤检查为什么上游不收,最后给出上线检查清单。RPKI、ROA 等基础概念不重复展开,需要时直接链接已有文章。
一句话结论:IRR 是路由登记和过滤依据,不是路由器配置。对象存在 ≠ 路由在跑;对象缺失或错误,路由可能被上游直接过滤掉。

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”是独立记录。route 和 route6 的作用完全相同,只是地址族不同——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 里明明有对象,上游还是拒绝。原因通常有三个:
- 上游使用其他 IRR 数据源。 RADb、ARIN IRR、APNIC IRR 等都是独立数据库。你在 RIPE 看到的对象,不会自动出现在上游读取的那个源里。
- 上游要求精确前缀。 上游生成的过滤器通常只允许与你宣告完全一致的 Prefix。你宣告
/48,对象却登记成/44,过滤器匹配不上。 - 上游有自己的客户白名单。 有些运营商在 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 或自己的本地数据。先确认上游的过滤来源,再决定去哪里建对象。
实际检查顺序
路由发布不出去时,按下面的顺序逐层查,不要一上来就改路由器配置:
- 路由器是否真的 export? 先看本地 export policy 是否匹配你的前缀,很多问题在这一步就结束了。
- Route Object 是否精确存在? 用工具查
route/route6,确认 Prefix 与宣告完全一致。 - Origin ASN 是否一致? 对象里的
origin与 BGP 宣告的 Origin 必须完全相同。 - 上游是否采信该 IRR? 确认对象在你上游实际读取的数据源里。
- 公网 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,才说明过滤这一关可能通过。
参考资料
- RIPE Database:route6 对象与完整文档
- RIPE NCC:Requirements for the RIPE Database(RIPE-767)
- RIPE NCC:BGP Origin Validation
- RFC 7454:BGP Operations and Security
继续阅读
- 什么是 IRR Route Object?route、route6、RPKI 和 ROA 怎么配合 —— 对象字段与 RPSL 的完整说明
- RPKI、IRR、ROA 到底有什么区别? —— 路由被拒绝时,先查哪一层
- 什么是 ROA?Prefix、Origin ASN 和 maxLength 怎么填 —— RPKI 侧的对象怎么写
- 如何通过 BGP 宣告 IPv6 /48?ROA、IRR 与上游核对清单 —— 从资源到上线的完整流程