Traffic Shaper: niedrig priorisierte Verbindungen bremsen hoch priorisierte Verbindungen aus

15/11/2007 - 16:10 von Fabian Holler | Report spam
Moin,

ich hab auf meinem Debian Router den Traffic Shaper + iptables eingerichtet.
Leider funktioniert es nicht wie gewünscht :/
Wenn etwas meine gesamte Bandbreite benötigt, z.B. FTP welches als
niedrigste Prioritàt eingerichtet ist leiden höhere priorisierte
Verbindungen trotzdem unter dem entstehenden Traffic (z.b. SSH,HTTP(S)).

Ich bekomm durch meine Leitung max. ~135kb Upload, ich hab den Traffic
beim tc auf 950kbit begrenzt damit sich keine Queue im DSL-Modem bildet.

Evtl. ist das Quantum nicht korrekt gesetzt? :) Ich hab nicht verstanden
wie ich das korrekte Quantum errechne, ausser das es höher als die MTU
sein soll(1492), also hab ich Quantum auf 1500 gesetzt und die
Fehlermeldungen waren verschwunden.

Ein anderes Problem ist noch dass ich nicht weiß wie ich Traffic von
Spielen priorisieren könnte, WC3 nutzt z.B. keine festen Ports sondern
Ports >49152.


Hier meine Konfiguration:
(Die Kommentare stimmen nicht mehr, war bis jetzt zu Faul sie zu
aktualisieren :))

####create root qdisc
tc qdisc add dev $INETDEV root handle 1: htb default 15

###main rate limit class
tc class add dev $INETDEV parent 1: classid 1:1 htb rate 950kbit #limit
to 137kbit, limit muss kleiner sein als max. speed damit die Pakete
nicht in der Warteschlange des DSL-Modems landen

###15kb for DNS, ICMP echo, TCP Overhead
tc class add dev $INETDEV parent 1:1 classid 1:10 htb rate 110kbit kbit
prio 0
tc qdisc add dev $INETDEV parent 1:10 handle 10: sfq perturb 10 quantum 1500
###40kb for games
tc class add dev $INETDEV parent 1:1 classid 1:11 htb rate 300kbit ceil
950kbit prio 1
tc qdisc add dev $INETDEV parent 1:11 handle 11: sfq perturb 10 quantum 1500
####30kb for IMs, IRC, SSH, teamspeak
tc class add dev $INETDEV parent 1:1 classid 1:12 htb rate 230kbit ceil
950kbit prio 2
tc qdisc add dev $INETDEV parent 1:12 handle 12: sfq perturb 10 quantum 1500
###39kb class for browsing
tc class add dev $INETDEV parent 1:1 classid 1:13 htb rate 309kbit burst
480kbit ceil 950kbit prio 3
tc qdisc add dev $INETDEV parent 1:13 handle 13: sfq perturb 10 quantum 1500
###class for remaining stuff(p2p,other unimportant stuff)
tc class add dev $INETDEV parent 1:1 classid 1:15 htb rate 1kbit ceil
950kbit prio 4
tc qdisc add dev $INETDEV parent 1:15 handle 15: sfq perturb 10 quantum 1500

###create shaper chain
$IPTABLES -t mangle -N SHAPER-OUT
$IPTABLES -t mangle -I POSTROUTING -o $INETDEV -j SHAPER-OUT

#########################Highest Priorit(0)
### give "overhead" packets highest
priority(http://www.knowplace.org/pages/howt...tegies.php)
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --syn -m length --length 40:68
-j CLASSIFY --set-class 1:10
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --tcp-flags ALL SYN,ACK -m
length --length 40:68 -j CLASSIFY --set-class 1:10
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --tcp-flags ALL ACK -m length
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --tcp-flags ALL RST -j CLASSIFY
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --tcp-flags ALL ACK,RST -j
CLASSIFY --set-class 1:10
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --tcp-flags ALL ACK,FIN -j
CLASSIFY --set-class 1:10

###DNS
$IPTABLES -t mangle -A SHAPER-OUT -p udp --dport 53 -j CLASSIFY
###ICMP echo request/reply
$IPTABLES -t mangle -A SHAPER-OUT -p icmp --icmp-type echo-reply -m
limit --limit 2/second -j CLASSIFY --set-class 1:10
$IPTABLES -t mangle -A SHAPER-OUT -p icmp --icmp-type echo-request -m
limit --limit 2/second -j CLASSIFY --set-class 1:10

#########################Priority 1
###WC3
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --dport 6112 -j CLASSIFY
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --sport 6112 -j CLASSIFY

#########################Priority 2
###SSH
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --sport 22 -j CLASSIFY
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --dport 22 -j CLASSIFY
###irc
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --dport 6667 -j CLASSIFY
#########################Priority 3
###HTTP(S)
$IPTABLES -t mangle -A SHAPER-OUT -p tcp -m multiport --dports 80,443 -j
CLASSIFY --set-class 1:13
#########################Priority 4
###Teamspeak
$IPTABLES -t mangle -A SHAPER-OUT -p udp --dport 8767 -j CLASSIFY
#########################remaining Stuff
$IPTABLES -t mangle -A SHAPER-OUT -j CLASSIFY --set-class 1:15


Ich bin für jede Hilfe und Verbesserungsvorschlàge dankbar.


Gruß

Fabian
 

Lesen sie die antworten

#1 Hauke Laging
17/11/2007 - 14:33 | Warnen spam
Fabian Holler schrieb am Donnerstag 15 November 2007 16:10:

Moin,



Da sonst keiner was sagt...


ich hab auf meinem Debian Router den Traffic Shaper + iptables
eingerichtet. Leider funktioniert es nicht wie gewünscht :/



Ich steige da auf Anhieb nicht durch, ist zu lange her, dass ich mich
damit im Detail befassen durfte. Aber: Welchen Vorteil hat es,
iptables dafür zu nehmen, anstatt das über Filter zu machen? In
meiner man page stehen zum target CLASSIFY zwei Zeilen...


Wenn etwas meine gesamte Bandbreite benötigt, z.B. FTP welches als
niedrigste Prioritàt eingerichtet ist leiden höhere priorisierte
Verbindungen trotzdem unter dem entstehenden Traffic (z.b.
SSH,HTTP(S)).



Schau Dir doch mal in so einer Situation an, was
tc ... show ...
zum Durchsatz der einzelnen qdiscs sagt.


Ein anderes Problem ist noch dass ich nicht weiß wie ich Traffic
von Spielen priorisieren könnte, WC3 nutzt z.B. keine festen Ports
sondern Ports >49152.

#########################Priority 1
###WC3
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --dport 6112 -j CLASSIFY
$IPTABLES -t mangle -A SHAPER-OUT -p tcp --sport 6112 -j CLASSIFY



Ich weiß, die unaktuellen Kommentare sollten ignoriert werden ...
aber das sieht so gar nicht nach dynamischen Ports aus. Welche lokal
verwendet werden, ist ja egal.

Noch ein Gedanke dazu: Wenn Du Verbindungen hast, deren Ports an
beiden Enden dynamisch sind, dann schreib Dir doch ein Script, das
per netstat oder lsof herausfindet, welchen Port die fragliche
Applikation gerade hat und die Konfiguration daran anpasst. Ich
würde - wenn man das mit iptables macht - eine eigene Chain für jede
solche Applikation einrichten. Die kann man dann sehr bequem
überschreiben.

Das Script kannste dann in geeigneten Abstànden von cron starten
lassen.


CU

Hauke
http://www.hauke-laging.de/ideen/
http://www.hauke-laging.de/software/
http://zeitstempel-signatur.hauke-laging.de/
Wie können 59.054.087 Leute nur so dumm sein?

Ähnliche fragen