此前报道的《我院 Soha 与 twd2 院士为全网基础设施做出贡献》中提到,我院常务副院长(正院级)、网络学部院士 Soha 与院长、网络学部院士 twd2 对 BIRD 的 OSPF 实现的一个 bug 进行了修复,近日已随 BIRD 2.15 的发布而上线。
不多时就有用户在邮件列表中提到遇到了问题,Soha 当时提出了一个临时解决方案并进行了修复,重新发送 patch 1 个[1]。该问题触发于 ECMP 环境中,因为 Linux 内核不支持 IPv6 下的仅有 device 路由的多路径设置,造成路由不能被写入 FIB。该用户当时在解决此问题后又发现一个新问题,但当时 Soha 院士由于私人行程,并未进行 debug。一周后此问题被第二次挖出来,Soha 继续进行 debug。
第二个问题属于严重影响使用的问题,BIRD 在对非邻接顶点解析下一跳的时候仅判断两个继承条件:网关地址不为空、网关地址和下一跳接口均为空(用于虚拟链路)。此前的 patch 使得仅有下一跳接口变成可能,因此在解析最优路径经过使用点对点接口连接的顶点的下一跳时会因为上面的条件而判断为不继承。而不继承的情况下也没有别的方法可以找到下一跳了,最后进入了 Unexpected case in next hop calculation
。Soha 院士随即与此前通读 OSPFv2/OSPFv3 有关的 RFC 的 twd2 院士一同分析 RFC 中所述算法,并在 BIRD 中提交了修复[2]。
这两个问题都因为此前的 patch 允许了直接使用点对点接口而触发,并且只要网络中有一台使用着 BIRD 2.15 与点对点链路的路由器,就会导致经过的路由在该路由器上解析不了下一跳而 100%丢包。如果 BGP 协议依赖作为 IGP 的 OSPF 进行下一跳解析,那么还会进一步影响网络之间的互联。BIRD 是世界上流行的 Linux 下的路由协议软件之一,综上,我院 Soha 院士与 twd2 院士此次摧毁了全球互联网。我院对此深表歉意。
BIRD 项目维护者 Ondřej Zajíček 此前在 review 中也没有发现这一系列问题,毕竟有关代码已是 13 年前写成。在收到相关问题报告后,他决定[3]先临时 revert 有关 commit,发布一个修复版本,并将在重新 review 后视情况合并针对本次两个问题提交的 patch。
[1]: https://bird.network.cz/pipermail/bird-users/2024-March/017475.html
[2]: https://bird.network.cz/pipermail/bird-users/2024-March/017504.html
[3]: https://bird.network.cz/pipermail/bird-users/2024-March/017508.html