计算机网络 E02:路由安全与 RPKI、路由泄漏
一条 BGP 通告的起源 AS 与 RPKI 授权一致,并不表示整条 AS_PATH 都可信。RPKI 来源验证回答“这个前缀是否允许由这个 AS 起源”,路由泄漏还涉及路径如何跨越自治系统之间的业务关系传播。
第 12 篇介绍 BGP 路径和策略,第 37 篇讨论信任边界。本篇只用离线通告构造来源验证和导入策略案例,不建立公网 BGP 会话。
ROA 约束前缀、起源与最大长度
RPKI(Resource Public Key Infrastructure)用可验证对象把互联网号码资源与授权关联。ROA(Route Origin Authorization)声明某个 AS 可以起源某个前缀,并可用 maxLength 限制更具体通告的最长前缀长度。
来源验证有三种结果。通告被至少一条覆盖 ROA 授权时为 Valid;存在覆盖 ROA,但起源 AS 或长度不满足时为 Invalid;没有任何覆盖 ROA 时为 NotFound。NotFound 不是“已经证明恶意”,它表示缺少可用于该判断的授权对象。
样例 ROA 授权 AS64500 起源 203.0.113.0/24,最大长度为 /24。因此 AS64500 的 /24 为 Valid,AS64599 的同一 /24 因起源不符而 Invalid,AS64500 的 /25 因长度超过 maxLength 也为 Invalid。
模式提炼:先确定验证问题的输入维度
来源状态 = 覆盖关系 + 前缀长度 + 起源 AS
AS_PATH 中间经过哪些自治系统不在这个公式里。用来源状态评价完整路径,等于把没有参与计算的字段当作已验证。
来源有效仍可能发生路由泄漏
RFC 7908 把 route leak 描述为超出预期范围传播路由通告的情形。一个客户合法起源自己的前缀,某个中间 AS 却把从一个上游学到的路径错误通告给另一个上游时,起源仍可保持 Valid,传播关系却违反策略。
固定案例中,203.0.113.0/24 的起源仍是 AS64500,但 AS_PATH 为 [64530, 64520, 64500],本地离线策略把该关系标记为不允许。RPKI 来源验证通过,最终导入仍被策略拒绝。这一案例不是对真实运营商关系的判断,只用于展示两个判定轴可以分离。
RFC 9234 的 BGP Roles 和 OTC 属性用于帮助表达与检测一类路由泄漏。它要求相邻 AS 采用相应角色与传播规则;没有协商这些能力时,不能假设泄漏会自动被阻止。
离线通告验证
rpki_model.py 使用 Python ipaddress 标准库读取 ROA 和通告。它先计算来源状态,再独立应用样例中的 policy_permit,输出最终导入决定。
1 | |
素材包括ROA 与离线通告、来源验证脚本、验证结果、资料与运行记录和审阅记录。
条件、限制和反例
RPKI 数据有效不等于路由一定应被接受。导入策略还可能考虑邻居关系、AS_PATH、社区、偏好和运营目标。
来源 Invalid 也不自动说明恶意劫持。ROA 配置错误、过严的 maxLength 或资源持有者尚未同步更新都可能造成误配,处置策略需要结合本地风险。
路径看起来符合 valley-free 关系也不证明 AS_PATH 中每一跳都经过密码学验证。本篇没有实现 BGPsec,也没有验证控制面通告与数据面实际转发一致。
练习
练习一:ROA 为 10.0.0.0/16、AS65000、maxLength=20。判断 AS65000 起源 /18、AS65000 起源 /24、AS65001 起源 /18 的状态,并写出每个结论的两个检查条件。
练习二:构造一条起源 Valid 但违反“从上游学到的路由不得通告给另一上游”的路径,说明 RPKI 来源验证看不到哪个事实。
模式速查表
| 机制 | 检查对象 | 不覆盖 |
|---|---|---|
| ROA | 授权前缀、起源 AS、maxLength | 完整 AS_PATH 传播 |
| 来源验证 | Valid/Invalid/NotFound | 本地导入策略本身 |
| BGP Roles/OTC | 邻居角色与泄漏约束 | 数据面逐包路径 |
| 本地策略 | 接受、优先级和导出 | 资源授权真实性 |
官方一手参考资料
- RFC 6480:An Infrastructure to Support Secure Internet Routing,IETF,2012-02,访问于 2026-09-24。
- RFC 6811:BGP Prefix Origin Validation,IETF,2013-01,访问于 2026-09-24。
- RFC 7908:Problem Definition and Classification of BGP Route Leaks,IETF,2016-06,访问于 2026-09-24。
- RFC 9234:Route Leak Prevention and Detection Using Roles in UPDATE and OPEN Messages,IETF,2022-05,访问于 2026-09-24。
验证边界
已验证:Python 3 标准库对固定 ROA 与离线通告计算来源状态,并将来源验证与本地路径策略分开,验证类型为 STATIC。
NOT_RUN:未连接 RPKI 验证器、RPKI 仓库、路由器或公网 BGP 邻居,未验证 RTR 同步、真实策略传播、BGPsec 或数据面路径。






