南方數據技术观察
首页 行业新闻 教程 技术文章 AI 对话 官网 咨询与报价
首页 / 行业新闻

IPv6 NDP 邻居发现被防火墙误拦导致 BGP 会话抖动

在 IPv6 网络中,若防火墙规则将「全球单播地址(GUA)为源、非 GUA 为目的」的报文直接丢弃,会拦截合法的邻居请求(NS)与邻居通告(NA),导致 IXP 路由服务器的 BGP 会话持续抖动。实测表明,RFC 4861 允许节点以 GUA 为源地址向链路本地地址(LLA)发送 NS/NA,防火墙需显式放行此类流量。

网络拓扑与防火墙策略

作者 AS149794 通过单条千兆二层链路接入上游 AS132559,同一物理端口承载两个 VLAN:一路走 Transit,一路接入 ExtremeIX Bangalore。边界设备为 MikroTik CCR1036-8G-2S+,运行 RouterOS 7.6。在 raw 表 pre-routing 链部署一条严格规则:源地址为 GUA 且目的地址非 GUA(含 LLA、ULA 等)的报文直接丢弃。初衷是参考 IPv4 防御 RFC 6890 保留地址的做法,认为外部网络无需访问本地非 GUA 地址。

NDP 报文触发规则的机制

RFC 4861 第 4.3、4.4 节规定,节点可使用 GUA 作为源地址,向邻居的 LLA 发送 NS/NA 报文。ExtremeIX 路由服务器在建立 BGP 会话前,需通过 NDP 解析对端链路层地址,其发出的 NS 报文源地址为 GUA、目的地址为 LLA,恰好命中上述丢弃规则。导致 NA 无法回传,邻居条目反复在 INCOMPLETE 与 REACHABLE 间震荡,进而引发 BGP 会话频繁建立又断开。原文未给出具体抖动频率或丢包率数据。

排查过程与修正方案

作者在数十条耦合规则中耗费大量时间定位,最终在日志中发现被丢弃的 NS 报文均来自路由服务器的 GUA。修正方法是在 raw 表前插一条规则:允许目的为 LLA 且 ICMPv6 类型为 135(NS)或 136(NA)的报文通过,或在策略中显式排除链路本地通信。调整后 BGP 会话恢复稳定,未再观察到因 NDP 失败导致的抖动。

对运维工程师的启示

IPv6 与 IPv4 在地址作用域与控制平面交互上存在本质差异,不能直接套用「拦截保留地址」的 IPv4 思维。部署边界防火墙时,必须在 pre-routing 阶段显式放行 NDP、MLD、DHCPv6 等链路本地控制报文,否则会在协议层面造成难以排查的会话不稳定。建议在变更前通过 `tcpdump -i any icmp6` 抓取 NS/NA 交互,验证规则是否误伤合法邻居发现流量。

原文: APNIC Blog(2023-01-30)|编译自 APNIC Blog,事实以原文为准。

来源:APNIC Blog

返回列表