Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
vyuka:cviceni:y36sps:semestralky:trskaj1 [2009/05/21 15:49] – vytvořeno trskaj1 | vyuka:cviceni:y36sps:semestralky:trskaj1 [2009/06/05 00:09] (current) – trskaj1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== 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í: | ||
+ | |||
+ | |||
+ | 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=" | ||
+ | TCA=" | ||
+ | TFA=" | ||
+ | Q="sfq perturb 10" | ||
+ | |||
+ | case " | ||
+ | start) | ||
+ | tc qdisc del dev $I root 2>/ | ||
+ | $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>/ | ||
+ | tc qdisc del dev $I ingress 2>/ | ||
+ | ;; | ||
+ | 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: | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Odkazy: | ||
+ | [[http:// | ||
+ | [[http:// | ||
+ | [[http:// | ||
+ | |||
+ | {{: | ||
~~DISCUSSION~~ | ~~DISCUSSION~~ |