====== 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): +---------+ | root 1: | +---------+ | +--------------------------------+ | class 1:1 | +--------------------------------+ | | | | | +----+ +----+ +----+ +----+ +----+ |1:10| |1:20| |1:30| |1:40| |1:50| +----+ +----+ +----+ +----+ +----+ Skript pro router: parametr start nastaví pravidla, stop je smaže, stats vypíše informace (jakými třídami proudí data atd..) #!/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 nastavení mark hodnoty pro jednotlivé pakety přes iptables: 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 \\ \\ výtah z TC 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 ] Odkazy: [[http://luxik.cdi.cz/~devik/qos/htb/|HTB home]] [[http://linux.die.net/man/8/tc|tc man page]] [[http://www.root.cz/clanky/htb-jemny-uvod/|HTB jemný úvod (root.cz)]] {{:vyuka:cviceni:y36sps:semestralky:trskaj1.pdf|}} ~~DISCUSSION~~