vyuka:cviceni:y36sps:semestralky:trskaj1

Jan Trska

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:

  1. Herní klienty, dns, ssh
  2. Herní servery
  3. Prohlížení internetu
  4. Apache a jiné
  5. 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)

trskaj1.pdf

~~DISCUSSION~~

  • vyuka/cviceni/y36sps/semestralky/trskaj1.txt
  • Last modified: 2009/06/05 00:09
  • by trskaj1