|
Buch -
Scripte
|
|
tcshape #!/bin/sh
echo " Setze Variablen und lösche alte Klassen"
# zu überwachendes Gerät DEV=ppp0
# Uplink Speed (90% von max 512 kbit/s) UPLINK=460 # zurücksetzen vorhandener Ketten und Klassen
iptables -t mangle -F POSTROUTING tc qdisc del dev $DEV root > /dev/null
###############################################################
echo " Erstelle Markierungsrichtlinien..."
# Hier erfolgt die Markierung der Pakete mit Hilfe von iptables. # Anhand dieser Markierung werden diese Pakete in die entsprechenden # Prioritätswarteschlangen einsortiert.
### Pakete mit höchster Priorität werden mit 1 markiert # ICMP, SSH, SIP, RTP, TOS=Min-Delay
iptables -t mangle -o $DEV -A POSTROUTING -p ICMP -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 iptables -t mangle -o $DEV -A POSTROUTING -p TCP -m tos --tos Minimize-Delay -j MARK --set-mark 1
### Pakete mit zweit höchster Priorität 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
### Pakete mit geringster Priorität werden mit 4 markiert # Peer-2-Peer Netze, TOS=Min-Throughput
iptables -t mangle -o $DEV -A POSTROUTING -p TCP -m tos --tos Minimize-Cost -j MARK --set-mark 4
#################################################################### echo " Erstelle Klassen ..."
# Installation einer HTB Warteschlange, (Hierarchy Token Bucket). # Alle Pakete gehen in diese Warteschlange. # Die HTP Warteschlange besitzt die Möglichkeit eine garantierte # Bandbreite verschiedenen Klassen zuzuordnen. # Pakete die nicht markiert worden sind gehen in die Klasse 30 (default 30)
tc qdisc add dev $DEV root handle 1:0 htb default 30
# Erstellen einer Hauptklasse mit der Bezeichnung 1:1, # welche sich unterhalb der HTB Warteschlange befindet. (parent 1:0)
tc class add dev $DEV parent 1:0 classid 1:1 htb rate ${UPLINK}kbit
# Hier werden 4 verschiedene Prioritätsklassen erstellt, # welche sich Unterhalb der Hauptklasse (parent 1:1) befinden. # Jeder Klasse wird eine bestimmte Bandbreite vom maximalen Uplink # garantiert ($[30*UPLINK/100]kbit ceil ${UPLINK}).
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
# Hier erfolgt die Weiterleitung der Pakete in die # einzelnen Klassen anhand Ihrer Markierung (handle 1).
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) # Dies ist hilfreich wenn mehrere Rechner im Netz Bandbreite einer Klasse benutzen # und ein Rechner auf Grund seiner Hardware schneller Pakete empfangen und senden kann.
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
|