|
Trafic
shaping cu Kernel 2.4.20, HTB-tools si slackware linux 8.1
Hierarchical
Token Bucket ( HTB ) inlocuieste cu succes Class Based Queueing ( CBQ
) datorita modului de operare precis si usor de inteles pentru toata lumea.
Diferenta fata de CBQ este ca banda se aloca unei ( sau mai multe ) clase
iar in momentul in care banda alocata clasei este depasita ea poate imprumuta
( temporar ) banda dintr-o alta clasa unde nu este folosita la maxim sau
deloc. In plus, fata de CBQ, se pot aloca unul sau mai multi clienti unei
clase. Toate clasele si toti clientii se stabilesc intr-un fisier de configurare.
Printr-o serie de programe ( HTB_Tool ) se poate simplifica configurarea,
monitorizarea operatiunii de alocare de banda. Primul program numit q_parser
citeste un fisier de configurare ( in fisier sunt stabilite clasele, clientii,
limitarile de banda ) si genereaza un script pentru setarile HTB; al doilea
program q_show afiseaza in timp real situatia traficului si a benzii
alocate pentru fiecare clasa/client conform fisierului de configurare.
// Begin disclaimer // Nu sunt responsabil de felul
in care folositi aceasta informatie. Este descrierea pe care am
folosit-o eu si functioneaza in conditiile descrise de mine. Daca
calculatorul pe care instalati & configurati htb-utils o ia razna
sau se defecteaza - nu sunt responsabil pentru acesta. // End disclaimer //
Ca sa intelegeti mai bine cum functioneaza, precum si
pasii care trebuie urmati ca sa folositi cu success HTB-tool, o sa descriu
un exemplu real folosit de mine. Am folosit o banda de 256kbps pe care am
impartit-o la 4 clienti ( minim 48kbps - maxim 64kbps /client). 1.
Pentru kernel 2.4.20 ( este deja patchuit
pentru suport HTB ) se vor selecta urmatoarele optiuni pentru HTB:
#
# QoS and/or fair queueing
#
CONFIG_NET_SCHED=y CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_CSZ=m
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_QOS=y
CONFIG_NET_ESTIMATOR=y
CONFIG_NET_CLS=y
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_ROUTE=y CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_POLICE=y |
2. Binarul tc din pachetul
htb3 trebuie copiat in /sbin
( htb3.6-020525.tgz
).
3. htb_util-0.2.3 (
http://sgi.rdscv.ro/~ionuts/htb-tools ).
- se dezarhiveaza si se
compileaza sursa:
root@slackware:/home/arny#
tar zxvf htb_util-0.2.3.tar.gz
root@slackware:/home/arny# cd htb_util-0.2.3
root@slackware:/home/arny/htb_util-0.2.3# make |
- in urma compilarii
vor rezulta binarele q_parser si q_show.
4. Se editeaza fisierul de configurare.
( un exemplu este in docs/simple.cfg,
tot acolo gasiti si o descriere referitor la cum arata si la ce se refera
fiecare element din simple.cfg.)
--- asa arata fisierul de configurare clienti48-64.cfg
folosit de mine.
( fisierul de configurare poate fi
numit dupa dorinta, eu am folosit acest nume ca sa stiu ca in fisier se
afla clientii cu banda minim garantata 48kps cu urcare max. 64kps; in
cazul in care folositi htb.init
este important numele fisierului ).
// PRECIZARI // Formatul fisierului de configurare este asemanator
cu formatul fisierelor de configurare ale bind-ului. Consumatorii de banda
sunt impartiti in clase. Aceste clase nu pot partaja banda intre ele.
Membrii unei clase (clientii) pot partaja aceeasi banda in functie de
parametrii specificati in fisierul de configurare. O clasa poate contine
unul sau mai multi clienti. O clasa cu caracter special este clasa default
care specifica latimea de banda alocata celor care nu sunt inclusi in
nici o clasa. Rata de transfer se specifica in kbit. Inceputul rindurilor
cu # se considera comentariu. // PRECIZARI //
-------------
// begin config file \\ -------------
#Fisier de configurare
pentru o banda de 256kps impartita la 4 clienti cu minim garantat
48kps cu urcare pina la 64kps.
#se defineste clasa, respectiv canalul mare de 256kps.
class class_1 {
bandwidth 192;
limit 256;
burst 2;
priority 1;
##### clientii cu
configurarile aferente ( valabil ptr toti cei 4 clienti ):
# bandwidth 48 - minim garantat;
# limit 64 - maxim pina unde poate urca;
# burst 2 - nr maxim de kb trimisi odata ( daca nu setati cum trebuie
burst-ul atunci s-ar putea ca limitarile/garantarile sa nu #iasa
chiar cum trebuie; dupa htb-manual "...for 10Mbit on plain
i386 you need burst 12kb" );
# priority 1 - prioritatea clientului in clasa;
# dst - destinatia catre o clasa de IP sau un singur IP;
# - in cazul unui singur IP, reprezentarea arata in felul urmator:
192.168.1.10/32;
# -- daca se doreste limitarea pe un port anume la un singur IP:
192.168.1.10/32 80; - limiteza traficul pe portul 80 (http)
# --- daca se doreste limitarea pe un port anume la o clasa de IP:
192.168.1.0/24 21; - limiteza traficul pe portul 21 (ftp)
# ---- se mai poate folosi si src ( adica sursa traficului ) la
care reprezentarea este asemanatoare cu dst. #####
client client_1 {
bandwidth 48;
limit 64;
burst 2;
priority 1;
dst {
192.168.1.0/24;
};
};
client client_2 {
bandwidth 48;
limit 64;
burst 2;
priority 1;
dst {
192.168.2.0/24;
};
};
client client_3 {
bandwidth 48;
limit 64;
burst 2;
priority 1;
dst {
192.168.3.0/24;
};
};
client client_4 {
bandwidth 48;
limit 64;
burst 2;
priority 1;
dst {
192.168.4.0/24;
};
};
};
##### latimea
de banda a clasei default ( ce nu face parte din nici una din clasele
definite anterior ) #####
class default
{ bandwidth 8; };
------------- \\ end config file // ------------- |
5. Fisierul de configurare se poate
salva unde doriti si va este mai usor de lucrat cu el. Eu am preferat
sa il salvez in acelas director unde se afla binarul q_parser.
6. Se intra in directorul unde se
afla q_parser si se genereaza scriptul cu comanda:
./q_parser
wlan0 192 256 clienti48-64.cfg > script.sh
- se
schimba atributul scriptului in executabil ( chmod
+x script.sh ) si se muta in /etc/rc.d;
- se
editeaza /etc/rc.d/rc.local
in care se trece urmatoarea linie:
/etc/rc.d/script.sh
# la bootare continutul fisierului
stabileste limitarile/garantarile.
7. In acest moment limitarile sunt stabilite si fiecare client foloseste
banda alocata. Cu ajutorul binarului q_show se poate urmari, in timp real,
traficul & ocuparea benzii pentru fiecare client. Se lanseaza comanda
din directorul unde ati compilat htb-tool:
| ./q_show -i wlan0
-f clienti48-64.cfg |
- veti obtine pe consola traficul & ocuparea de banda:
class_1 224.80 2 192 256
client_1 62.25 1 48 64
client_2 51.05 1 48 64
client_3 48.25 1 48 64
client_4 63.25 1 48 64
_default_ 0 0 0 0 |
Pentru cei ce nu inteleg descrierea facuta, sau nu inteleg anumite lucruri,
ii invit sa citeasca :
Linux Advanced Routing & Traffic Control HOWTO http://www.lartc.org
sau http://www.docum.org/;
O prezentare profesionala completa in limba engleza
Implementing Real Time Packet Forwading Policies using HTB.
|