摘要

  • BGP 会话恢复到 Established 后,Router B 仍连续 121 秒没有 IPv4 或 IPv6 前缀。
  • Marian Rychtecký 将 End-of-RIB 延迟追到一条被截断的 IPv6 对端地址;它触发了 TCP 重置。

会话状态显示 Established,路由表却是空的。Marian Rychtecký 在 NANOG 98 分享的故障从这组矛盾开始:防火墙高可用升级触发切换,BGP 会话回来了,路由没有回来。Router B 的 RIB 连续 121 秒没有 IPv4 和 IPv6 前缀。流量仍被送往防火墙,但防火墙缺少预期路由,无法继续通告它们。结果不是平滑交接,而是接近两分钟的黑洞。

团队启用 BGP Graceful Restart,是想让切换不打断服务。这个机制旨在减轻重启造成的路由波动:若转发状态得到保留,对端可以暂时保留标记为陈旧的路由,等新通告到达后再替换。End-of-RIB 表示某个地址族的初始更新已经结束。这些标记说明路由交换进行到哪里,并不能证明防火墙此刻仍能转发抵达它的流量。

时间线给出了线索。Rychtecký 说,切换近两分钟后才收到 End-of-RIB,与 120 秒的重连定时器接近。演讲中的排查把等待点定位到 IPv6 BGP 会话:在预期标记到达前,路由选择被延后,IPv4 路由也一起被扣住。于是会话已建立,路由表仍空着。

数据包捕获随后发现新连接上出现 TCP RST。演示文稿最终给出的根因是:预期对端地址 2001:db8:1::2 被存成了 2001:db8:1:。缺失的后缀使系统找不到正确的 VRF 与 BGP 上下文,落入未知 VRF ID 0 后发送重置。Rychtecký 在 BIRD 实验环境中复现和对照,借此把协议设计与实现故障分开。他在这套环境中列出的临时办法,是把连接定时器设为一秒。

“优雅重启”能否保留路由,取决于它所依赖的转发状态是否还在。这次故障中,对端地址解析错误让路由交换迟迟不能完成,而服务路径已经失效。BGP 状态报告了一段对话;RIB 和数据包报告了中断。

演示文稿没有公开数据包捕获,也没有写明厂商;经过脱敏的跟踪记录或官方问题通告,才能让读者独立核验这条解析链。NANOG 的会议页面介绍 Rychtecký 是 NIX.CZ 的 CTO。故障细节来自官方讲稿,机制见RFC 4724。NANOG 官方照片为人物肖像提供身份依据。