Testowanie czy HTB będzie działać
Wykonaj poniższe polecenia, najprawdopodobniej uzyskasz wyniki inne niż poniżej ale generalne jeżeli nie pojawi się błąd będzie znaczyło że HTB działa.
proxy:~# tc qdisc show qdisc pfifo_fast 0: dev eth0 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 qdisc pfifo_fast 0: dev eth1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 qdisc pfifo_fast 0: dev tun0 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 proxy:~# tc filter show proxy:~# tc class show proxy:~#
Przykład nie działania HTB wykryty powyższymi komendami:
terminal-3-67:~# tc qdisc show RTNETLINK answers: Invalid argument Dump terminated
Przeglądanie opcji pomocy
terminal-3-67:~# tc help Usage: tc [ OPTIONS ] OBJECT { COMMAND | help } where OBJECT := { qdisc | class | filter | action } OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] | -b[atch] file }
terminal-3-67:~# tc qdisc help Usage: tc qdisc [ add | del | replace | change | get ] dev STRING [ handle QHANDLE ] [ root | ingress | parent CLASSID ] [ estimator INTERVAL TIME_CONSTANT ] [ [ QDISC_KIND ] [ help | OPTIONS ] ] tc qdisc show [ dev STRING ] [ingress] Where: QDISC_KIND := { [p|b]fifo | tbf | prio | cbq | red | etc. } OPTIONS := ... try tc qdisc addhelp
Skrypt kasujący wszystkie ustawienia HTB
Przy testowaniu poniższych skryptów (albo do wyłączania HTB) przyda się krótki skrypt wyłączający wszelkie ustawienia HTB. Dla każdego posiadanego interfejsu musisz wpisać komendę tc qdisc del root dev interfejs .
#! /bin/bash tc qdisc del root dev eth0 tc qdisc del root dev eth1 tc qdisc del root dev tun0
Krótka teoria
Zakładanie filtrów w ogólności polega na:
- Wykasowaniu wszystkich poprzednich ustawień
- utworzeniu głównej kolejki pakietów dla interfejsu (będą do niej trafiać wszystkie pakiety przychodzące na interfejs),
- Tworzymy główną klasę dla interfejsu, będzie ona określać maksymalny transfer do osiągnięcia na interfejsie,
Najprostsza sytuacja -dwa komputery i jedno łącze
Przykład 1
Oba komputery dostają połowę pasma z Internetu, niezależnie od tego, czy drugi komputer korzysta z niego czy nie.
# zniszczenie wszystkich poprzednich ustawień, bardzo przydatne tc qdisc del root dev eth1 tc qdisc add dev eth1 root handle 1:0 htb # klasy zbierające ruch dla poszczególnych kompów tc class add dev eth1 parent 1:1 classid 1:4 htb rate 3300kbit ceil 3300kbit tc class add dev eth1 parent 1:1 classid 1:5 htb rate 3300kbit ceil 3300kbit ### przypisanie ruchu do klass tc filter add dev eth1 protocol ip parent 1:0 u32 match ip dst 10.0.0.42 flowid 1:4 tc filter add dev eth1 protocol ip parent 1:0 u32 match ip dst 10.0.0.10 flowid 1:5
[root@ziutus programy]# ./ttcp -r -s -f kbit ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp ttcp-r: socket ttcp-r: accept from 212.191.200.8 ttcp-r: 10131000 bytes in 25.01 real seconds = 3164.72 Kbit/sec +++ ttcp-r: 6858 I/O calls, msec/call = 3.73, calls/sec = 274.21 ttcp-r: 0.0user 0.1sys 0:25real 0% 0i+0d 0maxrss 0+2pf 0+0csw
Przykład 2 – podział pasma na dwa komputery z pobieraniem wolnego pasma
# zniszczenie wszystkich poprzednich ustawień, bardzo przydatne tc qdisc del root dev eth1 #tc qdisc del root dev eth0 tc qdisc add dev eth1 root handle 1:0 htb # utworzenie klasy rodzica (głównej) tc class add dev eth1 parent 1:0 classid 1:1 htb rate 6600kbit ceil 6600kbit # klasy zbierające ruch dla poszczególnych kompów tc class add dev eth1 parent 1:1 classid 1:4 htb rate 3300kbit ceil 6600kbit tc class add dev eth1 parent 1:1 classid 1:5 htb rate 3300kbit ceil 6600kbit ### przypisanie ruchu do klass tc filter add dev eth1 protocol ip parent 1:0 u32 match ip dst 10.0.0.42 flowid 1:4 tc filter add dev eth1 protocol ip parent 1:0 u32 match ip dst 10.0.0.10 flowid 1:5 proxy:~# tc class show dev eth1 class htb 1:1 root rate 6600Kbit ceil 6600Kbit burst 10046b cburst 10046b class htb 1:4 parent 1:1 prio 0 rate 3300Kbit ceil 6600Kbit burst 5823b cburst 10046b class htb 1:5 parent 1:1 prio 0 rate 3300Kbit ceil 6600Kbit burst 5823b cburst 10046b
Statystyki działania podziału pasma
Przeglądanie statystyk odbywa się przez wydanie komendy tc -s -d z podaniem obiektu który nas interesuje:
terminal-3-67:/data1/szkolenia/linux_serwer_1/skrypty# tc -s -d class show dev eth0 class htb 2:1 root rate 9900Kbit ceil 9900Kbit burst 13972b/8 mpu 0b overhead 0b cburst 13972b/8 mpu 0b overhead 0b level 7 Sent 8231666 bytes 11698 pkts (dropped 0, overlimits 0) rate 41272bit 31pps lended: 7335 borrowed: 0 giants: 0 tokens: 11477 ctokens: 11477
W Internecie
- http://luxik.cdi.cz/~devik/qos/htb– strona domowa HTB (język angielski).
- http://docum.org – dokumentacja i przykłady stosowania.
- http://lukasz.bromirski.net/docs/translations/lartc-pl.txt – Kształtowanie Ruchu i Zaawansowany Routing HOWTO, podstawowy dokument dla każdego sieciowca,