ćwiczenia z podziału pasma (HBT)

Contents

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 add  help

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

Dodaj komentarz