Linux.tc: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
== 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 == | == Statistik ausgeben, an welchen Stellen die Filter greifen == | ||
tc -s class ls dev dsl0 | tc -s class ls dev dsl0 |
Version vom 1. November 2005, 10:40 Uhr
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