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

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Подготовка и компиляция ядра)
(Подготовка и компиляция ядра)
Строка 14: Строка 14:
 
==Подготовка и компиляция ядра==
 
==Подготовка и компиляция ядра==
 
Берем исходники ядра и кладем их в каталог /usr/src<br />
 
Берем исходники ядра и кладем их в каталог /usr/src<br />
<pre>tar -cjvf linux-2.6.*.*.tar.bz2 /usr/src</pre>
+
<pre>tar -xjvf linux-2.6.*.*.tar.bz2 /usr/src</pre>
 
Кладем в каталог /usr/src/linux-2.6.*.* патчи
 
Кладем в каталог /usr/src/linux-2.6.*.* патчи
 
#linux-2.6.29-imq.diff
 
#linux-2.6.29-imq.diff

Версия 11:59, 20 мая 2009

Для чего все это

Нам надо настроить шейпер - справедливый дележ канала между пользователями интернета. Проблема стоит в том, что на каждого пользователя, поднимается свой интерфейс, поэтому придется использовать IMQ. Также хотелось бы различать различные типы трафика, которые не привязаны к портам, например, torrent. Для этого служит Layer7. И для справедливого деления канала не по количеству каналов (SFQ), а по количеству пользователей нужна очередь ESFQ.
Рассказывать буду на основе kernel 2.6.29.3

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

  1. Ядро берем с http://kernel.org (linux-2.6.29.3.tar.bz2).
  2. Патчи IMQ для ядра и iptables c http://www.linuximq.net и http://www.actusa.net/~linuximq/ (linux-2.6.29-imq.diff и iptables-1.4.3.2-imq.diff), а также Protocol definitions.
  3. Патчи и файлы Layer7 (netfilter-layer7-v2.21.tar.gz). Сюда входят патчи для ядра и для iptables.
  4. Патчи для ESFQ (sfq-2.6.24.1.tar.gz). Сюда входят патчи для ядра и для iproute.
    Патч для ядра 2.6.29 нашел тут.
  5. Исходники iptables
  6. Исходники iproure

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

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

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

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

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

  1. linux-2.6.29-imq.diff
  2. kernel-2.6.25-2.6.28-layer7-2.21.patch из ахива netfilter-layer7-v2.21.tar.gz.
  3. esfq-kernel.patch.

Накладывем патчи.

# patch -p1 < linux-2.6.25-imq.diff
# patch -p1 < kernel-2.6.25-2.6.28-layer7-2.21.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.

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

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