Linux 通过错误的接口路由 IPv6 数据包

Linux 通过错误的接口路由 IPv6 数据包

我有一个 Arch Linux 系统,其中链路本地数据包未正确路由。我这台机器上有 4 个接口(wan、lan0、lan1 和 lan2)。所有三个 lanX 接口都桥接在一起。

当我跑步时

ping6 fe80::8e89:a5ff:feda:fa%lan

或者

ping6 ff02::1%lan

数据包从 wan 接口发出,而不是从 LAN 桥和 lan2 接口(直接连接到具有该 fe80 地址的计算机)发出。内核似乎忽略了指定的 IPv6 范围 ID。我已经仔细检查过,我没有 fe80 地址的路由(但是每个 IPv6 设备有一个 ff0::/8 路由,但这在我提供作用域的其他系统上是相同的)。

是否有任何设置可以使内核以这种方式运行并忽略链接本地地址的显式 ipv6 范围(包括 ff02::/16,根据 IPv6 规范仍将其视为链接本地)。

答案1

事实证明问题与我的配置有关。我正在使用 nfqueue 在内联 IPS 中运行 Suricata,并使用其“重复”模式将数据包重新插入链的开头(如果数据包从 IPS 获得许可)。然后我制定了规则,查找添加到包裹上的 Suricata 标记,并且不重新投递至 Suricata。然而,从 Suricata 重新插入链似乎使内核忘记了如何路由数据包。只需删除 nfqueue 规则即可解决问题,但没有利用 IPS。所以我最终做的是将所有 -j ACCEPT iptables 规则替换为 -j NFQUEUE iptables 规则。在这种形式下,Suricata 不会看到所有流量,特别是它不会看到防火墙阻止的数据包。这很不幸,但确实有效。

相关内容