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

标签 linux iptables bridge vlan ebtables

<分区>

我有以下 IF 配置:

eth0 --- br0 --- eth1 

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

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 上的 radio 。流量到达时标记在 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 手册页。

关于linux - 在 Linux 网桥上过滤掉 VLAN 标记的数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40474073/

相关文章:

docker - Docker 上的桥接网络与 VMWare/VirtualBox 上的桥接网络似乎非常不同。为什么?

c++ - 使用桥接模式 C++ 实现复制构造函数

linux - 为什么 msgsnd() 和 msgrcv() 不能正常运行?

linux - 如何在 CentOS 上升级到最新的 OpenSSH

linux - 用于读取日志的 IP 表脚本

linux - Bash 脚本,需要循环帮助

centos - 允许某些 IP 的端口 IPTABLES

cloud - 将本地蚊子桥接到云代理

Python:处理模块

json - 无法在 shell 脚本中使用 jq 获取 JSON 数组值