Trafic shaping cu Kernel 2.4.22, HTB-tools si slackware linux 9.1
versiunea 0.4

   
      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.22 ( 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. Se descarca sursele htb_util-0.2.4-pre1_cv-1_quantum-1536-sin.tar.bz2 de la http://sgi.rdscv.ro/~ionuts/htb-tools )
        - se dezarhiveaza si se compileaza sursa:

root@slackware:/home/arny# tar -jxvf htb_util-0.2.4-pre1_cv-1_quantum-1536-sin.tar.bz2
root@slackware:/home/arny# cd htb_util-0.2.4-pre1_cv-1_quantum-1536-sin
root@slackware:/home/arny/htb_util-0.2.4-pre1_cv-1_quantum-1536-sin# make
        - in urma compilarii vor rezulta binarele q_parser, q_show si q_checkcfg, binare ce trebuie copiate in /sbin

--- mai exista in pachet un binar tc pe care puteti sa il folositi in cazul in care nu functioneaza cel care exita in /sbin sau htb3.6-020525.tgz.
NU UITATI SA COPIATI BINARUL IN /sbin !

      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 fisieru de configurare eth2-qos.cfg folosit de mine ---
       Este important ca fisierul de configurare sa fie numit eth[0-255]-qos.cfg. (0-255 reprezinta interfata pe care doriti sa aplicati limitarile) in cazul meu fisierul se va numi eth2-qos.cfg .

// 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 256kbps impartita la 4 clienti cu minim garantat 48kbps cu urcare pina la 64kbps.
-se defineste clasa, respectiv canalul mare de 256kbps.
##################################################################

           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 salveaza in /etc/htb.

      6. Cu aceasta versiune de htb-tool nu mai este necesar sa generati scriptul (script.sh) cu limitarile. Datorita lui Sin (Patrascu Eugeniu), cel care a scris un script de pornire, oprire, restartare a htb-tools, se pot aplica limitarile mult mai simplu ca si inainte. Acest script se gaseste in pachetul htb_util-0.2.4-pre1_cv-1_quantum-1536-sin.tar.bz2 si se numeste htb.

            --- eu am redenumit fisierul in rc.htb si l-am copiat in /etc/rc.d
            - in /etc/rc.d/rc.local am trecut linia:
                       /etc/rc.d/rc.htb eth2 start

           La bootare continutul fisierului stabileste limitarile/garantarile pe interfata eth2. Deasemenea rc.htb mai verifica daca este corecta sintaxa din fisierul de configurare si daca kernel-ul are suport de HTB. In cazul in care nu este corect fisierul de configurare sau kernel-ul nu are suport de HTB, scriptul afiseaza mesaje specifice.
ex: " The configuration file contains errors " sau " Your kernel lacks support for HTB. Aborting... "

           ---pentru a opri limitarile se foloseste comanda:
                       /etc/rc.d/rc.htb eth2 stop
           --- pentru a reporni limitarile se foloseste:
                       /etc/rc.d/rc.htb eth2 restart

      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 eth2 -f /etc/htb/eth2-qos.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.


   Multumiri pentru:

         Radu ( radu@hurmuzachi.ro ) - cel care a observat ca descrierea anterioara nu a functionat
         Alin Osan (aline@casa.org.ro) - pentru incurajarile aduse ca sa scriu acest document
         Ionut Sparlea (ionut.spirlea@rdsnet.ro)
         Vasile Laurentiu Stanimir (stanimir@cr.nivis.com)
         Subredu Manuel (diablo@infoiasi.ro)
         Tarhon-Onu Victor (mituc@ac.tuiasi.ro)
         Octavian V. Rusu (mailto:%20octavian@iasi.roedu.net)
         Valeriu Vraciu (mailto:vvraciu@iasi.roedu.ro
          - pentru ca s-au obosit sa scrie acest utilitar pentru noi, cei ce nu vrem sa citim http://www.lartc.org/ ;-).
         Dragos Manac (mailto:%20dragos@sns.ro pentru ca m-a indrumat catre HTB-Tools, mi-a dat un fisier de configurare de-al sau drept model si a contribuit cu cateva observatii.
         Lonely Wolf (wolfy@nobugconsulting.ro) - mici corectii de ortografie
         Mircea Mitu (mircea@unsubscribe.ro) - mici corectii, a contribuit cu citeva adaugari.



This document is copyright (c) arny All rights reserved.
Powered by slackware

Page made with Quanta Plus