Фильтрация пакетов с тегами 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.

Другие вопросы по тегам