3、RPKI体系详解:从架构到实战

聊BGP安全,RPKI是个绕不开的话题。我最早接触RPKI是在一次客户的安全审计中,对方问我们有没有部署路由起源验证。说实话,那时候我对RPKI的理解还停留在概念层面。后来踩了不少坑,才慢慢摸清楚这套体系的门道。

今天咱们就把RPKI掰开揉碎了讲。从架构到ROA对象,再到验证流程和部署现状,我尽量把那些容易忽略的细节都点出来。

3.1 RPKI架构:谁在管谁?

RPKI的全称是Resource Public Key Infrastructure,资源公钥基础设施。说白了,它就是一套专门为IP地址和AS号设计的PKI体系。

你想想看,传统的PKI是用来验证域名和网站身份的。而RPKI呢?它是用来验证“谁有权宣布某个IP前缀”的。这个区别很关键。

RPKI的架构分三层:

  • 信任锚(Trust Anchor):通常是RIR(区域互联网注册机构),比如APNIC、ARIN、RIPE NCC。它们是整个信任链的根。
  • 下级CA:包括NIR(国家互联网注册机构)和LIR(本地互联网注册机构)。它们从RIR拿到IP资源后,可以继续向下授权。
  • 终端实体:也就是最终的路由器或网络设备。它们持有ROA或BGPsec证书,用来证明自己的路由宣告是合法的。

我在项目中遇到过一种情况:某家运营商从APNIC拿到了/22的地址段,然后自己又分成了几个/24卖给客户。如果客户想独立做路由宣告,就需要运营商签发ROA。这个授权链条必须完整,否则验证就会失败。

核心要点:RPKI的信任模型是层次化的,从RIR到LIR再到终端用户,每一级都需要证书链的支持。断了一环,验证就过不去。

3.2 ROA对象:路由起源的“身份证”

ROA(Route Origin Authorization)是RPKI体系里最核心的数据对象。它本质上是一份数字签名的声明,内容很简单:

  • 某个AS号(比如AS13335)
  • 被授权宣告某个IP前缀(比如1.1.1.0/24)
  • 最长前缀长度(比如/24,意味着不能宣告更具体的/25)

我举个例子你就明白了。假设你拥有203.0.113.0/24这个地址段,你想让AS65001来帮你做路由宣告。那你就在RPKI系统里创建一条ROA:

ASN:          AS65001
IP Prefix:    203.0.113.0/24
Max Length:   24

这条ROA签完名后,全世界都能验证。任何路由器只要启用了RPKI验证,看到AS65001宣告203.0.113.0/24,就会标记为“Valid”。如果换成AS65002来宣告,那就是“Invalid”。

个人经验:我建议你在创建ROA时,Max Length一定要谨慎设置。我曾经见过有人把/24的Max Length设成/28,结果下游客户想宣告更具体的/26时,直接被标记为Invalid。业务中断了半小时才查出来是ROA的问题。

3.3 RPKI验证流程:路由器是怎么判断的?

验证流程其实不复杂,但细节挺多。我画了一张流程图,帮你理清思路:

RPKI验证流程 步骤1:收到BGP更新 包含前缀 + AS_PATH 步骤2:查询RPKI缓存 查找匹配的ROA记录 有ROA? 验证ASN和前缀 ASN匹配?前缀长度合法? ✅ Valid(有效) ❌ Invalid(无效) NotFound(未找到) 没有ROA,无法判断

验证结果有三种:

  • Valid:ROA存在,ASN和前缀都匹配。放心收下这条路由。
  • Invalid:ROA存在,但ASN不匹配,或者前缀长度超过了Max Length。这条路由很可能是劫持,建议丢弃。
  • NotFound:没有找到对应的ROA。这种情况最常见,因为全球还有大量前缀没有注册ROA。路由器通常会选择收下,但需要结合其他策略判断。

注意:我曾经在实验室里犯过一个低级错误——把RPKI验证策略设成了“NotFound也丢弃”。结果一上线,全球一半的路由都丢了。因为当时很多合法前缀根本没有ROA。切记:NotFound不代表非法,只是未注册。

3.4 RPKI部署现状:理想很丰满,现实很骨感

说到部署现状,我得先泼一盆冷水。虽然RPKI的概念从2010年左右就开始提了,但真正大规模部署也就是最近三四年的事。

我整理了一些数据,你看看就明白了:

指标 2020年 2023年 2025年(预估)
IPv4 ROA覆盖率 约15% 约35% 约50%
IPv6 ROA覆盖率 约10% 约25% 约40%
启用RPKI验证的AS数 约2000 约8000 约15000
全球BGP表项中Valid比例 约8% 约20% 约35%

你看,虽然增长很快,但整体覆盖率还是偏低。为什么会这样?我总结了几点原因:

  • 操作门槛高:创建ROA需要理解PKI、证书、签名这些概念。很多中小型运营商连CA都搞不明白。
  • 历史包袱重:有些老牌运营商手里有几十年前的IP地址段,归属关系早就乱成一锅粥了。想理清楚谁有权宣告,比登天还难。
  • 风险顾虑:ROA配错了会导致路由被标记为Invalid,直接造成业务中断。我见过一家公司因为ROA的Max Length设错,导致整个BGP会话被邻居断开。
  • 激励不足:部署RPKI能防劫持,但劫持事件本身并不常见。很多运营商觉得“没出事就不用管”。

我的建议:如果你刚开始部署RPKI,别一上来就搞全量。先挑几个关键前缀做试点,观察一段时间。等流程跑顺了,再逐步扩大范围。我当年就是这么干的,稳得很。

另外,RIR们也在推一些工具来降低门槛。比如APNIC的RPKI Dashboard,可以帮你一键生成ROA。RIPE NCC的RPKI Validator也做得不错,能实时查看验证状态。这些工具我都在用,确实省了不少事。

嗯,关于RPKI体系,今天就聊到这儿。内容不少,但核心就三件事:理解架构、学会创建ROA、搞懂验证流程。把这三点吃透了,BGP安全就算入门了。

一句话总结:RPKI不是银弹,但它是目前对抗BGP劫持最有效的武器。部署起来确实有点麻烦,但比起被劫持后的损失,这点麻烦真不算什么。


公众号:蓝海资料掘金营,微信deep3321