Наложение патчей IMQ, ESFQ и Layer7: различия между версиями

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Компиляция iptables)
(Компиляция iproute)
 
(не показана 41 промежуточная версия этого же участника)
Строка 1: Строка 1:
*Эта статья еще не закончена
 
 
==Для чего все это==
 
==Для чего все это==
 
Нам надо настроить шейпер - справедливый дележ канала между пользователями интернета. Проблема стоит в том, что на каждого пользователя, поднимается свой интерфейс, поэтому придется использовать [http://www.linuximq.net/ IMQ]. Также хотелось бы различать различные типы трафика, которые не привязаны к портам, например, torrent. Для этого служит [http://l7-filter.sourceforge.net/HOWTO-kernel Layer7]. И для справедливого деления канала не по количеству каналов (SFQ), а по количеству пользователей нужна очередь [http://fatooh.org/esfq-2.6/ ESFQ].<br />
 
Нам надо настроить шейпер - справедливый дележ канала между пользователями интернета. Проблема стоит в том, что на каждого пользователя, поднимается свой интерфейс, поэтому придется использовать [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.23'''
+
Рассказывать буду на основе  '''kernel 2.6.31.6'''
  
 
==Что откуда берем==
 
==Что откуда берем==
#Ядро берем с http://kernel.org  (linux-2.6.23.tar.bz2).
+
#Ядро берем с 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.23-imq.diff и iptables-1.3.x-imq.diff), а также Protocol definitions.
+
#Патчи 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 Layer7] (netfilter-layer7-v2.14.tar.gz). Сюда входят патчи для ядра и для  iptables.
+
#Патчи и файлы  [http://l7-filter.sourceforge.net/HOWTO-kernel Layer7] (netfilter-layer7-v2.22.tar.gz). Сюда входят патчи для ядра и для  iptables.
#Патчи для [http://fatooh.org/esfq-2.6/ ESFQ] (esfq-2.6.21.5.tar.gz). Сюда входят патчи для ядра и для iproute.
+
#Патчи (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/ 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 тут]
  
 
==Подготовка и компиляция ядра==
 
==Подготовка и компиляция ядра==
 
Берем исходники ядра и кладем их в каталог /usr/src<br />
 
Берем исходники ядра и кладем их в каталог /usr/src<br />
<pre>tar -cjvf linux-2.6.23.tar.bz2 /usr/src</pre>
+
<pre>tar -xjvf linux-2.6.*.*.tar.bz2 /usr/src</pre>
Кладем в каталог /usr/src/linux-2.6.23 патчи
+
Кладем в каталог /usr/src/linux-2.6.*.* патчи
#linux-2.6.23-imq.diff
+
#linux-2.6.*-imq.diff
#kernel-2.6.22-layer7-2.14.patch из ахива netfilter-layer7-v2.14.tar.gz.
+
#100-netfilter_layer7_2.21.patch
#esfq-kernel.patch из архива esfq-2.6.21.5.tar.gz.
+
# 200-sched_esfq.patch.
 
Накладывем патчи.
 
Накладывем патчи.
<pre># patch -p1 < linux-2.6.23-imq.diff
+
<pre># patch -p1 < linux-2.6.31.6-imq.diff
# patch -p1 < kernel-2.6.22-layer7-2.14.patch
+
# patch -p1 < 100-netfilter_layer7_2.21.patch
# patch -p1 < esfq-kernel.patch</pre>
+
# patch -p1 < 200-sched_esfq.patch</pre>
 
Далее переписываем из каталога /boot  
 
Далее переписываем из каталога /boot  
<pre> # cp /boot/config-2.6.23 /usr/src/linux-2.6.23/.config</pre>
+
<pre> # cp /boot/@config /usr/src/linux-2.6.31.6/.config</pre>
 
И запускаем  
 
И запускаем  
 
<pre>make oldconfig</pre>
 
<pre>make oldconfig</pre>
Строка 35: Строка 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)  --->         IP: Netfilter Configuration  --->'''
+
2. Идем в '''Networking support ---> Networking options  ---> Network packet filtering framework (Netfilter)  ---> Core Netfilter Configuration  --->'''
 
*Установить
 
*Установить
 
**'''<M>    IMQ target support'''
 
**'''<M>    IMQ target support'''
3. Идем в '''Networking ---> Networking options  ---> Network packet filtering framework (Netfilter)  --->        IPv6: Netfilter Configuration (EXPERIMENTAL)  --->'''
+
3.Идем в '''Networking support  ---> Networking options  ---> Network packet filtering framework (Netfilter)'''  
*Установить
 
** '''<M>    IMQ target support'''
 
4.Идем в '''Networking ---> 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)'''
Строка 63: Строка 61:
  
 
==Компиляция iptables==
 
==Компиляция iptables==
 +
Опишу тут компиляцию с iptables-1.4.5. <br>
 
1. Расспаковываем исходники iptables в папку /usr/local/src
 
1. Расспаковываем исходники iptables в папку /usr/local/src
<pre># tar -xjf iptables-1.3.8.tar.bz2 /usr/local/src</pre>
+
<pre>$ tar -xjf iptables-1.4.5.tar.bz2 /usr/local/src</pre>
2. Копируем туда патчи для IMQ (iptables-1.3.x-imq.diff) и для layer7 (iptables-for-kernel-pre2.6.20-layer7-2.14.patch)<br>
+
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. Накладываем патчи.
 
3. Накладываем патчи.
<pre>#patch -p1 < iptables-1.3.x-imq.diff
+
<pre>$ patch -p1 < iptables-1.4.4-imq.patch
# patch -p1 < iptables-for-kernel-pre2.6.20-layer7-2.14.patch</pre>
+
</pre>
 
4. В директории ./extensions и установить права 755 на файлы
 
4. В директории ./extensions и установить права 755 на файлы
 
<pre>.IMQ-test
 
<pre>.IMQ-test
.IMQ-test6
+
.IMQ-test6</pre>
.layer7-test</pre>
+
5. Конфигурим, компилим и устанавливаем,указывая полный путь до нового ядра.
5. Компилим и устанавливаем
+
<pre>$ ./configure --with-ksource=/usr/src/linux/
<pre># make
+
$ make
# make install</pre>
+
$su make install</pre>
Программа будет установлена в /usr/local
+
Программа будет установлена в /usr/local<br>
6. Переписать l7-protocols в /etc
+
 
 +
==Компиляция 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==
 
==Компиляция iproute==
1. Установить пакеты bison-2.3-1mdv2007.0.i586.rpm и flex-2.5.4a-25mdv2007.0.i586.rpm и
+
1. Установить пакеты bison-*.i586.rpm и flex-2.*.i586.rpm и
libdb4.2-devel-4.2.52-11mdv2007.0.i586.rpm<br>
+
libdb5.1-devel-*.i586.rpm<br>
 
2. Выполнить команду
 
2. Выполнить команду
<pre>ln -s /usr/include/db4/db_185.h /usr/include/db_185.h</pre>
+
<pre>ln -s /usr/include/db51/db_185.h /usr/include/db_185.h</pre>
 
3. Распаковать исходники в /usr/local/src/<br>
 
3. Распаковать исходники в /usr/local/src/<br>
 
4. Туда же положить файл esfq-iproute2.patch<br>
 
4. Туда же положить файл esfq-iproute2.patch<br>
Строка 90: Строка 96:
 
$ make
 
$ make
 
$ su make install</pre>
 
$ su make install</pre>
6. Переписать файлы из исходников ./ip/ip и ./tc/tc в директорию /sbin
+
6. Переписать файлы из исходников ./ip/ip и ./tc/tc в директорию /sbin и делаем
 +
<pre>$su chmod 755 /sbin/ip
 +
$su chmod 755 /sbin/tc</pre>
  
 
==FAQ==
 
==FAQ==
Строка 97: Строка 105:
 
==Полезные ссылки==
 
==Полезные ссылки==
 
# [http://wiki.nix.hu/cgi-bin/twiki/view/IMQ/WebHome IMQ wiki]
 
# [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

Что откуда берем

  1. Ядро берем с http://kernel.org (linux-2.6.31.6.tar.bz2).
  2. Патчи 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.
  3. Патчи и файлы Layer7 (netfilter-layer7-v2.22.tar.gz). Сюда входят патчи для ядра и для iptables.
  4. Патчи (sfq-2.6.24.1.tar.gz) и Protocol definitions (l7-protocols-2009-05-28.tar.gz) для ESFQ . Сюда входят патчи для ядра и для iproute.
    Патч для ядра 2.6.31.6 нашел тут.
  5. Исходники iptables
  6. Исходники iproure

Если не найдете, то можно поискать патчи тут

Подготовка и компиляция ядра

Берем исходники ядра и кладем их в каталог /usr/src

tar -xjvf linux-2.6.*.*.tar.bz2 /usr/src

Кладем в каталог /usr/src/linux-2.6.*.* патчи

  1. linux-2.6.*-imq.diff
  2. 100-netfilter_layer7_2.21.patch
  3. 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.

Полезные ссылки

  1. IMQ wiki
  2. L7-filter Kernel Version HOWTO с описанием инсталляции патча.
  3. Различные патчи для ядра 2.6