Cloudflare 宕机——长达 6 小时的全球大规模服务中断导致客户无法访问互联网

2026-02-22 11:55:04 1 139

2026 年 2 月 20 日,Cloudflare 遭遇了长达 6 小时的全球服务中断,导致使用其自带 IP (BYOIP) 服务的客户受到严重影响。



2026 年 2 月 20 日,Cloudflare 遭遇了长达 6 小时的全球服务中断,导致使用其自带 IP (BYOIP) 服务的客户受到严重影响。

该事件始于世界协调时 17:48,持续了 6 小时 7 分钟,无意中从互联网上撤回了客户的 BGP 路由,导致许多服务和应用程序无法访问。

该公司证实,此次中断完全是由内部配置更新引起的,而非网络攻击或恶意活动,影响了全球 25%的 BYOIP 前缀,并在 1.1.1.1 公共递归 DNS 解析器网站上触发了 HTTP 403 错误。

地址 API 故障的技术分析

此次故障的根本原因可以追溯到 Cloudflare 地址 API 中的一个内部错误,该错误是在自动清理子任务部署期间引入的。

这项任务旨在取代 BYOIP 前缀的手动删除流程,作为公司“橙色代码:小规模故障”弹性计划的一部分。

工程师部署了一个系统,用于定期检查并移除网络中的待处理对象。然而,该系统执行的 API 查询传递了未赋值的 pending_delete 标志,导致服务器将该空字符串解释为将所有返回的 BYOIP 前缀加入删除队列的命令,而不仅仅是那些已计划删除的对象。

在一名工程师手动终止该进程之前,这种编码疏忽系统性地删除了大约 1100 个 BYOIP 前缀及其依赖的服务绑定。

受影响的连接立即进入一种称为 BGP 路径搜索的状态,在这种状态下,终端用户连接会持续搜索目标路由,直到超时并失败。此次影响范围波及多个依赖 BYOIP 配置进行互联网通告的核心产品。

恢复工作和计划​​补救措施

由于大规模提款对客户前缀的影响各不相同,导致恢复工作严重延误,需要进行密集且多样化的数据恢复操作。

虽然有些用户可以通过 Cloudflare 控制面板重新启用广告来自行解决问题,但大约有 300 个前缀的服务绑定被完全移除。

这些受影响严重的账户需要工程师手动恢复,他们必须推送全局配置更新,才能将设置重新应用到边缘网络上的每台机器上。

为防止未来发生灾难性部署,Cloudflare 正在根据其“橙色代码”指令加快几项关键架构变更。

工程团队计划规范 API 架构以防止标志位解析错误,实施熔断器以检测异常快速的 BGP 前缀删除,并建立基于健康状况的运行状态快照,以将客户配置与生产部署分开。



Cloudflare 在其官方事件报告的结尾,就 2 月 20 日的网络中断事件直接向用户和全球互联网社区致歉。该公司公开承认,此次大范围的网络中断损害了其提供高弹性网络的核心承诺。

关于作者

weak_hong11篇文章21篇回复

评论1次

要评论?请先  登录  或  注册
  • 1楼
    昨天 11:59

    ### 结论 此次宕机事件是典型**开发/运维流程中的输入验证与错误处理缺陷**直接引发的级联故障。核心问题在于**API参数未强制校验**(未赋值的`pending_delete`标志被误解析为删除指令),且**缺乏熔断机制控制大规模删除行为**,最终导致BGP路由xi统全局失效。 --- ### 分析路径 #### **L1 攻击面识别** - **关键组件与依赖链**: - **API接口**:地址API负责BYOIP前缀的增删改查。 - **BGP路由xi统**:依赖API数据通告客户IP路由。 - **自动清理任务**:定期触发API查询,删除标记为`pending_delete`的前缀。 - **攻击面暴露点**: - 自动任务调用API时传递未校验的`pending_delete`参数值(空字符串)。 - API未对参数格式/枚举值进行约束,将空字符串误解析为“强制删除所有结果”。 #### **L2 假设与验证** - **假设1**:API的`pending_delete`参数未进行类型/枚举值校验,允许任意输入。 - **验证路径**: 1. 检查API文档或代码,参数`pending_delete`是否仅允许`true/false`或预设枚举值。 2. 模拟API调用,传递空字符串或异常值,观察是否触发错误返回而非误操作。 - **假设2**:自动清理任务未实现熔断机制,无法阻止异常删除行为扩散。 - **验证路径**: 1. 检查任务逻辑是否统计单位时间内删除的前缀数量,超过阈值后触发熔断。 2. 审查删除日志,确认是否在初始错误发生后持续批量删除目标。 #### **L3 边界/异常场景** - **边界条件测试**: - 参数`pending_delete`为空字符串时,API是否返回错误而非执行逻辑。 - 自动任务连续删除超过阈值(如>100个前缀)时,是否触发熔断或人工审核。 - **异常场景复现**: - 通过API注入异常参数值(如空字符串、非布尔值),观察是否触发非预期删除。 - 模拟高负载下任务频繁触发,验证熔断器是否生效并阻断后续请求。 #### **L4 防御反推与修复** - **现有防御措施失效点**: - **参数校验层缺失**:未强制`pending_delete`参数类型为布尔值。 - **熔断机制缺失**:未对批量删除操作设置速率限制或总量阈值。 - **变更回滚机制缺失**:删除操作无事务性回滚能力,需手动恢复。 --- ### 验证步骤(最小可执行路径) 1. **参数校验验证**: ```bash # 模拟API请求,传递空字符串作为pending_delete参数 curl -X POST "https://api.cloudflare.com/delete_prefix" \ -H "Content-Type: application/json" \ -d '{"pending_delete": ""}' ``` **预期结果**:API应返回400错误并提示参数无效,而非执行删除操作。 2. **熔断机制验证**: - 触发自动清理任务,逐步增加需删除的前缀数量,观察是否在达到阈值(如50个/分钟)时触发熔断并停止后续操作。 3. **BGP路由影响验证**: - 使用`traceroute`或`bgpstream`工具,监控删除前缀后的路由收敛延迟,确认是否因路由失效导致全局超时。 --- ### 修复建议 1. **API层防御加固**: - **强制参数校验**:在API接口中将`pending_delete`参数类型定义为布尔值,并拒绝非`true/false`输入。 - **枚举值约束**:若需多状态支持(如`pending_delete`、`confirmed_delete`),定义枚举值白名单并校验输入。 2. **熔断与限流机制**: - 在自动清理任务中添加**速率限制**(如每分钟删除<=50个前缀)、**总量阈值**(单次任务最大删除量),超过阈值需人工审批。 - 实现**熔断器**:若单位时间内删除失败率超过10%,自动终止任务并告警。 3. **变更回滚能力**: - 对BYOIP前缀操作添加**事务性日志**,支持原子回滚(如删除后生成JSON快照,可快速恢复)。 - 提供**配置快照对比工具**,对比生产环境与备份配置差异,自动化推送修复指令。 4. **监控与告警**: - 监控BGP路由收敛时间(如`bgpq3`工具采集`AS_PATH`长度变化)。 - 对API异常参数调用、批量删除操作设置实时告警(如Prometheus+Alertmanager)。 **关键点**:所有自动任务需遵循**最小权限原则**,并强制通过沙箱测试(如模拟环境验证参数边界条件)。