摘要

  • 2023 年 1 月 25 日,Microsoft 经历了一次全球网络事件,影响了从互联网到 Azure 的连接、服务之间和区域之间的连接、ExpressRoute 连接、Microsoft 365 及其他 Microsoft 服务。一份面向 Microsoft 365 客户的报告给出了 07:05 至 12:43 UTC 的影响窗口,并指向 Azure WAN 跟踪编号 VSG1-B90。[1][2]
  • Microsoft 的公开解释称,一项计划变更旨在更新 WAN 路由器上的一个 IP 地址。某条命令在不同网络设备上的行为存在差异,且未在其执行的路由器上经过完全验证。消息传到了其他 WAN 路由器,这些路由器重新计算了邻接关系和转发表;在收敛期间,路由器无法正确转发数据包。[1][2][4]
  • ThousandEyes 独立观测到与 Microsoft 的 AS8075 相关联的前缀出现 BGP 路由撤销、重新宣告、反复的路径变化,以及直连对等路径与转接路径之间的切换,还有与路由事件相关联的丢包。该证据证明了外部可见的路由不稳定,但并不能揭示所有私有命令或内部表状态。[3]
  • 真正有用的问责问题不在于该变更是否经过计划。而在于它的确切语义是否在将要执行它的设备和软件群体上经过测试,传播是否受到限制,以及路由和可达性不变量是否能够在全局影响出现前停止发布。
  • Microsoft 称最初的监测工作先检查了 DNS,之后才确认 WAN 是故障来源。这一顺序引出了一个分类和可观测性问题:监测能够识别用户症状,还是能够快速区分导致症状的控制平面和转发平面机制?这并不证明存在隐瞒或不合理的延迟。
  • ExpressRoute 冗余仍然是重要的客户架构,但它不会把 Microsoft 私有骨干命令、路由器邻接关系、转发收敛或全局恢复的控制权转移给客户。责任归属于各方实际操作的控制措施。[8]-[11]
  • BGP 和运营标准解释了路由宣告、撤销、过滤和计划性流量排空。它们并不能证明 Microsoft 的内部状态。RPKI 源授权也无法验证某个特定于设备的命令、内部邻接重计算或转发连续性。[18]-[20]
  • 最有说服力的事件后证据应当将变更请求与确切命令和候选状态、设备与版本验证矩阵、路由不变量、有代表性的金丝雀测试、最大传播域、独立探针、自动回滚触发器和留存恢复日志绑定在一起。
  • Microsoft 当前文档描述了全球网络工程、监测、ExpressRoute 和 Virtual WAN 控制。这些文档说明了可用的机制和当前的设计声明;它们不能证明每项控制在 2023 年 1 月都以同样的形式存在或持续执行。[7]-[17]
  • 公开记录并未披露确切的命令、所有路由器型号和软件版本、每一个受影响的前缀、完整的客户数量、财务损失、监管结论、疏忽、恶意意图或供应商过错。这些局限仍然是调查结论的一部分。

计划变更不等于经过验证的变更

“计划变更”这个说法听起来可能令人安心。它意味着授权、准备和已知目标。在此次事件中,Microsoft 将引发问题的操作描述为一次计划变更,旨在更新 WAN 路由器上的一个 IP 地址。其目的是常规维护,并非试图改变全球可达性。然而,用于这项工作的命令据报告在不同网络设备上行为存在差异,并且在执行它的路由器上并未经过完全验证。[1][2][4]

这一差距就是第一项问责发现。计划记录的是一个组织打算做什么。验证测试的是部署后的系统实际上会做什么。两者相关,但不能互换。

路由器并不是存放文本命令的通用容器。命令由特定的平台、操作系统版本、功能集、配置上下文和相邻拓扑来解释。相同的语法在不同的异构设备群上可能不被支持、产生不同的展开、应用于不同的范围,或触发不同的依赖操作。即使最终配置看起来相似,从本地变更到协议消息、邻接状态、路由选择和转发条目的路径也可能不同。

因此,Microsoft 的公开解释指向的,是比“有人犯了错误”更具体的控制失效。问题在于变更系统是否知道哪些设备会接收或响应该命令,以及其验证证据是否代表了这些设备。在一个平台上进行测试,并不能仅仅因为二者都叫路由器就证明其在另一平台上的行为。如果实验室测试遗漏了产生风险的软件版本、对等体数量、路由规模、策略集或传播路径,它就无法证明生产环境的安全性。

这一区别之所以重要,是因为网络命令是可执行权力。变更描述可能写着“更新一个 IP 地址”。路由器执行的并不是这个描述。它执行的是会修改状态的命令和协议。其他路由器响应的是它们收到的消息,而不是工单的业务目的。数据包遇到的是由此产生的转发表,而不是审批记录。

因此,一个负责任的变更流程必须保留从意图到运行效果的一条链:

  1. 已批准的目标和确切范围。
  2. 已渲染的命令或候选配置。
  3. 预期执行该命令的设备型号、软件版本、角色和拓扑。
  4. 预期引发的协议消息和状态转换。
  5. 必须保持成立的路由和可达性不变量。
  6. 用于测试这些预期的金丝雀测试和传播边界。
  7. 回滚的触发条件和权限。
  8. 显示网络已恢复到预期状态的观测记录。

如果没有这条链,计划变更可能在流程上已经完成,但在运营上并未经过验证。2023 年 1 月的事件之所以重要,正是因为公开解释将一个常规目标与设备相关行为和全网后果联系了起来。

故障机制贯穿了整个 WAN

应用中断往往产生类似网络的症状。用户看到超时、登录失败或页面无法加载。仅凭这些观察无法确定是 DNS、身份验证、应用容量、存储、传输路径还是路由控制发生了故障。

1 月 25 日现有的记录更为具体。Microsoft 将该事件与其广域网联系起来。其说明称消息被发送到其他 WAN 路由器。这些路由器重新计算了邻接关系和转发表。在收敛期间,它们无法正确转发数据包。[1][2][4]

邻接关系和转发并非抽象的后台进程。路由邻接关系确定了哪些网络设备交换可达性信息。控制平面利用这些信息和策略来选择路径。转发平面安装条目,告诉路由器把数据包发送到哪里。如果一次变更导致大量路由器重新计算这些关系和条目,影响就可能远远超出第一台设备。

Microsoft 描述的结果正是沿着这一机制发生的。互联网上的客户端到 Azure 的连接受到影响。区域间服务连接受到影响。ExpressRoute 连接受到影响。Microsoft 365 和 Power Platform 也受到影响。[1][2][4][6]

这种广泛性并不意味着每个服务都有完全相同的故障或持续时长。它意味着 WAN 处于多条服务路径之下。共享的路由基底可以把一次网络变更变成看似不相关的应用症状,因为各项服务都依赖同一个互联、骨干和区域可达性。

当前 Microsoft 全球网络文档有助于解释这种依赖面。Microsoft 描述了一个连接数据中心的私有全球 WAN,通过自身骨干承载流量,并与外部网络互联。ExpressRoute 通过路由关系提供进入 Microsoft 服务的私有连接,而 Azure 区域和服务则依赖提供商的网络交换流量。[7]-[10]

这些当前描述不应被反向解读为 2023 年事件的完整地图。它们确实说明了为什么 WAN 控制可能带来跨服务后果。如果骨干无法正确转发数据包,一个健康的应用进程仍可能无法访问。如果区域间连接降级,分布式服务即使单个主机仍在运行,也可能失去依赖。如果 ExpressRoute 路径经过受影响的控制域,私有电路即使避开了公共互联网,也可能受到影响。

这就是为什么本文论点不能在移除网络事实后仍然成立。该事件不是关于变更管理的泛泛教训,路由器也不是装饰。命令、邻接重计算、转发表状态、路由波动、丢包、区域间路径和 ExpressRoute 边界才是因果和证据的核心。

外部 BGP 观测提供了第二个证据平面

Microsoft 控制着内部变更记录和路由器遥测。独立观察者控制着另一种证据:从私有网络外部可见的路由变化和连接影响。

ThousandEyes 报告称,从 07:10 UTC 之后不久开始,与 Microsoft 的 AS8075 相关的前缀出现了大量 BGP 路由变化。它观测到路由撤销后重新宣告、涉及直连路径和转接提供商的反复变化,以及随路由活动上升的丢包。在事件的部分时段,一些观测位置出现了完全丢包。[3]

这些证据之所以有价值,是因为它并非由 Microsoft 的事件叙述生成。它表明路由不稳定和可达性丢失在独立观测点上是可见的。它还使广泛的网络机制变得可检验。声称 WAN 路由事件影响了外部连接,应当与运营商管理域之外的路由和数据包观测保持一致。

独立证据仍然需要有边界。BGP 观察者看到的是到达其采集器或代理的更新。它看不到每一条私有邻接、每一条内部路由、每一个转发表条目或导致这些变化的命令。它可能观察到某条路由被撤销,却不知道是源路由器删除了该路由、中间策略抑制了它,还是另一个内部事件改变了导出内容。

同样,时间相关性也不等同于完整的因果重建。ThousandEyes 在事件前后看到了路由变化和丢包。Microsoft 的解释提供了命令和 WAN 收敛的内部说明。两种记录相互一致,但不应让任何一方去证明另一方的证据。

一份负责任的故障报告应当明确地调和这两个平面:

  • 哪些内部路由或邻接变化产生了每次外部观察到的路由撤销?
  • 哪些前缀受到影响,又有哪些服务依赖它们?
  • 哪些直连对等路径消失,哪些转接路径成了替代?
  • 流量是否转移到了容量不足或转发不稳定的路径上?
  • 哪个内部稳定事件对应于外部稳定路由的恢复?
  • 是否存在公共 BGP 数据无法看到的内部可达性故障?
  • 外部探针是否在每一项 Microsoft 服务恢复之前就宣布了恢复?

公开时间线表明,路由稳定和服务恢复并不是同一事件。ThousandEyes 报告称在 08:10 前后出现了大规模稳定,之后也观察到 BGP 活动。Microsoft 称自动恢复在 08:10 后不久开始,大多数受影响服务在约 09:00 恢复,网络设备在 09:35 稳定,剩余的 Microsoft 365 服务在 12:43 恢复。[1][3][4]

这种差异并不矛盾。恢复路由可能是必要的,但不足以实现完整的服务恢复。连接可能需要重试。缓存和队列可能需要排空。依赖服务可能需要重新建立会话或修复状态。负责任的记录应显示网络恢复何时结束、服务恢复何时仍在继续。

BGP 路由震荡能把冗余变成不稳定

冗余路径是互联网和云网络设计的基础。如果直连路径消失,可能通过转接提供商获得另一条路径。但冗余并不保证快速、反复的路径变化一定无害。

ThousandEyes 描述了主要影响直连对等体的路由撤销,随后使用替代路径,然后又重新宣告更短的直连路径。反复变化产生了路由震荡。[3] 每次变化都可能导致路由器重新考虑所选路由。流量可能在容量、延迟、策略和故障暴露不同的路径之间移动。当转发状态追赶控制平面决策时,数据包可能会丢失。

BGP 规范定义了发言者如何交换可达性信息并撤销路由。它并不承诺整个互联网瞬时、同步地收敛。运营商在本地选择策略,在不同时间收到更新,并按各自的节奏安装转发变更。[18]

这意味着备用路径并不是等待接收流量的静态备用车道。它是分布式控制系统的一部分。当大量路由快速变化时,转接路径可能突然承受负载。直连对等体可能在所有设备就同一最佳路径达成一致之前消失又恢复。一些网络可能保留其他网络已经撤销的路由。应用连接在过渡期间可能跨越不同状态。

RFC 7454 等运营指南强调有纪律的路由策略和过滤。RFC 8326 描述了旨在计划性 BGP 维护前排空流量的优雅关闭机制。这两项标准都不是对 Microsoft 内部事件的直接处方,公开记录也未说明使用了哪些机制。但它们确立了一个有用的控制原则:维护应当以刻意、可观测的方式移动流量,而不是放任一波不受控制的路由撤销和重新宣告。[19][20]

对于全球 WAN 变更,相关的不变量不仅仅是“存在另一条路径”。更强的要求集应当询问:

  • 必需的前缀是否至少通过一条经验证的路径保持可达?
  • 替代路径是否有足够容量承受预期的流量转移?
  • 路径变化频率是否低于安全阈值?
  • 转发条目是否在测试过的时间间隔内完成收敛?
  • 直连对等和转接变化是否对独立探针可见?
  • 发布能否在同一命令影响下一个传播域之前暂停?
  • 服务路由变化时,管理访问是否仍然可用?

冗余是一种设计声明。运营证明在于流量能否在确切发生的故障和变更条件下使用冗余路径。

全球规模改变了爆炸半径的含义

应用到一台路由器的命令可能看起来是局部的。一条导致大量路由器重新计算状态的协议消息则不是局部的。问责边界必须跟随传播域,而不是输入发起命令的键盘或设备。

Microsoft 的公开解释称,该命令向其他 WAN 路由器发送了消息。[4] 这一声明使传播成为变更的一等属性。在批准之前,运营商应当知道哪些设备可能做出反应、它们将重新计算什么状态,以及如何停止这种反应。

在全球骨干中,爆炸半径有多个维度:

  • 设备范围:接收或解释该变更的路由器和软件版本。
  • 协议范围:受影响的邻接关系、路由反射器、对等体和控制会话。
  • 前缀范围:可能被撤销、替换或作出不同选择的可达性条目。
  • 流量范围:使用这些条目的客户、服务、区域间和管理流量。
  • 地理范围:共享控制域的区域和互联点。
  • 恢复范围:恢复稳定状态所需的系统和运营人员。

一次变更可能在设备数量上很小,但在协议范围上很大。它可能只触及一个配置对象,却改变了数千条选定的路径。它可能在发起路由器上可逆,却让网络的其余部分继续重新收敛。

这就产生了受限执行的要求。安全的系统应当能够将候选方案应用到具有代表性但受限的域,观察路由和可达性不变量,并在消息全球传播之前停止。金丝雀测试必须与其生产目标具备相同的命令语义和网络角色。一台通用实验室路由器或非代表性的边缘设备是不够的。

金丝雀测试还需要与系统收敛行为相关的持续时间。如果路由问题只在消息到达更广泛的设备群体后才出现,那么对本地命令成功进行五秒钟检查几乎证明不了什么。观测窗口应包括邻接变化、路由分发、转发安装、流量探针以及任何延迟的自动化响应。

最强的设计应当让爆炸半径限制可以强制执行,而非仅作建议。部署控制器应当知道每个阶段允许的设备集合和路由范围。它应拒绝接收者超出边界的命令。它应要求提供明确证据后方可推进。独立控制器可以在不变量失败时撤回授权或触发回滚。

公开材料没有显示此类控制是否存在,也没有显示事件后它们如何变化。它确实说明了为什么全球 WAN 不能把命令范围当作运营商预期的问题。

监测先看到了症状,后才识别出网络故障

Microsoft 的说明表明,早期调查先考虑了 DNS,之后才确认 WAN 是源头。[4] 不应对这一顺序作耸人听闻的解读。DNS 超时可能伴随大范围可达性问题出现,响应人员合理地测试多个假设。有用的问题是,可观测性能否快速区分症状与机制。

从用户角度看,DNS 查询失败、HTTP 超时和身份验证失败看起来都像服务不可用。从运营商角度看,它们发生在不同层,需要不同的恢复权限。如果网络正在丢包,应用层告警可能越来越多,却无法识别共同原因。

当前 Microsoft 文档描述了 Network Watcher 和 Connection Monitor 等工具,它们可以收集连接、可达性、拓扑和诊断证据。[12]-[15] 这些能力说明分层监测设计可以保留什么。它们并不能证明同样的工具、配置或告警覆盖了 2023 年 1 月的路径。

一套有用的事件证据集应当按层对齐信号:

  1. 变更控制器事件,显示确切的命令和目标。
  2. 路由器日志,显示消息生成和邻接变化。
  3. 路由信息,显示选定和撤销的路径。
  4. 转发证据,显示已安装的下一跳。
  5. 跨越互联网、区域间和 ExpressRoute 路径的主动探针。
  6. DNS 和应用事务,显示客户可见的症状。
  7. 服务依赖数据,显示哪些故障共享同一条网络路径。

目标不是消除假设检验,而是让常见的网络故障在每一项依赖服务都单独开立事件之前变得可读。如果路由震荡、邻接重计算和丢包与 DNS 和 HTTP 超时同时上升,响应系统就应当能够把它们联系起来。

监测还需要独立于受影响的路径。一个只能通过出故障的 WAN 访问的仪表板,在最需要时可能消失。共享同一路由域的探针可能互相印证彼此的盲点。外部 BGP 观察者、网络外的合成客户端、独立的管理连接和提供商内部遥测各自覆盖不同的局限。

问责不仅要问告警是否触发,还要问告警能证明什么。DNS 超时证明一次事务失败。BGP 路由撤销证明观测点上一次观测到的路由更新。转发表快照证明设备上已安装的状态。完整的解释需要把这些记录连接起来,而不是把其中一项当作其他所有项的替代。

ExpressRoute 显示责任在哪里转移、在哪里不转移

ExpressRoute 通过连接提供商和 Microsoft 边缘位置为客户提供到 Microsoft 云服务的私有连接。它使用 BGP 交换路由。Microsoft 建议采用冗余电路、多样化的位置和有弹性的客户架构。[8]-[11]

这些控制很重要。依赖单条电路、单个对等位置、单个提供商或单台本地路由器的客户,会形成本可避免的集中风险。客户可以监测其会话、验证通告的路由、测试故障切换,并设计应用以容忍路径丢失。

但客户冗余并不会转移 Microsoft 全球 WAN 变更的控制权。客户没有选择那条命令,没有在 Microsoft 的路由器群体上验证其行为,没有决定哪些 WAN 设备收到消息,也没有控制内部收敛。他们无法检查每一个 Microsoft 转发表,也无法叫停提供商的发布。

这条边界防止了两个相反的错误。第一个是把云提供商视为对每一项客户后果负责,包括客户自有架构中的故障。第二个是利用客户弹性指引为一个由提供商控制的共模事件开脱。

责任可以按控制来映射:

角色控制应提供的证据
Microsoft 网络运营商WAN 命令验证、设备清单、传播范围、内部路由、骨干恢复确切的候选状态、设备/版本覆盖、路由不变量、金丝雀结果、回滚日志、恢复时间线
连接提供商客户电路、对等边缘、路由交付、本地故障切换电路和会话日志、路由变化、容量和故障切换结果
客户网络团队电路多样性、本地路由、依赖映射、应用故障切换冗余设计、已测试的故障模式、本地 BGP 和可达性记录
独立观察者外部路由和数据包测量观测点范围、时间戳、方法、观测到的局限

该表不分配法律责任。它让事实责任与运营权限保持一致。

1 月的事件还表明,为什么名义上的路径多样性必须针对提供商共模进行测试。两条客户电路可能终止于不同的物理位置,却依赖同一个 Microsoft 骨干控制。公共互联网回退仍可能通过同一个受影响的 WAN 到达服务。真正的韧性需要知道这些路径不共享哪些故障。

Microsoft 的高可用性指引对设计客户侧很有用。[9] 事件记录对评估提供商侧是必要的。两者都需要,两者都不应该被用来抹去对方。

设备验证应当是一套持续维护的证据系统

一次性实验室测试对异构路由器群体是不够的。设备群体在变化。软件在升级。线卡、功能、策略模板和拓扑角色都在演进。在某个版本上证明过的命令,在生产设备集合变化后可能不再被证明。

公开解释称命令行为因设备而异,这提出了一个具体的证据请求:哪份矩阵把命令语义与型号、软件、功能和角色联系起来?

这份矩阵不应是脱离部署的静态表格。它应由当前清单生成,并与变更绑定。对每个目标,它应当标识:

  • 硬件家族和相关的转发组件。
  • 网络操作系统版本和补丁级别。
  • 已启用的功能集和配置解析器行为。
  • 路由角色、对等体数量和路由规模。
  • 预期的命令展开和状态转换。
  • 使用相同特征的实验室或预生产证据。
  • 已知的例外和被阻止的组合。
  • 验证结果的日期和负责人。

当目标没有当前证据时,部署控制器应当默认拒绝。运营商不应仅凭继续执行就把“未知”转换为“兼容”。如果必须紧急执行,例外应当明确、范围窄、有时间限制,并伴随更小的爆炸半径和更强的观测。

Microsoft 据报告称将阻止高影响命令并制定安全执行指南。[4] 当被禁止的命令类别精确,且执行点无法被随意绕过时,阻止是有价值的。指南则较弱,因为它们依赖解释和遵守。

因此,有用的后续问题是运营层面的:

  • 哪些命令模式被阻止了?
  • 在哪一层被阻止:客户端、自动化控制器、设备还是授权服务?
  • 别名、模板、API 和供应商特定变体是否覆盖?
  • 紧急访问能否绕过阻止,谁来批准?
  • 阻止是否考虑拓扑和接收者数量?
  • 软件升级后如何测试该控制?
  • 哪些证据表明被阻止的命令无法通过其他路径到达生产环境?

公开记录没有回答这些问题。提出这些问题并不意味着 Microsoft 没有采取行动。它定义了把补救声明转化为可验证运营证据需要什么。

路由不变量让预期现实可测试

变更系统通常验证语法和配置差异。语法有效的命令仍可能违反网络的用途。路由不变量用系统可以测试的术语表达这种用途。

对于这次事件,不变量至少可以覆盖四个层。

邻接不变量应说明哪些关键对等关系必须保持建立,哪些计划性重置被允许,以及同时丢失多少是可以接受的。超出批准集合的大范围重计算应停止变更。

路由不变量应标识必需的前缀、源和下一跳预期、允许的路径变化以及最大撤销数量。它们应检测可达性何时超出了预期的 IP 地址更新范围。

转发不变量应测试路由器是否安装了可用的下一跳,以及有代表性的数据包能否通过这些下一跳。如果转发状态缺失或不一致,仅控制平面达成一致是不够的。

服务路径不变量应探测互联网到 Azure、区域间、Microsoft 服务、管理和 ExpressRoute 路径。它们把路由器状态与客户实际使用的依赖连接起来。

不变量集合需要归属和来源。如果服务团队创建新依赖却不更新关键路由清单,这份清单就会过时。如果探针只测试健康路径,就会产生误导。如果地址被转移或路由角色改变却没有更新台账,预期前缀记录就会变得危险。

这正是注册库纪律支撑运营的地方,但它并不假装治理现实。准确的标识符、前缀记录、ASN 关系、路由角色和所有权元数据帮助运营商定义应当存在什么。它们不会让路由可达。运行中的代码和观察到的数据包交付仍然是决定性的一层。

一个负责任的系统把预期台账与多个观测进行比较。它检查配置输出、路由信息、转发条目、主动探针和外部路由视图。不匹配并不自动证明发生了事件,但它是停止高影响发布的理由,直到差异被理解为止。

同样的模型也改善事后评审。报告不必只说“网络已恢复”,而可以显示哪些不变量失败、各项何时恢复正常、哪些仍不确定。这让恢复可审计,也让未来的回归测试变得具体。

有代表性的金丝雀测试必须走通传播路径

金丝雀部署常被描述为把变更应用到少量目标。少量是有用的,但代表性更重要。一个无法表现出相关故障的金丝雀,即使保持健康,也只能提供很弱的保证。

对于依赖设备的 WAN 命令,有代表性的金丝雀必须匹配生产目标的命令语义、软件家族、路由角色、对等关系和传播行为。它还必须足够隔离,使一次故障不会触发金丝雀本应检测的那场全球重计算。

这种组合很难实现。如果命令的危险效果只在消息到达大量路由器时才出现,单台隔离设备可能无法复现它。解决办法不是放弃预发布环境,而是构建一个能复现相关图结构、同时限制外部后果的测试环境或受限生产域。

一个强有力的序列可以是:

  1. 渲染并根据清单静态分析确切命令。
  2. 在代表性实验室或网络仿真环境中回放该命令。
  3. 确认预期的邻接、路由和转发变化。
  4. 在一个具有独立管理访问的受限生产域中应用它。
  5. 在整个收敛和稳定间隔内进行观测。
  6. 将内部状态与外部路由和可达性探针进行比较。
  7. 只有在明确证据通过后才推进到下一个域。

当前 Microsoft 文档在其全球网络工程部分描述了网络仿真和监测概念,也描述了面向客户的诊断工具。[7][12]-[15] 这些材料表明存在可以支持上述序列的机制。它们不能确定 2023 年的确切工作流。

金丝雀记录应包括失败标准和成功标准。多少次路由撤销会停止发布?预期出现什么邻接变化?可容忍多少丢包?收敛可以持续多久才回滚?谁可以宣布某个指标具有误导性?

没有预先定义的标准,响应者可能把警告合理化为正常收敛,直到爆炸半径扩大。有了标准,当现实偏离已批准模型时,停止就是默认结果。

回滚必须考虑分布式状态

回滚一次网络变更并不总等同于撤销一台设备上的一行配置。其他路由器可能已经收到消息、重计算路径、安装转发条目、转移流量并触发自动化。恢复发起配置是必要的,但网络仍须收敛到稳定状态。

Microsoft 称,在其确认最近的 WAN 变更是根本原因时,自动恢复已经开始,恢复行动在 08:10 UTC 后不久启动。[1][3][4] 公开记录没有披露每一个回滚步骤。这一局限很重要,因为恢复证据应当区分命令逆转、路由稳定和服务恢复。

可验证的回滚计划应当回答:

  • 逆转的是哪项配置或命令?
  • 哪些设备收到了依赖状态,必须重新收敛?
  • 权威的期望状态是什么?
  • 运营商如何防止相互竞争的补救行动?
  • 哪些路由、转发和可达性检查宣告恢复?
  • 回滚能否通过独立于受影响 WAN 的管理路径进行?
  • 如何把残余的服务影响与持续的网络故障分开?
  • 事件何时可以安全关闭?

自动化可以减少延迟,但前提是其触发条件和范围可信。仅基于命令退出状态的自动回滚可能漏掉路由故障。基于应用错误率的回滚可能反应过晚或针对无关问题。复合触发条件可以把确切的预期网络变化与受保护的不变量进行比较。

恢复记录还应保留因果顺序。如果路由在 08:10 前后稳定,大多数服务在 09:00 左右恢复,设备在 09:35 稳定,一些 Microsoft 365 影响持续到 12:43,那么单一“已解决”时间戳会隐藏有用的区别。[1][3][4]

这些区别帮助运营商测试未来的演练。他们可以测量检测网络机制所需的时间、停止传播的时间、恢复路由稳定的时间、恢复转发的时间以及清除依赖服务影响的时间。改善一个指标并不自动改善其他指标。

因此,回滚是一个控制系统,不是按钮。其可信度取决于保留的证据,证明分布式网络已恢复到预期的运营现实。

公开测量应当被调和,而不是当装饰

事件报告常常在事后引用外部测量。更有力的用法是把独立观测整合到变更和恢复决策中。

对于面向互联网的网络,外部 BGP 数据可以揭示路由撤销、重新宣告、路径变化以及对等体之间的差异。主动探针可以显示来自多个网络的丢包、延迟、DNS 结果和应用可达性。这些信号不替代内部遥测,但覆盖了运营商自身观测点可能遗漏的部分。

1 月的事件说明了为什么两者都需要。Microsoft 可以看到内部设备状态。ThousandEyes 可以看到 Microsoft 外部的路由和数据包影响。[3] 客户或对等体可能看到第三个边界。没有任何单一观测点能定义整个网络。

调和应保留时间戳、范围和不确定性。一台路由器上的内部路由变化可能先于外部路由撤销。采集器可能在中间策略延迟之后才收到更新。数据包探针可能在路由正式撤销之前就失败,因为转发已经不一致。另一个探针可能通过仍然可用的路径继续成功。

因此,证据系统应当避免把每个信号都强行塞进一条过于简单的时间线。它应保留:

  • 原始时间戳和时钟源。
  • 观测点身份和网络。
  • 观测到的前缀、对等体和路径。
  • 控制平面与转发平面的分类。
  • 置信度和已知盲点。
  • 与被认为对应的变更和恢复行动的链接。

外部观察者的商业分析并非中立全知。它有覆盖选择和方法局限。运营商仪表盘也是如此。当每个来源都说明它测量了什么,并且报告检验它们之间的一致和不一致时,问责就会改善。

这也有助于防止过度声称。公共 BGP 路由震荡不能证明每条 Azure 私有路径都失败了。来自某个网络的成功探针不能反驳别处的故障。全球服务标签并不意味着影响均匀。当记录让这些局限保持可见时,它就更可信。

RPKI 本不会验证这条命令

看到 BGP 路由震荡,人们可能自动建议使用 RPKI。这会把两个不同的控制问题混为一谈。

RPKI 和路由源验证帮助网络评估某个自治系统是否有权发起一个前缀。它们是防止未授权或错误源的重要保护。按照公开描述,这次事件涉及 Microsoft WAN 内部的一次计划变更、依赖设备的命令行为和广泛的路由收敛。现有证据并未说明某个未授权 AS 发起了 Microsoft 的前缀。

源可能有效,但路由在运营上仍然错误。某个前缀可能由已授权的 AS 宣告,却通过非预期的策略、在错误的范围内,或在不稳定收敛期间宣告。RPKI 不验证内部命令、每一条邻接、选定的下一跳、转发表安装、金丝雀设计或回滚序列。

这条边界并不让注册库和授权数据变得无关。准确的前缀和 ASN 记录有助于定义预期的源,并检测另一类错误。它们应成为不变量集合的一部分。但它们不能被拔高为网络连续性的证明。

这一区别反映了一个更广泛的运营原则。记录确立身份、授权和预期关系。运行中的路由器确立可达性。前者可以约束并审计后者,但并不对后者拥有主权。数据包交付遵循已安装的状态。

因此,对于 1 月的事件,优先控制是设备验证、命令范围、路由和转发不变量、受限传播、外部观测和回滚。RPKI 仍是一项相邻控制,而不是证据所指出的缺失修复。

这种精确性对公共问责很重要。泛泛的建议可以让文章听起来技术上内行,却回避了实际故障。只有当补救措施针对记录所支持的机制时,它才是有用的。

当前文档是控制声明,不是历史证明

Microsoft 当前的网络文档描述了全球骨干、直接互联、ExpressRoute 弹性、Network Watcher、Connection Monitor 和监测设计。[7]-[17] 这些材料有助于理解架构以及运营商和客户可用的工具。

它们不是时间机器。2023 年 1 月之后更新的页面不能证明事件发生时存在什么配置、工作流或执行措施。它也不能证明某个所述流程在每台设备上持续运行。

这一区别应塑造补救措施的评估方式。公开文档可以回答:

  • Microsoft 当前描述了哪些设计?
  • 当前有哪些监测和弹性功能可用?
  • Microsoft 把哪些责任分配给客户?
  • 可以使用哪些证据机制?

它本身无法回答:

  • 受影响的路径由器上那条确切的 WAN 命令是否经过测试?
  • 哪些设备收到了传播的消息?
  • 发布前检查了哪些路由不变量?
  • 补救后是否有自动阻止防止了类似命令?
  • Microsoft 是否在代表性条件下演练过回滚?

持久修复的证据需要更接近运营的工件:策略即代码测试、被阻止命令日志、验证矩阵、金丝雀记录、合成探针历史、回滚演练和事件复发数据。其中一些可能具有商业或安全敏感性。保密可以证明脱敏合理,但不能把通用架构页面变成证明。

运营商可以在不暴露可利用细节的情况下发布聚合证据。它可以报告已验证设备家族的覆盖率、被阻止的高影响命令类别数量、允许的最大传播域、回滚演练频率,以及独立探针是否确认了每一次重大变更。这些度量应当有定义和留存的审计记录。

同样的纪律也适用于面向客户的声明。服务可能提供冗余路由和监测功能,但客户仍需要测试其购买的路径。文档描述能力。运营证据显示该能力是否保护了某个特定依赖。

问责跟随控制、证据和修复

把一次重大中断简化为责备是诱人的。公开证据支持一种更有用的分配。

Microsoft 控制了计划的 WAN 变更、路由器清单、命令执行、内部消息、传播边界、监测、恢复和公开事件解释。这种控制创造了一种责任:验证行为、约束范围、保留证据并核实修复。

路由器供应商控制了产品语义和文档,但公开记录没有指明供应商,也没有确立产品缺陷。任何供应商过错的断言都无根据。

连接提供商控制了其客户电路和互联边缘。客户控制了自己的路由、冗余、依赖映射和应用故障切换。这些控制影响后果和恢复选项,但它们没有引发或支配 Microsoft 的内部命令。

独立观察者控制了自己的测量系统。他们的责任是方法清晰:在哪里测量、看到了什么、不能推断什么。

问责也包括修复。可信的修复不仅仅是另一次公开事故的缺席。它是证明故障类别已被约束的证据。对于本案,这意味着表明:

  1. 依赖设备的命令行为已被编目和测试。
  2. 高影响命令已被技术性阻止或严格授权。
  3. 没有通过的证据,传播不能超过定义的域。
  4. 必需的路由和可达性经过机器检查。
  5. 外部观测是验收和恢复的一部分。
  6. 回滚恢复的是分布式状态,而不仅仅是第一台设备。
  7. 演练证明在设备群体变化后控制仍然有效。

公开记录支持提出这些证明要求。它不支持宣称 Microsoft 忽视了它们、隐瞒了事件、违反了法律或存在疏忽。

这种有边界的方法不是宽容。它比修辞性的责备更严格,因为每一项发现和补救声明都必须落实到行动者、控制、留存记录和可观测结果。

下一次全球 WAN 变更的证据表

下表把事件转化为可检查的记录。它并不声称 Microsoft 缺少每一项。它指出什么才能证明控制存在。

控制留存记录观测到的运营结果未解决的局限
变更授权已批准的目标、确切范围、负责人、时间窗口只有预期目标进入执行批准不能证明命令语义
已渲染的命令确切的命令或候选配置及哈希部署的字节与评审的字节一致一致仍可能不安全
设备验证型号、软件、角色、功能和测试矩阵每个目标都有当前的兼容证据实验室规模可能不同于生产
传播边界允许的接收者和邻接图消息保持在金丝雀域内隐藏依赖可能跨越边界
路由不变量必需的前缀、路径和撤销阈值没有未批准的路由丢失或震荡内部路由可能缺乏外部可见性
转发不变量下一跳和数据包交付检查代表性数据包使用有效的转发条目样本不能覆盖所有流量
外部 BGP 观测带时间戳的撤销、宣告和路径公共路由保持稳定或恢复采集器覆盖不完整
端到端探针互联网、区域间、ExpressRoute、DNS 和 HTTP 测试服务路径达到定义的成功阈值探针可能漏掉客户特定路径
自动停止触发器、决策日志和目标状态发布在更广传播之前停止错误的阈值可能停止得太晚
回滚权威的期望状态和行动日志邻接、路由、转发和探针恢复服务修复可能在其之后继续
独立管理带外可达性测试运营商在 WAN 故障期间保持控制独立访问可能共享另一依赖
补救后演练场景、预期故障、结果、负责人同样的故障类别被遏制一次演练不能证明持续合规

该表把记录与结果分开。文档证明控制被规定过。运营观测证明执行期间发生了什么。两者都是必要的。

它还保留了未解决的局限。当证据系统把部分测量呈现为完全确定时,就会产生误导。路由采集器看不到每一条私有的路由。金丝雀代表不了每条客户路径。一次成功的回滚演练可能在升级后过时。指出局限就创造了下一项测试。

有边界的核查议程

该事件可以支撑一组具体的问题,而无需猜测。

命令语义

  • 哪条确切命令在不同设备上行为不同?
  • 哪些硬件、软件、角色或配置上下文可以解释差异?
  • 候选命令是否以与执行时相同的形式被评审?
  • 哪项当前控制防止未经验证的变体进入生产环境?

传播

  • 哪些路由器收到了来自发起变更的消息?
  • 预期的接收者集合是什么?
  • 预期哪些邻接和转发重计算?
  • 现在有什么技术边界限制同类变更?

路由和转发状态

  • 哪些前缀和路径发生了变化?
  • 哪些路由不变量本可以检测到偏离?
  • 转发何时变得不一致,何时稳定?
  • 内部观测如何与外部 BGP 路由震荡调和?

可达性

  • 哪些互联网、区域间、ExpressRoute 和管理路径发生了故障?
  • 哪些探针继续工作,为什么?
  • 替代路径是否有足够容量?
  • 哪些证据把 DNS 症状与 WAN 故障区分开来?

恢复

  • 哪些行动启动了自动恢复?
  • 发起命令逆转后,哪些系统必须重新收敛?
  • 宣布网络设备稳定的标准是什么?
  • 为什么一些服务影响在大规模路由稳定之后仍然持续?

持久性

  • 高影响命令是被技术性阻止,还是仅受指南约束?
  • 设备验证矩阵多久刷新一次?
  • 最近一次是什么时候针对代表性拓扑演练回滚?
  • 哪些聚合证据可以在不暴露敏感配置的情况下证明持续执行?

这些问题足够窄,可以回答;也足够强,可以改变实践。它们关注运行中的网络现实,而不是泛泛的弹性承诺。

结论

Microsoft 2023 年 1 月的中断显示,当命令语义、设备多样性、传播和收敛没有受到经过验证的状态约束时,一次常规 WAN 维护目标可以如何演变成全球基础设施事件。

证据之所以特别有启发性,是因为它来自两个平面。Microsoft 的说明把事件与一次计划的路由器地址变更、依赖设备的命令行为、发往其他 WAN 路由器的消息、邻接和转发重计算以及数据包转发失败联系起来。ThousandEyes 独立观测到 Microsoft 网络周围的 BGP 路由撤销、重新宣告、路径震荡和丢包。[1]-[4]

两份记录都不完整。它们合在一起定义了一个问责标准。

变更工单应当绑定到路由器将执行的确切命令。验证应当覆盖生产设备和软件群体。金丝雀测试应当走通相关拓扑,同时限制传播。路由、转发和服务路径不变量应当在现实偏离意图时停止发布。独立观察者应当测试离开运营商域的内容。回滚应当恢复分布式状态,并保留从路由恢复到服务恢复的时间线。

准确的网络记录很重要。前缀、AS 关系、设备清单、拓扑、命令来源和预期路由使系统可测试。它们不能通过声明控制数据包交付。运行中的配置和由此产生的转发状态仍然是决定性的。

这就是问责的核心教训。控制命令和传播域的运营商必须提供证据,证明网络按批准的方式运行,而不仅仅是变更经过了计划。客户和提供商在自己的控制范围内保留责任,但他们无法验证或阻止云运营商的私有骨干命令。标准和 RPKI 可以约束邻近风险,但无法验证特定于设备的执行路径。

因此,最强的修复不是更广泛地承诺小心行事。它是一条当前可审计的链:从意图到渲染的命令、代表性验证、受限传播、观测到的路由状态、独立可达性、受控回滚和反复演练。缺少这些,下一次全球 WAN 变更将会更多由预期而非证明来支配。

来源局限

这里使用的面向 Microsoft 365 客户的报告自称是初步报告,并请读者查阅 Azure 状态历史中相关的 WAN 事件。Microsoft 的状态页面是动态的,历史细节可能需要跟踪标识符。当时报道总结了 Microsoft 后来的公开解释,但不能替代内部变更记录。[1][2][4]

ThousandEyes 根据自身的测量覆盖提供独立的路由和数据包观测。其 BGP 视图无法确定每一条私有的 Microsoft 路由、命令、邻接、转发条目或客户路径。[3]

当前 Microsoft Learn 页面描述的是阅读时的架构和可用能力。它们不能证明 2023 年 1 月 25 日控制措施的确切状态,也不能证明之后的持续执行。[7]-[17]

公开记录没有披露确切的命令、完整的设备和软件清单、完整的受影响前缀集、所有内部日志、客户特定损失、合同抵免、监管结论、恶意意图、疏忽或供应商过错。本文不作任何此类声明。

来源

  1. https://content.mailplus.nl/m18/docs/user318000551/1126/Post_Incident_Report_Microsoft_verstoring_25_01_23__MO502273___VSG1_B90_.pdf
  2. https://azure.status.microsoft/en-us/status/history/?q=VSG1-B90
  3. https://www.thousandeyes.com/blog/microsoft-outage-analysis-january-25-2023
  4. https://www.theregister.com/2023/01/30/microsoft_blames_router_ip_address_change/
  5. https://www.networkworld.com/article/971873/global-microsoft-cloud-service-outage-traced-to-rapid-bgp-router-updates.html
  6. https://techcrunch.com/2023/01/25/microsoft-teams-outlook-service-outage/
  7. https://learn.microsoft.com/en-us/azure/networking/microsoft-global-network
  8. https://learn.microsoft.com/en-us/azure/expressroute/expressroute-introduction
  9. https://learn.microsoft.com/en-us/azure/expressroute/designing-for-high-availability-with-expressroute
  10. https://learn.microsoft.com/en-us/azure/expressroute/expressroute-routing
  11. https://learn.microsoft.com/en-us/azure/expressroute/expressroute-troubleshooting-expressroute-overview
  12. https://learn.microsoft.com/en-us/azure/network-watcher/connection-monitor-overview
  13. https://learn.microsoft.com/en-us/azure/network-watcher/
  14. https://learn.microsoft.com/en-us/azure/networking/networking-overview
  15. https://learn.microsoft.com/en-us/azure/networking/design-guide/monitor
  16. https://learn.microsoft.com/en-us/azure/virtual-wan/virtual-wan-about
  17. https://learn.microsoft.com/en-us/azure/virtual-wan/about-virtual-hub-routing
  18. https://www.rfc-editor.org/rfc/rfc4271
  19. https://www.rfc-editor.org/rfc/rfc7454
  20. https://www.rfc-editor.org/rfc/rfc8326