Продолжение длинной истории
Оригинальный рецепт для тех кто умеет самостоятельно прикладывать патчи и собирать ядра/софт.
Отдельно и более подробно для Ubuntu и CentOS от as_lan
На большом потоке ( ~300мбит/с ) cо всеми протоколами используется примерно 50-60% одного ядра Intel(R) Xeon(R) CPU E31230@3.20GHz. Если поток больше или процессор слабее, то включаем RPS или используем сетевые карты с multi-queue и irq-affinity. У меня оно тестируется на трафике до 400Мбит/~100к conntrack/~90kpps для x86 и x86_64.
В понятиях netfilter оно умеет проверять пакеты на принадлежность к протоколам (match) и ставить на пакеты метки/классы (target) по аналогии с MARK & CLASSIFY. Есть поддержка NET_NS и IPv6.
Требуется много памяти. На каждое соединение расходуется примерно ~850+280*0.7 байт. Этот объем варьируется в зависимости от 32/64 бита, с/без IPv6.
Исходники теперь есть на https://github.com/vel21ripn/nDPI/tree/netfilter
От основной ветки на github/ntop/nDPI/1.7-stable отличается меньшим потреблением памяти и «улучшением» определения bittorrent.
из-за значительных изменений пока не ясно, можно ли будет включить в оригинальный проект.