Наложение патчей IMQ, ESFQ и Layer7: различия между версиями
Misha (обсуждение | вклад) (→Что откуда берем) |
Misha (обсуждение | вклад) (→Компиляция iproute) |
||
(не показаны 53 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
==Для чего все это== | ==Для чего все это== | ||
− | Нам надо настроить шейпер - справедливый дележ канала между пользователями интернета. Проблема стоит в том, что на каждого пользователя, поднимается свой интерфейс, поэтому придется использовать [http://www.linuximq.net/ | + | Нам надо настроить шейпер - справедливый дележ канала между пользователями интернета. Проблема стоит в том, что на каждого пользователя, поднимается свой интерфейс, поэтому придется использовать [http://www.linuximq.net/ IMQ]. Также хотелось бы различать различные типы трафика, которые не привязаны к портам, например, torrent. Для этого служит [http://l7-filter.sourceforge.net/HOWTO-kernel Layer7]. И для справедливого деления канала не по количеству каналов (SFQ), а по количеству пользователей нужна очередь [http://fatooh.org/esfq-2.6/ ESFQ].<br /> |
− | Рассказывать буду на основе '''kernel 2.6. | + | Рассказывать буду на основе '''kernel 2.6.31.6''' |
+ | |||
==Что откуда берем== | ==Что откуда берем== | ||
− | #Ядро берем с http://kernel.org (linux-2.6. | + | #Ядро берем с http://kernel.org (linux-2.6.31.6.tar.bz2). |
− | #Патчи IMQ для ядра и iptables c http://www.linuximq.net и http://www.actusa.net/~linuximq/ (linux-2.6. | + | #Патчи IMQ для ядра и iptables c http://www.linuximq.net и http://www.actusa.net/~linuximq/ ([ftp://ftp.volmed.org.ru/files/linux-2.6.31.6-imq.diff linux-2.6.31.6-imq.diff] и iptables-1.4.4-imq.patch), а также Protocol definitions. |
− | #Патчи и файлы [http://l7-filter.sourceforge.net/HOWTO-kernel | + | #Патчи и файлы [http://l7-filter.sourceforge.net/HOWTO-kernel Layer7] (netfilter-layer7-v2.22.tar.gz). Сюда входят патчи для ядра и для iptables. |
− | #Патчи для [http://fatooh.org/esfq-2.6/ | + | #Патчи (sfq-2.6.24.1.tar.gz) и Protocol definitions (l7-protocols-2009-05-28.tar.gz) для [http://fatooh.org/esfq-2.6/ ESFQ] . Сюда входят патчи для ядра и для iproute.<br>Патч для ядра 2.6.31.6 нашел [https://dev.openwrt.org/browser/trunk/target/linux/generic тут]. |
− | #Исходники [http://ftp.netfilter.org/pub/iptables/ | + | #Исходники [http://ftp.netfilter.org/pub/iptables/ iptables] |
− | #Исходники [http://linux-net.osdl.org/index.php/Iproute2 | + | #Исходники [http://linux-net.osdl.org/index.php/Iproute2 iproure] |
+ | Если не найдете, то можно поискать патчи [https://dev.openwrt.org/browser/trunk/target/linux/generic-2.6 тут] | ||
==Подготовка и компиляция ядра== | ==Подготовка и компиляция ядра== | ||
Берем исходники ядра и кладем их в каталог /usr/src<br /> | Берем исходники ядра и кладем их в каталог /usr/src<br /> | ||
− | <pre>tar - | + | <pre>tar -xjvf linux-2.6.*.*.tar.bz2 /usr/src</pre> |
− | Кладем в каталог /usr/src/linux-2.6. | + | Кладем в каталог /usr/src/linux-2.6.*.* патчи |
− | #linux-2.6. | + | #linux-2.6.*-imq.diff |
− | # | + | #100-netfilter_layer7_2.21.patch |
− | # | + | # 200-sched_esfq.patch. |
Накладывем патчи. | Накладывем патчи. | ||
− | <pre># patch -p1 < linux-2.6. | + | <pre># patch -p1 < linux-2.6.31.6-imq.diff |
− | # patch -p1 < | + | # patch -p1 < 100-netfilter_layer7_2.21.patch |
− | # patch -p1 < | + | # patch -p1 < 200-sched_esfq.patch</pre> |
Далее переписываем из каталога /boot | Далее переписываем из каталога /boot | ||
− | <pre> # cp /boot/config | + | <pre> # cp /boot/@config /usr/src/linux-2.6.31.6/.config</pre> |
И запускаем | И запускаем | ||
+ | <pre>make oldconfig</pre> | ||
+ | Тут мы обычно все принимаем по умолчанию. Просто тупо жмем "Enter" | ||
<pre>make menuconfig</pre> | <pre>make menuconfig</pre> | ||
===IMQ=== | ===IMQ=== | ||
Строка 31: | Строка 35: | ||
**'''IMQ behavior (PRE/POSTROUTING) (IMQ BA)''' | **'''IMQ behavior (PRE/POSTROUTING) (IMQ BA)''' | ||
**'''Number of IMQ devices (4)''' | **'''Number of IMQ devices (4)''' | ||
− | 2. Идем в '''Networking ---> Networking options ---> Network packet filtering framework (Netfilter) ---> | + | 2. Идем в '''Networking support ---> Networking options ---> Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration --->''' |
*Установить | *Установить | ||
**'''<M> IMQ target support''' | **'''<M> IMQ target support''' | ||
− | 3. Идем в '''Networking | + | 3.Идем в '''Networking support ---> Networking options ---> Network packet filtering framework (Netfilter)''' |
− | |||
− | |||
− | |||
* Установить | * Установить | ||
**'''[ ] Network packet filtering debugging''' (убрать звезду) | **'''[ ] Network packet filtering debugging''' (убрать звезду) | ||
+ | |||
===Layer7=== | ===Layer7=== | ||
− | Идем в '''Networking ---> Networking options ---> Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration''' | + | Идем в '''Networking support ---> Networking options ---> Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration''' |
*Установить | *Установить | ||
** '''<M> Layer 7 match support (EXPERIMENTAL)''' | ** '''<M> Layer 7 match support (EXPERIMENTAL)''' | ||
− | ** '''[ | + | ** '''[ ] Layer 7 debugging output''' |
+ | |||
===ESFQ=== | ===ESFQ=== | ||
Идем в '''Networking ---> Networking options ---> QoS and/or fair queueing''' | Идем в '''Networking ---> Networking options ---> QoS and/or fair queueing''' | ||
*Установить | *Установить | ||
**'''<M> Enhanced Stochastic Fairness Queueing (ESFQ)''' | **'''<M> Enhanced Stochastic Fairness Queueing (ESFQ)''' | ||
− | Выходим из menuconfig и сохраняем .config | + | Выходим из menuconfig и сохраняем '''.config''' |
+ | |||
===Компиляция=== | ===Компиляция=== | ||
Делаем | Делаем | ||
Строка 55: | Строка 59: | ||
# make modules_install | # make modules_install | ||
# make install</pre> | # make install</pre> | ||
+ | |||
+ | ==Компиляция iptables== | ||
+ | Опишу тут компиляцию с iptables-1.4.5. <br> | ||
+ | 1. Расспаковываем исходники iptables в папку /usr/local/src | ||
+ | <pre>$ tar -xjf iptables-1.4.5.tar.bz2 /usr/local/src</pre> | ||
+ | 2. Копируем туда патчи для IMQ (iptables-1.4.4-imq.patch)<br> | ||
+ | Для layer7 копируем файлы из папки патча netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward (libxt_layer7.c и libxt_layer7.man) в папку /usr/local/src/iptables-1.4.2/extensions.<br> | ||
+ | 3. Накладываем патчи. | ||
+ | <pre>$ patch -p1 < iptables-1.4.4-imq.patch | ||
+ | </pre> | ||
+ | 4. В директории ./extensions и установить права 755 на файлы | ||
+ | <pre>.IMQ-test | ||
+ | .IMQ-test6</pre> | ||
+ | 5. Конфигурим, компилим и устанавливаем,указывая полный путь до нового ядра. | ||
+ | <pre>$ ./configure --with-ksource=/usr/src/linux/ | ||
+ | $ make | ||
+ | $su make install</pre> | ||
+ | Программа будет установлена в /usr/local<br> | ||
+ | |||
+ | ==Компиляция Protocol definitions== | ||
+ | 1. Распаковываем Protocol definitions в папку /usr/local/src | ||
+ | <pre>$ tar -xzf l7-protocols-2009-05-10.tar.gz /usr/local/src</pre> | ||
+ | 2. Делаем | ||
+ | <pre>$su make install</pre> | ||
+ | |||
+ | ==Компиляция iproute== | ||
+ | 1. Установить пакеты bison-*.i586.rpm и flex-2.*.i586.rpm и | ||
+ | libdb5.1-devel-*.i586.rpm<br> | ||
+ | 2. Выполнить команду | ||
+ | <pre>ln -s /usr/include/db51/db_185.h /usr/include/db_185.h</pre> | ||
+ | 3. Распаковать исходники в /usr/local/src/<br> | ||
+ | 4. Туда же положить файл esfq-iproute2.patch<br> | ||
+ | 5. Выполнить | ||
+ | <pre>$ patch -p1 < esfq-iproute2.patch | ||
+ | $ ./configure | ||
+ | $ make | ||
+ | $ su make install</pre> | ||
+ | 6. Переписать файлы из исходников ./ip/ip и ./tc/tc в директорию /sbin и делаем | ||
+ | <pre>$su chmod 755 /sbin/ip | ||
+ | $su chmod 755 /sbin/tc</pre> | ||
+ | |||
+ | ==FAQ== | ||
+ | '''1.Вопрос:''' Как только загружаем модуль IMQ - валится ядро<br /> | ||
+ | '''Ответ:''' Модуль IMQ не уживается с клиентом DHCP. Но так как это обычно сервер и все ip адреса задаются статически (руками), то лучше вообще деинсталировать пакет клиента DHCP. | ||
+ | ==Полезные ссылки== | ||
+ | # [http://wiki.nix.hu/cgi-bin/twiki/view/IMQ/WebHome IMQ wiki] | ||
+ | # [http://www.mail-archive.com/linuxkernelnewbies@googlegroups.com/msg00008.html L7-filter Kernel Version HOWTO] с описанием инсталляции патча. | ||
+ | # [https://svn.openwrt.org/openwrt/trunk/target/linux/generic-2.6/ Различные патчи для ядра 2.6] |
Текущая версия на 15:38, 15 сентября 2011
Содержание
Для чего все это
Нам надо настроить шейпер - справедливый дележ канала между пользователями интернета. Проблема стоит в том, что на каждого пользователя, поднимается свой интерфейс, поэтому придется использовать IMQ. Также хотелось бы различать различные типы трафика, которые не привязаны к портам, например, torrent. Для этого служит Layer7. И для справедливого деления канала не по количеству каналов (SFQ), а по количеству пользователей нужна очередь ESFQ.
Рассказывать буду на основе kernel 2.6.31.6
Что откуда берем
- Ядро берем с http://kernel.org (linux-2.6.31.6.tar.bz2).
- Патчи IMQ для ядра и iptables c http://www.linuximq.net и http://www.actusa.net/~linuximq/ (linux-2.6.31.6-imq.diff и iptables-1.4.4-imq.patch), а также Protocol definitions.
- Патчи и файлы Layer7 (netfilter-layer7-v2.22.tar.gz). Сюда входят патчи для ядра и для iptables.
- Патчи (sfq-2.6.24.1.tar.gz) и Protocol definitions (l7-protocols-2009-05-28.tar.gz) для ESFQ . Сюда входят патчи для ядра и для iproute.
Патч для ядра 2.6.31.6 нашел тут. - Исходники iptables
- Исходники iproure
Если не найдете, то можно поискать патчи тут
Подготовка и компиляция ядра
Берем исходники ядра и кладем их в каталог /usr/src
tar -xjvf linux-2.6.*.*.tar.bz2 /usr/src
Кладем в каталог /usr/src/linux-2.6.*.* патчи
- linux-2.6.*-imq.diff
- 100-netfilter_layer7_2.21.patch
- 200-sched_esfq.patch.
Накладывем патчи.
# patch -p1 < linux-2.6.31.6-imq.diff # patch -p1 < 100-netfilter_layer7_2.21.patch # patch -p1 < 200-sched_esfq.patch
Далее переписываем из каталога /boot
# cp /boot/@config /usr/src/linux-2.6.31.6/.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) ---> Core Netfilter Configuration --->
- Установить
- <M> IMQ target support
3.Идем в 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.5.
1. Расспаковываем исходники iptables в папку /usr/local/src
$ tar -xjf iptables-1.4.5.tar.bz2 /usr/local/src
2. Копируем туда патчи для IMQ (iptables-1.4.4-imq.patch)
Для layer7 копируем файлы из папки патча netfilter-layer7-v2.22/iptables-1.4.3forward-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.4-imq.patch
4. В директории ./extensions и установить права 755 на файлы
.IMQ-test .IMQ-test6
5. Конфигурим, компилим и устанавливаем,указывая полный путь до нового ядра.
$ ./configure --with-ksource=/usr/src/linux/ $ make $su make install
Программа будет установлена в /usr/local
Компиляция Protocol definitions
1. Распаковываем Protocol definitions в папку /usr/local/src
$ tar -xzf l7-protocols-2009-05-10.tar.gz /usr/local/src
2. Делаем
$su make install
Компиляция iproute
1. Установить пакеты bison-*.i586.rpm и flex-2.*.i586.rpm и
libdb5.1-devel-*.i586.rpm
2. Выполнить команду
ln -s /usr/include/db51/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 и делаем
$su chmod 755 /sbin/ip $su chmod 755 /sbin/tc
FAQ
1.Вопрос: Как только загружаем модуль IMQ - валится ядро
Ответ: Модуль IMQ не уживается с клиентом DHCP. Но так как это обычно сервер и все ip адреса задаются статически (руками), то лучше вообще деинсталировать пакет клиента DHCP.
Полезные ссылки
- IMQ wiki
- L7-filter Kernel Version HOWTO с описанием инсталляции патча.
- Различные патчи для ядра 2.6