OT: Traffic Shaping
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
Reply to: