过滤掉VLAN在Linux上桥的标记分组

问题描述:

我有以下IF配置:过滤掉VLAN在Linux上桥的标记分组

eth0 --- br0 --- eth1 

我收到UDP广播传输(端口20000)eth1上,不想桥将其转发给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标记没有成功。

有没有一个正确的方法来做到这一点的标记流?

+0

这是一个很好的问题(和一个有趣的!),但它是题外话了计算器(这是软件开发的问题)。这将是[serverfault](http://serverfault.com)的一个很好的候选人。 – larsks

您可能无法在默认情况下看到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手册页。