Jan Trska
Traffic control
Linuxový router je připojen k internetu a k němu je připojeno několik dalších PC. Na nich běží klientské i serverové aplikace. Spuštěním některých aplikací (např. p2p nebo kombinace jiných) dochází ke značnému snížení odezvy a propustnosti připojení k internetu na všech PC v síti. Úkolem je tedy:
- pomocí HTB (Hierarchy Token Bucket) rozklasifikovat provoz na síti (jedna aplikace nesmí výrazně omezit jiné, podle jejich charakteru nastavit priority, méně důležité mohou být skoro úplně omezeny, ale také klidně i využívat celou šíři pásma, pokud ji jiné aplikace nepotřebují)
- přes iptables přiřadit jednotlivé pakety k třídám
- z toho vytvořit skript, který se bude automaticky spouštět na routeru (možnost nastavení výchozího stavu přes parametr skriptu)
Schválení: ANO
Jednotlivé třídy:
- Herní klienty, dns, ssh
- Herní servery
- Prohlížení internetu
- Apache a jiné
- bittorent, dc, …
takhle nějak vypadá navrhnutý strom (na každém z listů je ještě zavěšeno sfq): <HTML> +———+
root 1: |
+———+
|
+——————————–+
class 1:1 |
+——————————–+
| | | | |
+—-+ +—-+ +—-+ +—-+ +—-+
1:10 | 1:20 | 1:30 | 1:40 | 1:50 |
+—-+ +—-+ +—-+ +—-+ +—-+ </HTML>
Skript pro router: parametr start nastaví pravidla, stop je smaže, stats vypíše informace (jakými třídami proudí data atd..) <HTML> #!/bin/sh I=vlan1 TQA=“tc qdisc add dev $I” TCA=“tc class add dev $I” TFA=“tc filter add dev $I” Q=“sfq perturb 10”
case “$1” in start)
tc qdisc del dev $I root 2>/dev/null $TQA root handle 1: htb default 40 $TCA parent 1: classid 1:1 htb rate 1060kbit ceil 1060kbit
# herni klienty, dns
$TCA parent 1:1 classid 1:10 htb rate 400kbit ceil 1060kbit prio 1 quantum 1500 $TQA parent 1:10 handle 10: $Q $TFA parent 1: prio 1 protocol ip handle 1 fw flowid 1:10
# herni servery
$TCA parent 1:1 classid 1:20 htb rate 400kbit ceil 1060kbit prio 2 quantum 1500 $TQA parent 1:20 handle 20: $Q $TFA parent 1: prio 2 protocol ip handle 2 fw flowid 1:20
# www
$TCA parent 1:1 classid 1:20 htb rate 120kbit ceil 1060kbit prio 3 quantum 1500 $TQA parent 1:20 handle 20: $Q $TFA parent 1: prio 3 protocol ip handle 3 fw flowid 1:30
# www 1MB+, apache, default
$TCA parent 1:1 classid 1:40 htb rate 80kbit ceil 1060kbit prio 3 quantum 1500 $TQA parent 1:40 handle 40: $Q $TFA parent 1: prio 4 protocol ip handle 4 fw flowid 1:40
# porty 1024+, dns 2KB+
$TCA parent 1:1 classid 1:50 htb rate 60kbit ceil 1000kbit prio 4 quantum 1500 $TQA parent 1:50 handle 50: $Q $TFA parent 1: prio 5 protocol ip handle 5 fw flowid 1:50
;;
stop)
tc qdisc del dev $I root 2>/dev/null tc qdisc del dev $I ingress 2>/dev/null ;;
stats)
tc -s -d qdisc ls dev $I tc -s -d class ls dev $I
esac </HTML>
nastavení mark hodnoty pro jednotlivé pakety přes iptables:
<HTML>
iptables -t mangle -A QOS -p tcp -m mport –dports 80,443 -m bcount –range 0x0-0xfffff -j MARK –set-mark 2
iptables -t mangle -A QOS -p tcp -m mport –dports 80,443 -m bcount –range 0x100000 -j MARK –set-mark 4
iptables -t mangle -A QOS -p tcp -m mport –dports 80,443 -j RETURN
iptables -t mangle -A QOS -p udp –dport 53 -m bcount –range 0x0-0x7ff -j MARK –set-mark 1
iptables -t mangle -A QOS -p tcp –dport 53 -m bcount –range 0x0-0x7ff -j MARK –set-mark 1
iptables -t mangle -A QOS -p udp –dport 53 -m bcount –range 0x800 -j MARK –set-mark 5
iptables -t mangle -A QOS -p tcp –dport 53 -m bcount –range 0x800 -j MARK –set-mark 5
iptables -t mangle -A QOS -p tcp –dport 53 -j RETURN
iptables -t mangle -A QOS -p udp –dport 53 -j RETURN
iptables -t mangle -A QOS -p tcp –sport 80 -j MARK –set-mark 4
iptables -t mangle -A QOS -p tcp –sport 80 -j RETURN
iptables -t mangle -A QOS -p tcp –dport 22 -j MARK –set-mark 1
iptables -t mangle -A QOS -p tcp –dport 22 -j RETURN
iptables -t mangle -A QOS -p tcp –sport 6000 -j MARK –set-mark 2
iptables -t mangle -A QOS -p tcp –sport 6000 -j RETURN
iptables -t mangle -A QOS -p tcp –sport 6001 -j MARK –set-mark 2
iptables -t mangle -A QOS -p tcp –sport 6001 -j RETURN
iptables -t mangle -A QOS -p udp –sport 27005 -j MARK –set-mark 1
iptables -t mangle -A QOS -p udp –sport 27005 -j RETURN
iptables -t mangle -A QOS -p udp –dport 27005 -j MARK –set-mark 2
iptables -t mangle -A QOS -p udp –dport 27005 -j RETURN
iptables -t mangle -A QOS -p tcp –sport 6112 -j MARK –set-mark 1
iptables -t mangle -A QOS -p tcp –sport 6112 -j RETURN
iptables -t mangle -A QOS -p tcp –dport 7777 -j MARK –set-mark 1
iptables -t mangle -A QOS -p tcp –dport 7777 -j RETURN
iptables -t mangle -A QOS -p tcp –sport 7777 -j MARK –set-mark 2
iptables -t mangle -A QOS -p tcp –sport 7777 -j RETURN
iptables -t mangle -A QOS -p udp –dport 1024:65535 -j MARK –set-mark 5
iptables -t mangle -A QOS -p udp –dport 1024:65535 -j RETURN
iptables -t mangle -A QOS -p tcp –dport 1024:65535 -j MARK –set-mark 5
iptables -t mangle -A QOS -p tcp –dport 1024:65535 -j RETURN
iptables -t mangle -A QOS -j MARK –set-mark 4
</HTML>
výtah z TC
<HTML>
tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]
tc class [ add | change | replace ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ]
tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id
tc [-s | -d ] qdisc show [ dev DEV ]
tc [-s | -d ] class show dev DEV
tc filter show dev DEV
pro htb: tc qdisc … dev dev ( parent classid | root) [ handle major: ] htb [ default minor-id ] tc class … dev dev parent major:[minor] [ classid major:minor ] htb rate rate [ ceil rate ] [ burst bytes ] [ cburst bytes ] [ prio priority ] </HTML>
Odkazy: HTB home tc man page HTB jemný úvod (root.cz)
~~DISCUSSION~~