Перейти к содержимому
Калькуляторы

nf_defrag_ipv4 как можно обойти

Вопрос наверное к линукс-гуру.

Каким образом можно обойти работу модуля nf_defrag_ipv4, если вообще возможно? Всякие телодвижения с NOTRACK не помогают, пакеты все равно дефрагментируются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А вы как себе представляете передачу пакетов между интерфейсами с разным mtu?

Если сильно мешает - собирайте кастомное ядро с ампутированным функционалом, на свой страх и риск.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если не подгружать модуль conntrack со всеми вытекающими, то все работает как надо. При подгрузке conntrack, автоматом подгружается и этот модуль и дальше начинается свистопляска в виде сборки воедино этим модулем уже фрагментированных как нужно пакетов. И это при том, что этому трафику в conntrack делать то и нечего, и он туда вроде как не попадает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

уже фрагментированных как нужно пакетов.

Как так происходит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Элементарно.

На вход тазика прилетает, допустим, udp пакет размером 1764 байта. Прилетает на самом деле два пакета, один 1500, другой 264 байта, ибо mtu 1500 и отфрагментилось оно раньше, там где надо.

В результате работы nf_defrag_ipv4 мы получаем на выходе не два пакета, как пришло на вход, а уже собранный один пакет в 1764 байта, со всеми вытекающими проблемами.

Весь вопрос собственно в том, каким образом, и вообще возможно ли, заставить этот модуль жрать не весь трафик, а только тот, который должен попадать в conntrack.

Гребаный conntrack нужен всего лишь для одного DNAT, и если возможности обхода нет, то буду просто выпиливать это правило с данного тазика, ибо без conntrack все работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это очень похоже на логику работы GSO.

Мне кажется (но исходники детально не разбирал, там совсем немного кода и легко его пропатчить), nf_defrag собирает только пакеты с флагом фрагментации. Приведенный вами случай совсем не из той оперы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А почему трафик вообще туда попадает? Неужели nf_defrag работает на самом входе, до всяких raw, nat и т.п. и путей обхода нет? Или я как-то неверно оперирую правилом ... -j NOTRACK

От программирования я к сожалению далек, и лезть в исходники для меня темный лес, а мой знакомый программер последнее время сильно занят, не до меня ему...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Неужели nf_defrag работает на самом входе, до всяких raw, nat и т.п. и путей обхода нет?

Да.

 

 

От программирования я к сожалению далек, и лезть в исходники для меня темный лес, а мой знакомый программер последнее время сильно занят, не до меня ему...

Самое простое - в файле ipv4/netfilter/nf_defrag_ipv4.c в начало ipv4_conntrack_defrag() вставить return NF_ACCEPT. Правда, не понятно как поведёт себя conntrack, когда до него начнут доходить фрагментированные пакеты, могут быть побочные эффекты. Возможно, в ipv4_conntrack_defrag() надо сразу делать функционал NOTRACK, а не просто return NF_ACCEPT, чтоб их не было.

Изменено пользователем aabc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.