У меня есть хороший формирователь с хэшированной фильтрацией, построенный на Linux-мосте. Короче говоря, br0
соединения external
и internal
физические интерфейсы, маркированные пакеты VLAN соединяются «прозрачно» (я имею в виду, интерфейсы VLAN отсутствуют).
Теперь разные ядра делают это по-разному. Я могу ошибаться с точными диапазонами версий ядра, пожалуйста, прости меня. Благодарю.
2.6.26
Итак, в Debian, 2.6.26 и выше (я думаю, до 2.6.32) --- это работает:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
Здесь «kernel» сопоставляет два байта в поле «protocol» с 0x8100, но считает начало пакета ip «нулевой позицией» (извините за мой английский, если я немного неясен).
2.6.32
Опять же, в Debian (я не собирал ванильное ядро), 2.6.32-5 --- это работает:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 at 20 flowid 1:200
Здесь «ядро» совпадает с протоколом, но считает смещение от начала заголовка этого протокола - мне нужно добавить 4 байта к смещению (20, а не 16 для адреса dst). Это нормально, кажется более логичным, как для меня.
3.2.11, последняя стабильная версия
Это работает --- как если бы вообще не было тега 802.1q:
tc filter add dev internal protocol ip parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
Проблема в том, что я пока не смог найти способ сопоставить тег 802.1q.
Соответствующий тег 802.1q в прошлом
Я мог бы сделать это раньше следующим образом:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Сейчас я не в состоянии соответствовать 802.1q тег at 0
, at -2
, at -4
, at -6
или , как это. Основной вопрос , который у меня есть ноль хитов рассчитывать --- этот фильтр не проверяется на всех, «неправильный протокол», другими словами.
Пожалуйста, кто-нибудь, помогите мне :-)
Благодарность!
источник
protocol all
дает мнеRTNETLINK answers: Invalid argument
(ядро 3.3.4 здесь). Я проверю это с более новыми ядрами. Спасибо.Я должен был сделать именно это. Я обнаружил, что ответ, предложенный @Thusitha, был правильным способом сделать это для новых ядер.
Протестировано с ядром Debian wheezy 3.2.0-4 и iproute (откуда берется команда tc) версии 20120521-3 + b3
Вот полный сценарий,
tc filter
строки которого в точности совпадают с указанными @Thusithaисточник
protocol all
выдал ошибку в ванильном ядре. Я должен проверить это больше. Спасибо.Я бы порекомендовал использовать wireshark для захвата того, что происходит через интерфейс, как видимое в пользовательском пространстве, и использовать его для написания фильтра. Мне интересно, может быть, интерфейс по какой-то причине удаляет теги VLAN (несмотря на то, что он настроен для прозрачного моста). Возможно, это добавление дополнительных тегов или что-то?
источник
tcpdump
показывает идентификаторы VLAN на всех интерфейсахbridge
и его портах.Вы можете пометить пакеты vlan ebtables .
Тогда примените формирование, основанное на маркировке. ebtables и iptables имеют одинаковую маркировку.
Сам еще не сделал этого. Так что это скорее догадка.
источник
Попробуйте отключить
reorder_hdr
опцию на интерфейсе vlan. Если опция переупорядочивания заголовка включена, то теги из фреймов удаляются. Проверьте это по командеip -d link list dev vlan_iface
.источник
tc
вызываются фильтры? У вас есть ссылка на карту или что-то подобное? Благодарность!