Hallo, Ich habe bei mir zu Hause schon lange das Problem Traffic Shaping auf meinem Debian Router vor mich hergeschoben, als es damals vor ca. einem halben Jahr nicht auf Anhieb funktionierte. Auch heute habe ich noch einige Probleme das ganze zum Laufen zu kriegen.
Mein Skript basiert auf einem Skript aus der c't vom 18.11.2002. 1. Wie kann ich am besten überprüfen, ob mein Skript auch wirklich tut, was es sollte, ich habe bisher mich einmal an der Uni eingeloggt und ein paar Tests durchgeführt, die eigentlich gut aussahen, aber etwas genauer möchte ich es schon noch wissen. 2. Ich habe einmal per iptraf auf dem Router geschaut, wie der Traffic so aussieht, der Upload war durch ein scp und ein Webserver-Zugriff ausgelastet, doch wenn ich gleichzeitig noch eine Datei herunterlade komme ich bei weitem nicht auf die Downloadrate, die ich eigentlich haben sollte (ungefähr 7 kByte statt 30-40). Was läuft hier wohl krumm? I. Edonkey-Clients sollen beim Upload massiv eingeschränkt werden, mit der c't Lösung, die wie folgt aussieht: iptables -A POSTROUTING -t mangle -o $DEV -p tcp --dport 4662 -j MARK --set-mark 13 und iptables -A POSTROUTING -t mangle -o $DEV -p tcp --sport 4662 -j MARK --set-mark 13 habe ich laut einem Kollegen das Problem, dass Clients die nicht auf diesem Port laufen von der Regel nicht betroffen sind. Er schlug mir vor für all die Pakete auf dem Desktop, auf dem eDonkey läuft, das ToS zu setzen und dann am Router nach diesem zu filtern. Ich veruschte das nun mit iptables -A OUTPUT -m owner --uid-owner $OVERNET_USERID -j TOS --set-tos 0x08 doch so kommt eine Fehlermeldung, wegen einem falschen Argument, wie geht das richtig?? 1. Mit der c't eDonkey-Lösung habe ich auch noch das Problem, dass der Upload zwar auf den vorgegebenen Wert gedrosselt wird, aber der Download gleichzeitig auf 0 sinkt, daran hat der betreffende User im Netz natürlich keine Freude, woran könnte das liegen? Wäre super wenn mir jemand zu einer der Fragen eine Antwort hätte... Das Skript befindet sich im Anhang... Das Port-Forwarding usw. befindet sich in einem anderen Skript, aber das sollte für dieses Problem ja eigentlich unwesentlich sein, oder? Grüsse und vielen Dank Patrick
#!/bin/sh TC_BIN="/sbin/tc" DEV="eth1" UP_RATE="125kbit" IPTABLES=/sbin/iptables case "$1" in start) # Delete old configuration echo "Delete old configuration.." $IPTABLES -F -t mangle $TC_BIN qdisc del dev $DEV root 2> /dev/null > /dev/null $TC_BIN qdisc del dev $DEV ingress 2> /dev/null > /dev/null # Root echo "Creating qdisc.." $TC_BIN qdisc add dev $DEV root handle 1:0 htb default 12 echo "Creating classes.." # Hauptklasse $TC_BIN class add dev $DEV parent 1:0 classid 1:1 htb \ rate $UP_RATE ceil $UP_RATE # Klasse fuer ACK $TC_BIN class add dev $DEV parent 1:1 classid 1:10 htb \ rate 10kbit ceil $UP_RATE prio 0 # Klasse fuer SSH $TC_BIN class add dev $DEV parent 1:1 classid 1:11 htb \ rate 30kbit ceil $UP_RATE prio 1 # Klasse fuer Webserver $TC_BIN class add dev $DEV parent 1:1 classid 1:12 htb \ rate 30kbit ceil $UP_RATE prio 2 # Klasse fuer normalen Traffic $TC_BIN class add dev $DEV parent 1:1 classid 1:13 htb \ rate 45kbit ceil $UP_RATE prio 3 # Klasse fuer Bulk $TC_BIN class add dev $DEV parent 1:1 classid 1:14 htb \ rate 8kbit ceil $UP_RATE prio 4 # Klasse fuer eDonkey $TC_BIN class add dev $DEV parent 1:1 classid 1:15 htb \ rate 1kbit ceil 8kbit prio 5 echo "Creating iptables MARK rules.." # ACKs $IPTABLES -A POSTROUTING -t mangle -o $DEV -p tcp \ -m length --length :64 -j MARK --set-mark 10 # SSH $IPTABLES -A POSTROUTING -t mangle -o $DEV -p tcp --dport 22 \ -j MARK --set-mark 11 # Webserver $IPTABLES -A POSTROUTING -t mangle -o $DEV -p tcp --dport 80 \ -j MARK --set-mark 12 # SMTP $IPTABLES -A POSTROUTING -t mangle -o $DEV -p tcp --dport 25 \ -j MARK --set-mark 14 # eDonkey $IPTABLES -A POSTROUTING -t mangle -o $DEV -p tcp --dport 4662 \ -j MARK --set-mark 15 $IPTABLES -A POSTROUTING -t mangle -o $DEV -p tcp --sport 4662 \ -j MARK --set-mark 15 $TC_BIN filter add dev $DEV parent 1:0 prio 0 protocol ip \ handle 10 fw flowid 1:10 $TC_BIN filter add dev $DEV parent 1:0 prio 0 protocol ip \ handle 11 fw flowid 1:11 $TC_BIN filter add dev $DEV parent 1:0 prio 0 protocol ip \ handle 12 fw flowid 1:12 $TC_BIN filter add dev $DEV parent 1:0 prio 0 protocol ip \ handle 13 fw flowid 1:13 $TC_BIN filter add dev $DEV parent 1:0 prio 0 protocol ip \ handle 14 fw flowid 1:14 $TC_BIN filter add dev $DEV parent 1:0 prio 0 protocol ip \ handle 15 fw flowid 1:15 echo "done." ;; stop) #TODO ;; *) echo "Usage: /etc/init.d/Shaper {start|stop|show}" exit 1 ;; esac exit 0