LINUX.ORG.RU

nDPI как замена l7filter

 ,


23

17

Если кому интересно, то вот рецепт

На большом потоке ( >300мбит/с ) c большим числом протоколов (>20) используется примерно 40% одного ядра Intel(R) Xeon(R) CPU E31230@3.20GHz. Если поток больше или процессор слабее, то включаем RPS или используем сетевые карты с multi-queue и irq-affinity :)

Требуется много памяти. На каждое соединение расходуется примерно 800+264*0.7 байт.

Исходники теперь есть на https://github.com/vel21ripn/nDPI/tree/netfilter

★★★★★

Последнее исправление: vel (всего исправлений: 3)
Ответ на: комментарий от vel

Ну не во всех регионах) У нас даже разговоров об этом не слышно. Хотя уже хочется попробовать IPv6

as_lan ★★
()
Ответ на: комментарий от as_lan

Да там разницы особой нет - главное чтобе без режектов.

IMHO 3.12.7 должен подойти.

В чем смысл использовать временную EOL ветку ?

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

В бубунте это последняя в данный момент версия. Хочется попробовать ядро с их патчами.

as_lan ★★
()
Ответ на: комментарий от vel

Спс. По поводу обнаружения bitorrent... Стоит rtorrent с параметрами шифрования

protocol.encryption.set = allow_incoming,try_outgoing,require,enable_retry,prefer_plaintext 

Новая сборка обнаруживает кажется все 100% p2p трафика! Приятно удивлен. Спасибо. Сегодня еще с виндовым utorrent протестирую и отпишусь

as_lan ★★
()
Ответ на: комментарий от vel

За 12 часов тестирования суммарно bittorrent трафика было на 258 Gb. Всего же трафика было 263. Неопределенного из них получается 5 Gb. И то не факт, ведь http и прочий трафик не детектировал, проверял только p2p. ТО есть получается менее 2% трафика не определенно. Результат думаю более чем отличный! =) Хэш еще не включал.

as_lan ★★
()
Ответ на: комментарий от pinachet

Максимум что у меня бывает - 7kpps. Без каких либо проблем на слабеньком E-350. Уверен намного больше может, но у меня такого трафика нет.

as_lan ★★
()
Ответ на: комментарий от as_lan

Небольшое замечание. Правила iptables должны быть добавлены ДО запуска bittorrent клиента. Иначе пропускается не малая часть трафика. Или можно сбросить все текущие соединения с помощью conntrack -F после добавления правил.

as_lan ★★
()
Ответ на: комментарий от vel

Забыл спросить. У меня ядро собрано с CONFIG_NO_HZ=y. Вроде все работает. Есть ли смысл/необходимость собирать с CONFIG_HZ_PERIODIC=y и что это даст ?

as_lan ★★
()
Ответ на: комментарий от as_lan

Если в «head -1 /proc/net/xt_ndpi/info» gc не 0 (после того как пройдет время > timeout), то значит все нормально работает.

vel ★★★★★
() автор топика
Ответ на: комментарий от as_lan

Замечательно!

Значит это предупреждение можно убрать.

vel ★★★★★
() автор топика

Найден баг! патч выложен. Почему оно не роняло ядро - непонятно.

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

у меня вчера 2 раза рабочий шлюз роняло буквально через 2-23 секунды, после применения правил iptables с ndpi. Пока не выяснил полностью причину (ndpi ли вообще) не хотел лишний раз наговаривать. Но раз Вы подтверждаете, наверняка это оно, так как на старой сборке я этого не встречал.

Спасибо за патч, завтра по новой попробую собрать.

as_lan ★★
()
Ответ на: комментарий от as_lan

Проблема должна была проявляться только с bittorrent при включеном bt_hash_size и только после истечения таймаута.

Тут в лоровской вики есть статейка как ловить корки ядра. Я там дописывал про ramoops. Сам им пользуюсь.

ramoops

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

Вот как раз с bittorrent и была проблема) Только его и включал. Но вот хэш не припомню что включал... Вроде бы только xt__ndpi подгружал, без параметров.

as_lan ★★
()
Ответ на: комментарий от vel

И еще просьба. Патчи для imq (когда появляются для свежих ядер) добавлять в общий архив, если не сложно =). А то про linux-imqmq-3.17.3.patch узнал случайно, методом тыка.

as_lan ★★
()
Ответ на: комментарий от as_lan

Я сейчас запустил на тестирование вариант с ipv4 & ipv6 на одном ядре (без rps).

Попутно обнаружил несколько мелких ошибок (не фатальных как до этого).

Если за 3-4 дня не будет странностей, то выложу обновления.

Я пока _вообще_ не тестировал 64-битную сборку.

Не могу решить задачку - делать сборку по умолчанию с IPv6 или без. В нынешнем варианте оно потребляет лишние ресурсы (память) и совсем чуть-чуть процессор. Возможно есть смысл не делать разные варианты сборки, а переделать модуль так, чтобы ресурсы потреблялись только если используется ipv6

Из интересных наблюдений - есть неизвестный udp трафик, который по общим характеристикам является шифрованными туннелями (похоже на openvpn). Его можно обнаруживать только статистиикой :(

На графиках добавилась страничка net7a для ipv6 и для net7* отдельно графики для tcp-syn

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

Лучше ipv6 включать флагом при сборке. Мало у кого он предвидеться в ближайшем будущем, а ресурсы лишние тратить не хочется...

И еще. В первом посте Вы говорили о возможности отключать ненужные протоколы. Очень бы это пригодилось, так как на текущие момент я использую максимум 5-7 протоколов. Не предвидеться такой возможности?

as_lan ★★
()
Ответ на: комментарий от as_lan

Я рассматривал такую возможность. IMHO это должно быть не очень сложно т.к. часть кода использует условную компиляцию.

Но есть подозрение, что это сильно усложнит поддержку кода т.к. любой merge c nDPI будет давать кучу режектов. Есть конечно вариант решения этой проблемы - попытаться свои изменения пропихнуть в официальную ветку.

vel ★★★★★
() автор топика

Сегодня с 10:20 усложнил условия тестирования - сделал частоту всех ядер 1.6ГГц (вместо 3.2).

На cpu2 этот момент виден - на ядерные процессы это пока сильно не сказалось, в отличии от userspace!

Время для хеша BT - 1 час.

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

К сожалению баг все еще есть. Но bittorrent не причем. Включен был первый попавшийся протокол, в данном случае rtp. Проблема появляется после добавлений одного из правил iptables (еще не успел выяснить какого)

iptables -t mangle -A POSTROUTING -o eth1 -m mark --mark 25 -j CONNMARK --save-mark
iptables -t mangle -A POSTROUTING -o eth1 -m mark --mark 25 -j RETURN

Не успею сегодня проверить, падает ли ядро если xt_ndpi загружен или модуль не причем (рабочий день начался, экспериментировать не могу, офис паникует =) )

Дома с почти тем же ядром все нормально. Системы почти идентичные. Разве что на рабочей машине x64

ramoops еще не успел прикрутить. Есть только скрин монитора с последними сообщения (качество плохое правда). Если интересно могу выложить.

as_lan ★★
()
Ответ на: комментарий от as_lan

x64 я пока не тестил, но есть где проверить. Сегодня посмотрю.

Как настроить ramoops и скрипт для получения корки - вылолжил.

vel ★★★★★
() автор топика
Ответ на: комментарий от as_lan

Выложил обновления, запустил тестирование на x86_64.

Существенное увеличение расходов памяти на flow (x86 - 1616 байт, x86_64 - 2816 байт )

vel ★★★★★
() автор топика
Ответ на: комментарий от as_lan

нет. Просто все указатели стали вместо 4 байт - 8.

vel ★★★★★
() автор топика
Ответ на: комментарий от as_lan

Я несколько раз наступал на грабли, когда после применения патча к ядру я либо забывал перезагрузиться либо забывал обновить ядро и перезагружался с неисправленным ядром.

Результат один - корка при использовании нового модуля.

vel ★★★★★
() автор топика
Ответ на: комментарий от as_lan

Если снова упадет, то корку (в любом виде) и xt_ndpi.ko отправь мне на vel21ripn собака gmail точка com

vel ★★★★★
() автор топика
Ответ на: комментарий от as_lan

Новая сборка собралась без проблем и работает. Пока не падает (раньше сразу при применении правил падало ядро). Bittorrent включен. Сегодня на работе буду тестировать. P2P отлавливает нормально.

Вопрос. Как правильно смотреть объем памяти, который уходит на все это?

as_lan ★★
()
Ответ на: комментарий от as_lan

после загрузки модуля в логах видно:

sizeof hash_ip4p_node 44 - размер ноды bt-хеша

нужно умножать на count из /proc/net/xt_ndpi/info

sizeof id_struct 280 - размер node_id

нужно умножать на /sys/module/xt_ndpi/parameters/id_num или смотреть в /proc/slabinfo ndpi_ids

sizeof flow_struct 2816 - размер flow

нужно умножать на /proc/sys/net/netfilter/nf_conntrack_count или смотреть в slabinfo ndpi_flows

vel ★★★★★
() автор топика
Ответ на: комментарий от as_lan

Тут откликнулся чел с ntop.org и рассказал, что самое неприятное - это патч ядра и что он знает как обойтись без него (странно, но он при этом даже не посмотрел какие я сделал исправления). Ждем его ответа на мое письмо...

Я тут еще раз внимательно посмотрел на nf_conntrack и понял, что похоже есть решение без патча ядра и без потерь производительности. Нужны 2 вещи: хнанение нескольких слов с conntrack и отслеживание закрытия conntrack.

Для реализации первой части придется принести в жертву nf_conntrack_labels, использование которого очень редко. Вторую часть можно взять из ipt_NETFLOW. Оно конечно хак, но не очень страшный.

vel ★★★★★
() автор топика
Ответ на: комментарий от as_lan

тем, что это нужно делать.

Для ванильного ядра это не проблема, а для всяких RH/Oracle/SuSe/... пересборка ядра не столь проста и доступна.

Жаль, что с 2.6.2х убили поддержку цепочки нотифаев в conntrack...

IMHO Без патча ядра nDPI будет еще более привлекателен.

vel ★★★★★
() автор топика

Началось тестирование версии не требующей патча ядра.

Главное требование к ядру

CONFIG_NF_CONNTRACK=y|m
CONFIG_NF_CONNTRACK_LABELS=y

и версия не ниже 3.4 ( возможно 3.2 )

Если через пару дней не упадет - выложу обновления.

vel ★★★★★
() автор топика
Ответ на: комментарий от as_lan

нет разницы.

А вот с версиями ядра я поторопился. С 3.9 возможно без патча ядра, а все до него нужно патчить. Можно моим патчем, а можно бекпортом labels extensions.

Но ниже 3.2 похоже уже точно не будет работать.

Luca Deri из ntop.org Наконец откликнулся на мое третье письмо и обещал в течениие недели внимательно посмотреть патчи.

vel ★★★★★
() автор топика
Ответ на: комментарий от as_lan

А где она?

Что-то потерялась инструкция. Видел ее прежнюю версию, начал по ней делать, а потом раз! и ничего не стало.

firebolt
()
Ответ на: комментарий от as_lan

Благодарю! Но не пойму, почему я сам не смог ее найти ???

firebolt
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.