在Linux网桥

时间:2016-11-07 20:32:31

标签: linux iptables bridge vlan ebtables

我有以下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进行标记但没有成功。

是否有正确的方法为标记流执行此操作?

1 个答案:

答案 0 :(得分:1)

您可能无法看到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手册页。