Наложение патчей IMQ, ESFQ и Layer7: различия между версиями
Misha (обсуждение | вклад) м (Изменён уровень защиты страницы «Наложение патчей IMQ, ESFQ и Layer7» [edit=sysop:move=sysop]) |
Misha (обсуждение | вклад) (→Что откуда берем) |
||
Строка 10: | Строка 10: | ||
#Исходники [http://ftp.netfilter.org/pub/iptables/ iptables] | #Исходники [http://ftp.netfilter.org/pub/iptables/ iptables] | ||
#Исходники [http://linux-net.osdl.org/index.php/Iproute2 iproure] | #Исходники [http://linux-net.osdl.org/index.php/Iproute2 iproure] | ||
+ | Если не найдете, то можно поискать патчи [https://dev.openwrt.org/browser/trunk/target/linux/generic-2.6 тут] | ||
==Подготовка и компиляция ядра== | ==Подготовка и компиляция ядра== |
Версия 13:46, 12 мая 2009
Содержание
Для чего все это
Нам надо настроить шейпер - справедливый дележ канала между пользователями интернета. Проблема стоит в том, что на каждого пользователя, поднимается свой интерфейс, поэтому придется использовать IMQ. Также хотелось бы различать различные типы трафика, которые не привязаны к портам, например, torrent. Для этого служит Layer7. И для справедливого деления канала не по количеству каналов (SFQ), а по количеству пользователей нужна очередь ESFQ.
Рассказывать буду на основе kernel 2.6.25.19
Что откуда берем
- Ядро берем с http://kernel.org (linux-2.6.25.19.tar.bz2).
- Патчи IMQ для ядра и iptables c http://www.linuximq.net и http://www.actusa.net/~linuximq/ (linux-2.6.25-imq.diff и iptables-1.4.1-imq.diff), а также Protocol definitions.
- Патчи и файлы Layer7 (netfilter-layer7-v2.20.tar.gz). Сюда входят патчи для ядра и для iptables.
- Патчи для ESFQ (sfq-2.6.24.1.tar.gz). Сюда входят патчи для ядра и для iproute.
Патч для ядра 2.6.27 нашел тут. - Исходники iptables
- Исходники iproure
Если не найдете, то можно поискать патчи тут
Подготовка и компиляция ядра
Берем исходники ядра и кладем их в каталог /usr/src
tar -cjvf linux-2.6.25.19.tar.bz2 /usr/src
Кладем в каталог /usr/src/linux-2.6.25.19 патчи
- linux-2.6.25-imq.diff
- kernel-2.6.25-layer7-2.20.patch из ахива netfilter-layer7-v2.20.tar.gz.
- esfq-kernel.patch из архива sfq-2.6.24.1.tar.bz2.
Накладывем патчи.
# patch -p1 < linux-2.6.25-imq.diff # patch -p1 < kernel-2.6.25-layer7-2.20.patch # patch -p1 < esfq-kernel.patch
Далее переписываем из каталога /boot
# cp /boot/@config /usr/src/linux-2.6.25.19/.config
И запускаем
make oldconfig
Тут мы обычно все принимаем по умолчанию. Просто тупо жмем "Enter"
make menuconfig
IMQ
1. Идем в Device Drivers --> Network device support ->
- Установить
- IMQ (intermediate queueing device) support <M>
- IMQ behavior (PRE/POSTROUTING) (IMQ BA)
- Number of IMQ devices (4)
2. Идем в Networking support ---> Networking options ---> Network packet filtering framework (Netfilter) ---> IP: Netfilter Configuration --->
- Установить
- <M> IMQ target support
3. Идем в Networking ---> Networking options ---> Network packet filtering framework (Netfilter) ---> IPv6: Netfilter Configuration (EXPERIMENTAL) --->
- Установить
- <M> IMQ target support
4.Идем в Networking support ---> Networking options ---> Network packet filtering framework (Netfilter)
- Установить
- [ ] Network packet filtering debugging (убрать звезду)
Layer7
Идем в Networking support ---> Networking options ---> Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration
- Установить
- <M> Layer 7 match support (EXPERIMENTAL)
- [ ] Layer 7 debugging output
ESFQ
Идем в Networking ---> Networking options ---> QoS and/or fair queueing
- Установить
- <M> Enhanced Stochastic Fairness Queueing (ESFQ)
Выходим из menuconfig и сохраняем .config
Компиляция
Делаем
# make # make modules_install # make install
Компиляция iptables
Опишу тут компиляцию с iptables-1.4.2
1. Расспаковываем исходники iptables в папку /usr/local/src
$ tar -xjf iptables-1.4.2.tar.bz2 /usr/local/src
2. Копируем туда патчи для IMQ (iptables-1.4.1-imq.diff)
Для layer7 копируем файлы из папки патча iptables-1.4.1.1-for-kernel-2.6.20forward (libxt_layer7.c и libxt_layer7.man) в папку /usr/local/src/iptables-1.4.2/extensions.
3. Накладываем патчи.
$ patch -p1 < iptables-1.4.1-imq.diff
4. В директории ./extensions и установить права 755 на файлы
.IMQ-test .IMQ-test6
5. Конфигурим, компилим и устанавливаем,указывая полный путь до нового ядра.
$ ./configure --with-ksource=/usr/src/linux/ $ make $su make install
Программа будет установлена в /usr/local
6. Переписать l7-protocols в /etc
Компиляция iproute
1. Установить пакеты bison-*.i586.rpm и flex-2.*.i586.rpm и
libdb4.2-devel-*.i586.rpm
2. Выполнить команду
ln -s /usr/include/db4/db_185.h /usr/include/db_185.h
3. Распаковать исходники в /usr/local/src/
4. Туда же положить файл esfq-iproute2.patch
5. Выполнить
$ patch -p1 < esfq-iproute2.patch $ ./configure $ make $ su make install
6. Переписать файлы из исходников ./ip/ip и ./tc/tc в директорию /sbin
FAQ
1.Вопрос: Как только загружаем модуль IMQ - валится ядро
Ответ: Модуль IMQ не уживается с клиентом DHCP. Но так как это обычно сервер и все ip адреса задаются статически (руками), то лучше вообще деинсталировать пакет клиента DHCP.
Полезные ссылки
- IMQ wiki
- L7-filter Kernel Version HOWTO с описанием инсталляции патча.
- Различные патчи для ядра 2.6