摘要

  • 1997 年 4 月 25 日,AS7007 的路由器在没有入站前缀过滤的情况下收到约 2.3 万条路由,随后把数万条更具体前缀宣布成由 AS7007 起源。
  • 错误之所以扩散,是因为相邻网络接受并继续传播;更长前缀匹配随后压过仍然存在的合法聚合路由。
  • 真正的修复不是建立全球路由主权,而是分开证据与执行:登记库描述意图,运营者生成过滤器,并对自己接受的路由负责。

一个 AS 仿佛成了整个互联网的起点

1997 年 4 月 25 日星期五,美国东部时间约 11 时 30 分,MAI Network Services 位于 AS7007 的边界路由器从下游客户收到近乎完整的路由视图,约 2.3 万条。MAI 后来的公开致歉承认,这条会话没有入站 distribute list 来限定客户可以宣布的前缀。

设备没有简单转发这张表。按 MAI 的说法,它把路由拆成更具体的前缀,并删除原来的 AS 路径。MAI 的另一台边界路由器看到超过 7.3 万条记录。远处网络看到的,像是 AS7007 同时成为许多地址范围的起源。

数字不是一份统一普查。Avi Freedman 在核心路由器看到约 6 万条;另一个当时的观察值是 7.2 万;MAI 自己报告 7.3 万以上。它们来自不同设备与时刻,不能拼成一个虚假的全球总数。

设备内部原因也没有定论。MAI 强调 AS7007 路由器当时没有运行 IGP,并怀疑软件故障;其他运营者讨论过重分发错误、配置与设备知识。可靠结论是路由发生了变形,且入口缺少过滤;不是某一种故障猜测已经被证明。

为什么更具体的错误会胜出

合法聚合路由并未全部消失。问题在于 AS7007 给出了更窄的替代项。IPv4 转发先选择最长匹配前缀,再考虑后续偏好。因此,即使正确的 /16 仍在,一条错误的 /24 也会吸走属于该小范围的流量。

这条规则本来支撑多宿主与流量工程,却在事故中放大损害。旧 AS_PATH 又被抹去,使路径看起来从 AS7007 开始。可是 AS_PATH 从来不是地址所有权证书,它只是路由系统所携带的传播记录。

事故没有证明某个数据库把全网地址授予了 AS7007。它证明了运行权力分布在接受路由的每一个邻居手中,而许多邻居没有把关系边界变成拒绝规则。

关闭源头之后,副本仍在传播

MAI 的时间线称,它约在 11 时 45 分关闭会话,中午重启设备、加上过滤,并在 12 时 15 分左右断开全部设备。但运营者仍从其他提供商收到 AS7007 路径。一条更新被多处复制后,关闭最初的发送者不会让所有副本同时消失。

当时的记录提到清除 BGP 会话、临时过滤,以及为了救回客户而宣布己方更具体路由。路由震荡抑制还会保存历史:频繁撤回可能让一条路由在稳定后继续被压制,恢复有时需要运营者针对性清除状态。

5 月 15 日,Curtis Villamizar 给出一个有意义的比较:有些提供商在 15 至 20 分钟内布置过滤,有些始终没有;上游阻断源头则花了两个半小时以上。事故不是一个控制室迟按按钮,而是每一条边界拥有不同的规则、人员与时钟。

把道歉变成可执行的边界

MAI 承认的责任非常具体:没有限定下游能够送来的路由。事后部署完整过滤,比“以后更谨慎”的表态更可验证。

后来的最佳实践把规则写明:客户会话只应接受客户前缀,其余拒绝。最大前缀数可阻止整张表突然涌入;AS 路径与特殊地址过滤提供其他边界;监控必须把收到的路由同合同和预期拓扑比较,而不只是显示会话在线。

提供商无须取得对客户公司的治理权,才有权拒绝越界路由。它控制自己的设备,也应为把不可信声明继续传播给第三方承担责任。这种权力因为配置会执行而真实,也因为止于自身边界而有限。

有用但不完整的路由账本

1997 年的反应推动了分布式 Internet Routing Registry 的使用。route 与 aut-num 对象可以描述预期起源和策略,工具再据此生成过滤器。

ANS 宣布将依据 ANS、CANET、MCI、RIPE 与 RADB 的登记对象过滤。但它同时发现 2,829 个已宣布前缀既没有登记,也未被聚合覆盖。它向 312 个起源 AS 发出通知,涉及 2,108 个前缀;另有 151 个 AS、721 个前缀找不到联系方式。

整改后,仍剩 333 个 AS 的 2,096 个未登记前缀。对不完整账本机械严格过滤,会一并切断合法网络;完全不滤,又会放过错误。把数据库叫作“权威”不能消除数据缺口。

RFC 2622 用 RPSL 更精确地描述路由策略。RFC 2725 为新增和修改记录补上分层授权,同时承认聚合、网络退出与更换提供商会留下过期对象。认证能够保护一次写入,却不能保证世界已经更新,更不会自动改变路由器配置。

从默认猜测关系到协议明确角色

此后二十多年,泄漏防范仍主要依赖运营者正确配置客户、提供商与对等体关系。RFC 9234 到 2022 年才加入 BGP Roles 和 Only-to-Customer 属性,让两端表达关系,并让某些越界传播可以在本地拒绝或在远处识别。

它不是 1997 年事故的既有保护,也没有普遍部署,更不能识别所有错误起源。但方向清楚:信任只有在对象、范围和执行点都可检验时才安全。

AS7007 的历史意义不是证明去中心化失败,而是证明去中心化不能等同轻信。每个网络保留接受自由,也必须承担限定、验证与传播的责任。

来源与证据边界

时间线来自 MAI 的解释与致歉,外部观察来自 Avi Freedman 的同日记录,过滤反应来自 ANS 的登记缺口说明。机制依据包括 RFC 1812RFC 2439RFC 2622RFC 2725RFC 7454RFC 9234

没有完整的全球受影响分母。故障成因、路由数量与恢复时长依观察点而异。证据支持一次广泛的意外泄漏、一个被承认的缺失过滤器与分布式修复,不支持精确的全球损失数字或后来防线已经普遍采用。