Фильтрация пакетов с тегами 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. Не смогли отфильтровать их по порту udp через ebtables. Более того, не удалось найти способ пометить их по порту через iptables. Также безуспешно пробовал маркировку с помощью Physdev.
Есть ли правильный способ сделать это для помеченного потока?
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.
См. Справочную страницу iptables для подробностей о совпадении u32.