Linux.tc
Das Script
# # Konfigurationsscript eines Bandbreitenmanagment mit Hilfe von TC # # # Gestartet wird diese Datei mit Hilfe der /etc/rc.d/init.d/tcshape # # Description: Script zum Konfigurieren eines Bandbreitenmanagment # Autor: Sven Neukirchner <sven@konabi.de> # mit Hilfe von Newsgroups und Beispielen aus dem Internet # http://www.naxan.de/Linux/MiniQoS.html Dank an Frank Nodes # http://www.robert-peter.de/yats/ Dank an Robert Peter # # Date 26.05.2005 # Version: 1.0 ohne L7 Filter (http://l7-filter.sourceforge.net) # Lizenz: GPL # benoetigt: iptable, tc/iproute2 # # Loeschen der Warteschlangen und Klssen geschieht im Script /etc/init.d/tcshape # # mit "tc -s -d class show dev ppp0" kann man sich die einezelnen Klassen anschauen # oder man verwendet ein schoens Perlscipt /usr/local/bin/tcshape.pl # das Script sammelt die Daten und erzeugt eine HTML Datei # Autor des Scriptes ist mir unbekannt Download unter www.konabi.de/download/download.php # #
echo " Erstelle Markierungsrichtlinien..."
# zu ueberwachendes Geraet DEV=dsl0
# Uplink Speed (90% von Fullspeed, damit der Modembuffer nicht ueberlaeuft) UPLINK=460
#### Prioritaetsmarke fuer ausgehende Packete setzen ########################################
iptables -A PREROUTING -t mangle -s 192.168.115.191 -j MARK --set-mark 4
### - Prioritaet 1 - Packete die hoechste Prio bekommen sollen werden mit 1 markiert (--set-mark 1) ### #SSH, SIP, RTP, TOS=Minimize Delay iptables -t mangle -o $DEV -A POSTROUTING -p ICMP -j MARK --set-mark 1 iptables -t mangle -o $DEV -A POSTROUTING -p TCP --dport 22 -j MARK --set-mark 1 iptables -t mangle -o $DEV -A POSTROUTING -p UDP --dport 5060 -j MARK --set-mark 1 iptables -t mangle -o $DEV -A POSTROUTING -p UDP --sport 10000:10010 -j MARK --set-mark 1
### Prioritaet 2 Packete die zweithoechste Prio bekommen sollen werden mit 2 markiert ### # TCP ACKs, TOS= Max Throughput iptables -t mangle -o $DEV -A POSTROUTING -p TCP -m length --length :64 -j MARK --set-mark 2 iptables -t mangle -o $DEV -A POSTROUTING -p TCP -m tos --tos Maximize-Throughput -j MARK --set-mark 2
### Prioritaet 3 - Standard ###
## Prioritaet 4 - Packete die geringste Prio bekommen sollen werden mit 4 markiert ### # EMULE, TOS=Min Throughput iptables -t mangle -o $DEV -A POSTROUTING -p TCP --dport 4661 -j MARK --set-mark 4 iptables -t mangle -o $DEV -A POSTROUTING -p TCP --dport 4662 -j MARK --set-mark 4 iptables -t mangle -o $DEV -A POSTROUTING -p UDP --dport 4672 -j MARK --set-mark 4 iptables -t mangle -o $DEV -A POSTROUTING -p TCP -m tos --tos Minimize-Cost -j MARK --set-mark 4
#################################################################################
tc qdisc del dev $DEV root
echo " Erstelle Klassen ..."
# Installation einer HTB Warteschlange, (Hierarchy Token Bucket) # alle Packete gehen in diese Warteschlange # die HTP Warteschlange besitzt die Moeglichkeit garanierte Bandbreite # verschiedenen Klassen zuzuordnen # Packete die nicht markiert worden sind gehen in die Klasse 30 (default 30) tc qdisc add dev $DEV root handle 1: htb default 30
# Erstellen einer Hauptklasse in der alle Packete gelangen tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit
# Erstellen von Unterklassen und Zuordnung von garanierten min Bandbreiten bis max Bandbreite # $[50*UPLINK/100] miniumum garantierter Durchsatz 50% vom Uplink # ${UPLINK} maximaler Durchsatz entspricht Interface # classid ist name der Klasse # parent 1:1 Unterklasse (classid) ist an uebergeordnete Klasse parent 1:1 angeschlossen # prio ist dafür zustaendig in welcher Reihenfolge freie Bandbreite # an die einzelnen Klassen vergeben wird # (die hoehere Klasse bekommt zuerst Bandbreite wenn Bandbreite verfuegbar ist)
tc class add dev $DEV parent 1:1 classid 1:10 htb rate $[50*UPLINK/100]kbit ceil ${UPLINK}kbit prio 1 tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[30*UPLINK/100]kbit ceil ${UPLINK}kbit prio 2 tc class add dev $DEV parent 1:1 classid 1:30 htb rate $[20*UPLINK/100]kbit ceil ${UPLINK}kbit prio 3 tc class add dev $DEV parent 1:1 classid 1:40 htb rate $[10*UPLINK/100]kbit ceil ${UPLINK}kbit prio 4
# Packete die von Firewall mit 1 markiert worden sind (handle 1) werden an Klasse 1:10 weitergeleitet usw...
tc filter add dev $DEV protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:10 tc filter add dev $DEV protocol ip parent 1:0 prio 2 handle 2 fw flowid 1:20 tc filter add dev $DEV protocol ip parent 1:0 prio 3 handle 3 fw flowid 1:30 tc filter add dev $DEV protocol ip parent 1:0 prio 4 handle 4 fw flowid 1:40
# alle Hosts einer Klasse werden gleich behandelt (SFQ Stochastic FAIRNESS QUEUE) # kommt zum Einsatz wenn z.B. meherer Rechner im Netz Bandbreite einer Klasse benutzen # und ein Rechner auf Grund seiner Hardware schneller Packete empfanggen und senden kann # hierdurch wird verhindert dass dieser Rechner den anderen rechnern die Bandbreite enzieht
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10 tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10 tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10 tc qdisc add dev $DEV parent 1:40 handle 40: sfq perturb 10
Statistik ausgeben, an welchen Stellen die Filter greifen
tc -s class ls dev dsl0