Назад | Перейти на главную страницу

Сопоставление последнего фрагмента IP-пакетов с помощью tc или ipfilter

Я передаю пакеты UDP размером, скажем, 2900 байт. Из-за фрагментации пакет делится на 2 IP-фрагмента. Мой фильтр tc u32 (бит большего количества фрагментов и комбинация IP / PORT) соответствует только первому фрагменту, а второй фрагмент не соответствует.

Как я могу сопоставить последний фрагмент, также используя фильтр. Меня устраивает фильтр tc или iptables rul

Вы не можете. Загрузите файл nf_conntrack_ipv4. Этот модуль дефрагментирует пакеты, после чего ваше правило должно работать.

Вы не можете. Загрузите файл nf_conntrack_ipv4. Этот модуль дефрагментирует пакеты, после чего ваше правило должно работать.

Это неправда.

Когда pkt отправляется локально, nf_conntrack_ipv4 не будет дефрагментировать фрагменты pkt. Потому что ловушка NF_INET_LOCAL_OUT (где вызывает ipv4_conntrack_defrag) находится до того, как произойдет фрагментация.

Если UFO или udp gso включены, tc filter будет соответствовать всему pkt (а не фрагментам). Порт UDP в фильтре tc действителен.

Если отключено, фрагменты совпадают. Порт UDP в большинстве случаев находится в первом фрагменте. Таким образом, вы не можете сопоставить второй фрагмент с портом, вы можете использовать только ip и протокол.

UFO и udp gso зависят от версии вашего ядра и nic (для UFO).

Поддержка ядра UFO удаляется, когда ядро> = 4.14

Udp gso добавляется, когда ядро> = 4.18