Jump to content
Калькуляторы

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Да.

 

 

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

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

Edited by aabc

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.