摘要

  • 2020 年 8 月 30 日约 10:00 UTC,CenturyLink/Level 3 骨干网发生重大事件,约五小时内造成广泛可达性故障。四个观察方从不同测量面记录到路由抖动、异常 BGP 更新、陈旧通告、流量在网内终止以及大量网络不可达。
  • CenturyLink 称,一项本来要阻断单个 IP 地址的 FlowSpec 请求在收到时带有通配符,通过第二道过滤后被广泛传播;运营商称由此产生的异常通告使多个网络元素之间的 BGP 无法正常建立。独立测量能够印证外部路由后果,不能还原全部内部因果链。
  • 问责必须落在运行中的控制面:有效匹配范围、传播隔离、撤回能力、可用的中止权限和端到端恢复证据。公开记录没有确定个人或设备厂商责任,没有证明恶意行为、法律责任、唯一受影响人数或损失,也没有证明后续预防控制已全网部署且至今有效。

四种测量拼出的五小时故障

一次分布式网络故障往往没有所有人共同看到的单一起点。USC 信息科学研究所使用主动可达性探测,将广泛恶化的开始放在 09:55 UTC 左右;Cloudflare 在自己的网络中记录到 10:03 UTC 开始出现错误。两者相差数分钟,不构成矛盾。前者从多个地理位置观察地址能否响应,后者看到的是自身边缘、流量与路由关系中的变化。它们测量的是同一事件在不同边界上的显现。

此后约五小时,许多依赖 CenturyLink/Level 3 的网络经历了不稳定或失效的路径。影响并不限于由 CenturyLink 托管的网站,也不限于与其直接签约的客户。一级骨干网处在大量第三方路径中;一个组织即使从未主动选择 CenturyLink,其上游或对端也可能依赖 Level 3。用户看到的网页超时、连接失败或服务间歇中断,可能源于数个自治系统之外仍在被通告、却不能正确转发的路径。

Cloudflare 表示,它在 48 个城市自动将 CenturyLink/Level 3 从路由选择中移除。这说明,当备用路径真正独立、且撤回信息能够被接受时,多路径可以降低影响。但该动作没有解决全部故障。Cloudflare 仍观察到陈旧路由造成的失败,也指出有些网络实际上只有单一上游,没有可绕行的路径。其测得的全球流量下降 3.5%,代表 Cloudflare 平台所见的规模,不能换算成独立用户、交易损失或整个互联网的统一损害值。

Catchpoint 从 RouteViews 数据分析异常通告,将其关联到 Level 3 的自治系统 AS3356,并在伦敦互联网交换中心的一个采集点看到显著增加的 BGP 流量。其材料区分了两类网络:一类能够改走其他路径,另一类可用路由仍经过 CenturyLink。配置清单上存在两个连接,并不等于故障时存在两个可用出口;如果陈旧优选路由继续吸引流量,备用链路只是纸面冗余。

USC/ISI 的 Trinocular 系统则从美国境内及国际测量点观察可达性。它报告在恢复前有数千个网络变得不可达。这里的计量对象是网络块在特定探测点上的响应状态,不是人数。一个网络可能服务大量用户,一个用户可能依赖多个网络,不同测量还会覆盖同一事件。可靠结论是大范围连续性受损,而不是凭网络数量构造“受害者总数”。

ThousandEyes 同时承担了两种证据角色。其观察描述了流量在 Level 3 网内终止、路由抖动、陈旧通告和对等方行为变化;其文章也保存了 CenturyLink 向客户提供的初步与扩展说明。必须把两者分开:路径和路由后果可以由外部观察,FlowSpec 请求如何进入、通过过滤并传播,则是 CenturyLink 的内部解释。

四套记录相互印证,却不能相加。Cloudflare 的流量比例、RouteViews 的更新数量、Trinocular 的不可达网络数和 ThousandEyes 的路径观察使用不同分母,且彼此重叠。它们共同支持“骨干网连续性受到广泛影响”,不支持唯一受影响人数、收入损失、伤亡或法律赔偿数字。

CenturyLink 所描述的 FlowSpec 链条

BGP 让自治系统交换可达性信息,决定经由哪个邻居抵达目标前缀。FlowSpec 借用 BGP 的分发能力,把流量匹配与处置规则送到多个网络节点。遭遇拒绝服务攻击时,运营商可以用它快速丢弃或重定向特定流量,而不必逐台设备人工配置。这种杠杆本身具有明确的运营价值。

然而,快速分发也会放大输入范围的偏差。请求表达的是业务意图,例如“阻断一个地址”;设备执行的则是经过规范化的字段、掩码、前缀和通配符。控制面不会理解工单背后的朴素目的,只会运行被接纳的对象。如果编码后的匹配集合比批准范围更大,传播效率就会把本地偏差转化为骨干网共同执行的动作。

据 ThousandEyes 保存的 CenturyLink 扩展说明,一项旨在阻断单个 IP 地址的请求在收到时包含通配符,随后通过第二道过滤并被广泛传播。CenturyLink 称,异常 FlowSpec 通告使网络元素间的 BGP 无法正常建立。这个句子中的内部细节都必须归于 CenturyLink。外部采集器能看见路由异常,主动探针能看见地址失联,但它们看不到原始请求、每次过滤判断或各设备内部的完整状态转换。

“第二道过滤”这个表述本身也不能证明控制为何失败。过滤器可能只验证语法,不比较实际效果与授权意图;也可能接受协议上合法、运营上过宽的通配符;或者在规则后续转换前检查了另一种表示。两道检查如果共享解析器、默认值或同一误解,也会重复同一个错误。公开材料没有披露完整规则语言、设备型号、配置层次或审批流程,因此这些只能作为控制问题,不能被写成已确认的 CenturyLink 实现缺陷。

同样,没有证据支持点名路由器、软件或 FlowSpec 平台厂商。FlowSpec 是由多种产品实现的标准化机制,冻结来源没有确认产品缺陷,也没有显示运营责任转移给供应商。材料还没有确定是谁输入、修改、复核、批准或发布请求。“收到一项请求”并不能证明某个工程师、客户员工或管理者的意图与过失。

CenturyLink 报告称,运营团队阻断了有问题的通告,并恢复 BGP 稳定。公开记录支持的仅是这项即时缓解:问题通告被阻断,BGP 稳定性得以恢复。但一次恢复并不能自动证明后续输入验证、分阶段发布、隔离、回滚或全网测试已经完成。要声称当前控制有效,还需要此后在相关条件下的部署与测试证据,而这些不在四份公开来源中。

外部一致不等于内部取证

不同方法得出一致结果,是这组证据最有力的部分。Cloudflare 从全球边缘与转接关系看到错误和绕行;Catchpoint 从公开路由采集数据研究通告;USC/ISI 通过分布式主动探针检查地址可达性;ThousandEyes 查看路径行为并保存运营商说明。多种仪器在相近时间看到同方向异常,使事件不能轻易被解释为单一仪表故障。

但每种仪器都有清楚边界。BGP 采集器只能记录其会话所接收的通告,不是运营商内部每一次策略计算。主动探针只能说明某地址从某处是否响应,无法识别哪条内部命令影响了会话。路径追踪显示流量在哪一段停止,却不能说明过滤器为何放行。对等方看到陈旧路由,也无法仅凭外部状态判断撤回是未生成、未传播、未接受,还是被其他状态覆盖。

Cloudflare 在事件发生时讨论过若干可能的内部原因。那些同时期假设记录了邻近网络如何在信息不足时推理,具有历史价值,但不能与 CenturyLink 后来的说明拼成一条“独立确认”的私有因果链。严谨时间线应保留三层:事故中的工程假设、运营商事后归因、以及外部可复现的路由与可达性结果。

这种区分也限制法律结论。重大中断与严重控制问题并不自动等于违约、疏忽或已裁定责任。四个冻结来源都不是针对该事件的法院判决或监管决定。技术问责仍可以要求运营商说明规则为何被接纳、传播如何受限、恢复如何验证,但不能借用不存在的法律裁判增加确定性。

公开记录留下多项实质未知:完整内部日志和准确命令输入顺序没有公开;谁拥有审查、传播和中止决定权不明;设备或软件厂商身份及缺陷贡献未被确认;除 CenturyLink 说明外,完整私有因果链未被独立重现;后续预防措施是否全网部署、今天是否有效没有独立证据;唯一受影响人数、经济损失、伤亡与法律责任也未确立。

验证的对象应是有效范围

强控制输入至少需要三层验证。第一层是结构:对象是否符合协议与实现要求。第二层是政策:匹配条件、动作和范围是否属于组织允许的类别。第三层是意图:设备将执行的有效对象是否准确表达获得授权的目的。前一层通过,不代表后一层自然通过。

CenturyLink 的说明使这种差异非常具体。请求若以一个地址为目标,却带有通配符,那么确认通配符“语法合法”并不能证明范围正确。第二道过滤如果比较的是错误表示、没有计算展开后的匹配集合,或复用了第一道检查的解释,就可能接纳形式正确、实际危险的对象。公开材料不足以证明究竟是哪一种情况,但足以说明为什么验证不能止于格式。

更有力的证据,是在传播之前并排展示授权意图与规范化结果。系统可以明确列出有效地址、前缀、协议、端口、处置动作及将安装规则的区域和设备。若请求写的是一个地址,系统却计算出额外通配符或显著扩大的流量集合,就应产生硬性例外。人工批准只有在复核者看到“网络将执行什么”时才有价值;重复显示同一段含糊输入不会增加独立性。

独立验证不等于必须更换厂商。它可以是另一个实现对匹配集合进行重算,可以是在安全环境中模拟,也可以是小范围运行后从外部检查结果。关键在于避免多个环节共享同一解析器、隐藏默认值和转换假设。若两种计算不一致,不应通过平均结果来制造信心,而应降低传播权限。

分阶段发布为无法预见的偏差提供缓冲。规则可先进入少量且具有代表性的网络元素或区域,同时观察 BGP 会话、路由更新量、规则命中流量以及与请求无关的目的地可达性。只有这些指标保持在基线范围,才扩大安装。所谓“试点”不能只靠名称成立;它必须经过与全面发布相同的转换链,并覆盖相关行为。

试点还必须有预定义中止条件。规则下发后若出现相关会话失败、路由抖动、流量终止或非目标地址失联,就应冻结后续传播,而不是等完整根因报告。观察到异常的人或自动系统需要有权隔离区域、撤回对象并保护尚未受影响的部分。这种权限不是对责任的提前裁决,而是在证据尚不完整时保护连续性。

验证系统自身失败时也需要安全状态。服务不可用、两种计算冲突、有效范围无法解释,都不应默认获得全骨干网传播权。不确定性越大,初始范围越小,或发布被延后。只有这样,输入验证才是运行控制面的安全边界,而不是事后证明“曾经走过流程”的记录。

陈旧通告让纸面冗余失效

此次事件的破坏性不只来自路径失效,还来自一些网络无法可靠绕开失效路径。BGP 的连续性依赖及时、可信的状态:路径撤回或降级后,其他路径才会被选中。陈旧通告继续宣称可达,会把流量吸向实际上无法正确转发的网络,即使其他出口客观存在。

Cloudflare 的经历展示了两面。在许多城市,它成功移除 CenturyLink/Level 3 并转向替代路径;但陈旧路由或单宿关系让其他场景继续失败。Catchpoint 也区分了能够绕行和仍经过 AS3356 的网络。因此,冗余不能仅以连接数量衡量。两个上游若不能在事故状态下独立选择,就不是两条连续性路径。

这使问责范围从原始 FlowSpec 规则延伸到撤回行为。防御规则不应破坏网络通告自身不可用状态的能力。会话拆除、路径撤回、本地偏好变化、对等方响应与替代路由选择,都是恢复控制。如果引发故障的恰恰是控制面,就更需要一条不依赖同一失效状态的退出路径。

“恢复”也不应被压缩为一个时间点。阻断问题通告是停止触发器;BGP 会话重新建立是恢复状态交换;路由抖动下降和陈旧通告消失是收敛;多地探针重新抵达目的地才是服务结果。不同来源记录不同里程碑完全合理。一个内部面板显示绿色时,外部对等方仍可能保留旧状态。

因此,恢复证据要同时来自内部与外部。路由采集器应看到异常更新消退,对等方应能接受撤回并选择替代路径,主动探针应从不同地区恢复可达,流量不再终止于损坏路径。只有依赖该骨干网的其他网络重新看到稳定结果,运营连续性才真正恢复。

在边界内进行问责

没有完整日志,就不能给事故编造个人主角。公开信息没有说明谁加入或保留通配符,谁负责第二道过滤,谁批准传播,也没有说明这些角色属于 CenturyLink 人员、客户流程、自动系统或多个环节。把未知角色归结为某个工程师的失误,会用叙事替代证据。

也没有证据表明请求具有恶意。阻断一个地址符合常见防御目的;规则据称变得过宽,并不能使未知请求者成为攻击者。真正值得分析的是:一个正当安全目标为何能转化为危险的有效对象,并在运行系统中越过限制。

厂商归因同样缺乏基础。任何骨干网都会使用第三方软硬件,但存在产品不等于存在产品缺陷。冻结来源没有识别具体设备、操作系统或控制器,更没有证明责任边界发生转移。运营商仍需对自己接纳和分发的控制输入提供证据,而不是把未证实的可能性指向供应商。

后续整改只能谨慎表述。CenturyLink 称已阻断问题通告并恢复 BGP,这是事件处置事实。来源没有当前设备清单、全网部署证明、演练结果、独立中止测试或现行有效性评估。断言“问题已经永久解决”和断言“今天仍无任何改进”都超出记录。

这种克制并不妨碍透明度。骨干网运营商不必公开敏感配置,也可以说明失败输入的类别、授权范围与有效范围的差异、传播边界、停止条件和恢复里程碑。它还可以区分哪些来自外部观察、哪些来自内部分析、哪些仍待验证。准确标注未知,比无边界的保证更有利于客户与对等方判断连续性。

运行中的网络才是最终证明

FlowSpec 可以是高效的防御工具,BGP 也是跨网络交换可达性的基础。2020 年事件并不证明协议本身有罪。它证明,协议名称、政策文件、审批记录或“有两道过滤”都不能代替运行结果。控制是否有效,要看实际对象的范围、传播和可逆性。

CenturyLink 描述的链条从一项针对单个地址的请求开始,经通配符、第二道过滤和广泛传播,最终影响网络元素间的 BGP 建立。独立观察者随后看到路由和可达性后果。两类证据彼此连接但不能互换:运营商说明内部机制,外部互联网验证实际影响。

架构图可以画出多个校验器和多条上游,工单可以写明一个地址,规则最终仍由设备执行。决定性证据是:系统计算的有效匹配保持在授权范围,首次暴露受到限制,撤回通道在异常时仍可用,并且外部网络重新获得稳定路径。设计意图只有在这些结果中才成为运营事实。

由此形成的问责标准不需要寻找替罪羊,也不需要否定 FlowSpec。它要求有效范围可见,检查之间具有真正独立性,传播从小范围开始,中止权限能够即时使用,恢复由外部收敛与可达性证实。组织必须知道自己的骨干网实际做了什么,也必须有办法在尚未知道全部原因时先让它停下来。

那五小时留下的长期教训是:规则被接受,不等于规则被控制;配置中有备用路径,不等于故障中可以切换;内部宣告恢复,不等于依赖方已经重新可达。输入验证、传播隔离、撤回完整性与恢复证明必须成为同一个运行责任链,防御工具才能保持为有边界的控制,而不是共同失效路径。

来源