SASA DESIGN

Open Your mind, Open Your Source Code!

Пачване на ядрото с IPMARK, IPCLASSIFY, IPP2P и IPSET

13 юни, 2008 – 3:14 pm

Източник: Myfreesoft forum

Причината за тази статия, са статиите на VladSun Използване на IPSET, IPTABLES и IPMARK и Оптимизация на iptables и tc правила в www.linux-bg.org и по-точно за да може да се възползваме от тях. Ще си позволя направо да го цитирам:

Цитат:
Най-често срещания алгоритъм за разпределяне на трафик между потребители е следния:

1. разделяне на трафика на входящ и изходящ;
2. разделяне на трафика на български и международен чрез подходящо маркиране на пакетите (вж. „Разпределяне на трафик от два (или повече) интернет доставчика“);
3. разделяне на трафика за всеки потребител чрез повторно маркиране на пакетите за всеки вид трафик;

Освен това обикновено се налага да се прави контрол на достъпа на потребителите – чрез използването на iptables правила в PREROUTING или FORWARD веригите.
Проблемът при повечето от така реализирани алгоритми е значителното натоварване на сървъра поради ниската ефективност на набора от използваните правила в iptables и tc.
………………………………………………….
Малката ефективност на този метод е породена от линейното (последователното) обхождане на тези правила за всеки пакет. По този начин всеки пакет минава през около 260 правила, при това само в тези вериги! Още по-лошият вариант, при който няма разделян на изходящ/входящ трафик, броят на правилата обходени от всеки пакет е над 510!

Причината да се ползва IPMARK или IPCLASSIFY e:

    – IPMARK: маркира пакетите, като за стойността на маркера използва стойността на самото IP;
    - IPMARK: приема като параметри 3 неща – IP-то по което ще маркираме и 2 параметъра за управление на получения MARK;
    - IPMARK: IP-то по което ше маркираме се взима директно от пакета и в зависимост от това дали –addr параметъра е src или dst, се взима съответно src
    IP-то или dst IP-то;
    - IPMARK: 2-та параметъра за управление на получения MARK реализират побитово И и ИЛИ върху стойността на IP адреса;

Огромното предимство се състой в това, че не се маркира всеки пакет един по един и след това да се задават n на брой филтри в htb-то. IPCLASSIFY е разбработка на VladSun и разликата спрямо IPMARK се състой в това, че не е нужно да се задава филтър, а самият маркиран пакет знае към кой клас се отнася.

Процедурата по пачването на ядрото е както следва:

1. Сваляне на необходимите ни пакети:

2. Копираме свалените пакети в /usr/src и ги дезархивираме

3. Дезархивираме и инсталираме ipset, т.е.

Код:
[debian ~]#cd /usr/src
[debian src]# tar jxvf ipset-XXXXX.tar.bz2
[debian src]# cd ipset-XXXXX
[debian ipset-XXXXX]# make install

4. Сваляме сорса на ядрото, което искаме да компилираме (в моят случай 2.6.21) и го разархивираме:

Код:
[gaara@debian root]$ su
Password:
[debian ~]# apt-get install linux-source-2.6.21
[debian ~]# cd /usr/src/
[debian src]# tar jxvf linux-source-2.6.21.tar.bz2

5. Копираме IPCLASSIFY в patch-o-matic-ng-20070921/patchlets/ и премахваме iptables

Код:
[debian src]# cp -r IPCLASSIFY/ patch-o-matic-ng-20070921/patchlets/
[debian src]# apt-get remove iptables

6. Поради факта, че netfilter отказва да включи IPMARK в официалната си версия, трябва да свалим и неофициалните пачове, т.е.

Код:
[debian src]# cd patch-o-matic-ng
[debian patch-o-matic-ng]# export KERNEL_DIR=/usr/src/linux-source-2.6.21
[debian patch-o-matic-ng]# export IPTABLES_DIR=/usr/src/iptables-1.3.8
[debian patch-o-matic-ng]# ./runme –download

7. Прилагаме пачовете, като изпълним:

Код:
[debian patch-o-matic-ng]# ./runme IPMARK
[debian patch-o-matic-ng]# ./runme IPCLASSIFY
[debian patch-o-matic-ng]# ./runme set
[debian patch-o-matic-ng]# ./runme ipp2p

Отговаряме с „y“ или натискаме клавиша „Enter“.

8. Задаваме на .IPCLASSIFY-test и .IPMARK-test да са изпълними, които се намират в iptables-1.3.8/extensions/

Код:
[debian src]# cd iptables-1.3.8
[debian iptables-1.3.8]# chmod +x extensions/.IPMARK-test
[debian iptables-1.3.8]# chmod +x extensions/.IPCLASSIFY-test

9. Инсталираме iptables по следният начин:

Код:
[debian iptables-1.3.8]# make KERNEL_DIR=/usr/src/linux-source-2.6.21
[debian iptables-1.3.8]# make install KERNEL_DIR=/usr/src/linux-source-2.6.21

10. Компилираме си ядрото, следвайки тази статия, като опциите, които трябва да включиме са (пътя до тях е Networking-> Networking options-> Network packet filtering framework (Netfilter)-> IP: Netfilter Configuration):

Код:
<M> IPMARK target support
<M> IP set support
(256) Maximum number of IP sets
(1024) Hash size for bindings of IP sets
<M> ipmap set support
<M> macipmap set support
<M> portmap set support
<M> iphash set support
<M> nethash set support
<M> ipporthash set support
<M> iptree set support
<M> iptreemap set support
<M> set match support
<M> SET target support
<M> IPP2P match support
<M> IPCLASSIFY target support

Честито ново ядро с поддръжка на IPMARK, IPCLASSIFY, IPP2P и IPSET

Източник

Напиши коментар