Сборка ядра для Ubuntu с патчами IMQ и nDPI (UPD. Актуализировано под 18.04)
Очередное обновление от Vel Проверенно на Ubuntu Server 18.04. (Для тех кто использует версию 16.04 придется скачивать/применять другие версии ядер/iptables/патчей. Думаю разберетесь)
Приступим:
1. Ставим необходимые пакеты.
cd /usr/src/ && sudo apt-get install bc libnetfilter-conntrack-dev libnftnl-dev libssl-dev flex libmnl-dev libncurses5-dev bison libnfnetlink-dev linuxdoc-tools kernel-package
dh-autoreconf dkms iptables-dev bzr libpcap-dev
git arptables ebtables libjansson4 libmxml1 libnftnl7 sudo apt-get build-dep iptables
2. Скачиваем ядро 5.4.0.
sudo wget http://security.ubuntu.com/ubuntu/pool/main/l/linux/linux-source-5.4.0_5.4.0-128.144_all.deb sudo dpkg -i ./
linux-source-
5.4.0_5.4.0-128.144_all.deb
sudo ln -s ./linux-source-
5.4.0
./linux sudo tar -xjf ./linux-source-
5.4.0
/linux-source-
5.4.0
.tar.bz2 && cd /usr/src/linux
sudo wget https://raw.githubusercontent.com/imq/linuximq/master/kernel/v5.x/linux-5.4-imq.patch -O kernel.patch
4. Накладываем патч IMQ
sudo patch -p1 < ./kernel.patch
5. Включаем imq.
sudo make menuconfig
Device Drivers; Network Device Support;
[M] IMQ (intermediate queueing device) support
[M] IMQ (intermediate queueing device) support
6. Начинаем сборку. Вместо 7 ставим количество своих ядер процессора + 1. sudo CONCURRENCY_LEVEL=7 fakeroot make-kpkg --initrd --append-to-version=-v-ndpi+imq kernel-image kernel-headers
7. Устанавливаем. sudo dpkg -i ../linux*.deb
8. Перезагружаемся
sudo reboot
9. Следующим делом iptables. Скачиваем, патчим, собираем и устанавливаем(проверено на iptables версий 1.6.0):
cd /usr/src
sudo apt-get source iptables
cd /usr/src/iptables-*/
sudo wget https://raw.githubusercontent.com/imq/linuximq/master/iptables/iptables-1.6.0-imq.diff
sudo patch -p1 < ./iptables-1.6.0-imq.diff
sudo dpkg-buildpackage -rfakeroot -uc -b
sudo dpkg -i ../iptables_*.deb ../libxtables*.deb
10. Xtables-addons
sudo apt install xtables-addons-dkms xtables-addons-source xtables-addons-common
11. Теперь nDPI. Переходим в каталог и начинаем сборку
cd /usr/src
sudo git clone -b netfilter https://github.com/vel21ripn/nDPI.git
cd ./nDPI && sudo ./autogen.sh
cd src/lib ; sudo make ndpi_network_list.c.inc
cd ../../ndpi-netfilter
sudo make
sudo make install
sudo make modules_install
sudo modprobe xt_ndpi
12. И проверяем с помощью lsmod | grep xt_ndpi. Если все нормально то в выводе увидите xt_ndpi
13. Протоколы с которыми можно работать.
iptables -m ndpi -h
Дальше их уже можно маркировать и скармливать Linux Traffic Control.
Как и в прошлый раз привожу ссылку на тему, с которой все началось. За патчи говорим спасибо Vel.
UPD. В новых патчах добавлен target Ndpi. Теперь можно упростить маркировки трафика или его классификацию. Например:
iptables -t mangle -A POSTROUTING -m ndpi --http -j MARK --set-mark 3
iptables -t mangle -A POSTROUTING -m ndpi --http -j RETURN
Теперь можно записать как: iptables --t mangle -A POSTROUTING -m ndpi --proto bittorrent -j NDPI --value 3 --set-mark --ret
А классификацию: iptables -t mangle -A POSTROUTING -m ndpi --bittorrent -j CLASSIFY --set-class 1:5
iptables -t mangle -A POSTROUTING -m ndpi --bittorrent -j RETURN
Можно записать как: iptables -t mangle -A POSTROUTING -m ndpi --proto bittorrent -j NDPI --value 0X10005 --set-clsf --ret
UPD2. Обновлено. Цитата Vel
Хэш включается командой modprobe xt_ndpi bt_hash_size= bt_hash_timeout= подставив нужные значения для bt_hash_size и bt_hash_timeout (Естественно если модуль уже был загружен до этого, то его надо выгрузить).
Большие изменения в BT: добавлен парсер сообщений (dht) и хеш для хранения ip:port получаемых парсером
По-умолчанию хеш отключен! Чтобы его включить нужно указать его размер 1-32 (параметр bt_hash_size). Число элементо хеша будет равно N*1024.
Кроме это можно указать время хранения данных в хеше 900-3600 секунд (параметр bt_hash_timeout)
Число хранимых элементов в хеше и другую информацию о хеше можно посмотреть в /proc/net/xt_ndpi/info
При тестировании на сети /24 с 300Мбитным трафиком число элементов было 0.8-1.2 миллиона элементов!
Каждый элемент - 24 байта!
UPD3. 13.01.2015. Патчить ядро для nDpi больше не нужно. Только Imq. но нельзя при этом использовать connlabel. Если нужен connlabel, то нужно патчить ядро патчем из архива nDpi.P.S. Уважаемые копипастеры. Будьте добры указывать первоисточники. Хотя бы ссылку на тему https://www.linux.org.ru/forum/general/9685281
Что такое connlabel? Все таки нужно патчить ядро или нет?
ОтветитьУдалитьСистема меток. Примеры использования я не нашел, и раз вы спрашиваете для чего он, то патчить вам ничего не нужно и вы не используете это.
УдалитьНу это не маркировка iptables?
УдалитьК MARK/CONNMARK отношения не имеет.
УдалитьСпасибо будем пробовать.
УдалитьВозник вопрос по поводу приоретизации трафика, как это связать с tc. Немного не понял момент с маркировкой и связкой с tc. Есть очереди HTB на интерфейсе туда завешаны трубы class по приоритетам, вопрос как заставить маркированный трафик идти именно в нужный класс
ОтветитьУдалитьв iptables маркируем с помощью -j MARK --set-mark 5
Удалитьв tc (пример) tc filter add dev imq0 protocol ip parent 1: prio 1 handle 5 fw flowid 1:10
Можно в iptables с помощью -j CLASSIFY --set-class 1:10.
Так же не забываем про CONNMARK, чтоб маркировать соединения и RETURN, чтоб повторно не маркировать уже промаркированный пакет.
Many thanks for your effort! i follow your instructions since 14.04.1 (kernel 3.13) and i found your page to be the only source for nDPI AND IMQ!
ОтветитьУдалитьPity that my russian isn't that great, tho :-)
Thank you. I am glad that my manual helped you =)
Удалитьпри сборке nDPI -
ОтветитьУдалитьndpiReader.c:47:24: fatal error: pcap/nflog.h: Нет такого файла или каталога
Этот комментарий был удален автором.
ОтветитьУдалитьустановил pcaputills - собрал
ОтветитьУдалитьВ ядрах 4.x (4.4 точно) сменилось api, поэтому нужно ставить xtables версии 2.10.
ОтветитьУдалитьhttps://fossies.org/diffs/xtables-addons/2.9_vs_2.10/extensions/xt_DELUDE.c-diff.html
И nflog.h нет в libpcap-dev в версии для trusty (1.5.3-2 на данный момент), но есть в 1.7.4, поэтому можно взять для новых версий отсюда https://launchpad.net/ubuntu/+source/libpcap
Также для новых xtables-addons нужен libxtables > 10, поэтому ставим 11 сперва.
ОтветитьУдалить(здесь я и xtables-addons сразу последний уже беру)
http://ftp.univ-nantes.fr/ubuntu/pool/main/i/iptables/libxtables11_1.6.0-2ubuntu3_amd64.deb
http://ftp.ubuntu.com/ubuntu/ubuntu/pool/universe/x/xtables-addons/xtables-addons-common_2.11-1_amd64.deb
http://ftp.ubuntu.com/ubuntu/ubuntu/pool/universe/x/xtables-addons/xtables-addons-dkms_2.11-1_all.deb
Да, стоит заметить, на ядре, собранном без CONFIG_NF_CONNTRACK_LABELS, у вас ndpi не будет нормально работать. Да и вообще ему нужен conntrack, так что если он для вас неприемлем, можете и не пытаться ставить никакие dpi-расширения для netfilter.
Спасибо. При следующем обновлении мануала все это добавлю. Но пока все работает трогать ничего не хочется =)
УдалитьМожет вы под debian 8 собирали? может запилите свою инструкцию?
УдалитьА тем временем пару месяцев назад вышел nDPI 1.8
ОтветитьУдалитьВы будете допиливать свою версию вслед за ней? =)
Конечно. Но когда буду немного свободен =) старая версия вполне нормально работает. Поэтому без острой необходимости нет. Как будет время обновлю инструкцию и под Ubuntu и под Centos
УдалитьИнструкция по части nDpi не меняется. Все так же, последняя доступная версия на гитхабе будет собираться. По части Ubuntu обновил. Новое ядро (версия 4.4), поправил ссылку на патч iptable
Удалить>> sudo apt-get build-dep iptables
ОтветитьУдалить>> sudo apt-get source iptables
Если кто-то может помочь, подскажите пожалуйста, где можно найти список репозиториев для установки зависимостей и исходников.