在 Linux 网桥上过滤掉 VLAN 标记的数据包

Filtering out VLAN tagged packets on Linux bridge

我的IF配置如下:

eth0 --- br0 --- eth1 

我在 eth1 上接收到 udp 广播传输(在端口 20000 上),不希望网桥将其转发到 eth0(我的有线接口)。因此,我申请

ebtables -t filter -A FORWARD -o eth0 -p 0x0800 --ip-protocol udp --ip-destination-port 20000 -j DROP

这对我来说非常有用。当我 运行 我的设备处于 VLAN 模式时,即具有以下配置,

eth0 --- br0 --- eth1 
          |
       br0.100

我在这里添加了一个支持 VLAN 的网桥来管理 VLAN 100 上的无线电。流量到达时标记在 eth1 上,当它通过网桥时我无法使用相同的规则检测到它。

尝试使用 iptables 和 ebtables 及其 vlan 选项检测数据包。无法通过 ebtables 通过 udp 端口​​过滤它们。此外,找不到通过 iptables 按端口标记它们的方法。另外,尝试使用 physdev 标记但没有成功。

对于标记的流,是否有正确的方法来执行此操作?

您可能看不到 802.1Q 封装的桥接数据包 默认使用 iptables。

要启用此功能,请执行以下操作:

echo 1 > /proc/sys/net/bridge/bridge-nf-filter-vlan-tagged

http://ebtables.netfilter.org/documentation/bridge-nf.html

现在,您可以使用 iptables 过滤这些数据包。你应该 了解如何将数据包中的目标端口与 类似于:

iptables -A FORWARD -m u32 --u32 "W&0xFFFF=0x4E20" -j DROP

其中 0x4E20 是您的端口 (20000),W 是 你的 4 字节匹配(注意你只匹配最后两个 字节为 0x0000FFFF)。你必须找出W是什么。

有关 u32 匹配的详细信息,请参阅 iptables 手册页。