[Eisfair] [E1] Bandwidth shaper?

Thomas Huebner thuebner_gmx_de at eis.stadtweg
Do Mai 10 08:48:33 CEST 2012


Am 06.05.2012 00:20, schrieb Olaf Jaehrling:
> Genau dafür ist tc und iptables ja gedacht. Du weist dann dem Port 25
> und 110 (smtp und pop3) nur 20 kbit zu und dann kann der eis dein DSL
> nicht lahm legen. Wenn du willst, kann ich das für dich mal fertig machen.

Da das Script nun funktioniert habe ich ein bisschen experimentiert und
möchte meine Erfahrungen bis zu diesem Punkt fürs Archiv schildern und
habe unten noch eine Frage.

Vorerst großen Dank an Olaf der mir so geduldig geholfen hat!

Wer einen Standard Eis1 hat und noch nie was mit iptables gemacht hat
muss im Script wesentlich mehr Module laden. Bei mir sind folgende nötig:

modprobe ip_tables
modprobe iptable_filter
modprobe iptable_mangle
modprobe sch_htb
modprobe ipt_MARK
modprobe cls_fw
modprobe ipt_length

Da ich nur eine Netzwerkkarte nutze (eth0) muss die oberste Klasse
(Parent) natürlich auf dessen Maximalgeschwindigkeit gesetzt werden. Im
Script von Olaf wird die ganze Kommunikation zum Server auch im internen
Netz auf DSL Lite Speed gesetzt. Das ist natürlich nicht erwünscht. Deshalb

/sbin/tc class add dev $interface parent 1: classid 1:1 htb rate 80mbit
ceil 100mbit

Zusätzlich muß die Klasse für den normalen Traffic auch auf diese Werte
gesetzt werden ich habe hier 13 genommen

/sbin/tc class add dev $interface parent 1:1 classid 1:13 htb rate
80mbit ceil 100mbit prio 2

Auf diese Klasse muß auch default gezeigt werden um erstmal nichts
auszubremsen

/sbin/tc qdisc add dev $interface root handle 1:0 htb default 13

Die Klasse zum "Aus-bremsen" muss dann auf einen für den DSL Lite
erträglichen Wert gesetzt werden. Hier Klasse 12

/sbin/tc class add dev $interface parent 1:1 classid 1:12 htb rate
200kbit ceil 250kbit prio 2

Ich habe noch eine "Überholspur" mit Prio 0 eingebaut. Klasse 10

/sbin/tc class add dev $interface parent 1:1 classid 1:10 htb rate
80mbit ceil 100mbit prio 0

Dort kann man kleine/kurze ACK Pakete durchschieben. Hier abhängig von
der Länge

/sbin/iptables -A POSTROUTING -t mangle -o $interface -p tcp -m length
--length :64 -j MARK --set-mark 10

Die Filterregeln muß man dann natürlich alle 3 Klassen zuweisen

/sbin/tc filter add dev $interface parent 1:0 prio 0 protocol ip handle
10 fw flowid 1:10
/sbin/tc filter add dev $interface parent 1:0 prio 0 protocol ip handle
12 fw flowid 1:12
/sbin/tc filter add dev $interface parent 1:0 prio 0 protocol ip handle
13 fw flowid 1:13


Nun kommt der Teil der mir noch nicht ganz klar ist. Ich nutze das
Mailpaket. Die Mails sollen versendet und abgeholt werden mit
eingebremster Geschwindigkeit. Allerdings soll das Mailpaket im Internen
Netz mit voller Geschwindigkeit arbeiten. D.h. mein Thunderbird soll die
Mails im internen Netz schnell vom Server holen können.

Mit den Einträgen
## Für eingehenden SMTP - Traffic
/sbin/iptables -A PREROUTING -t mangle -i $interface -p tcp --sport 25
-j MARK --set-mark 12
## Für eingehenden POP - Traffic
/sbin/iptables -A PREROUTING -t mangle -i $interface -p tcp --sport 110
-j MARK --set-mark 12

kann das Meines Erachtens nicht gehen weil Filter ja auch im internen
Netz wirken. Zudem habe ich asynchrones DSL Lite. Die Richtung ZUM
Internet (upload) müsste auf 5k eingeschränkt werden um die verfügbaren
9k nicht voll auszulasten.

Wie müssten die Regeln aussehen? Muß ich das Mailpaket irgendwie
Bezüglich der Im internen LAN genutzten Ports umkonfigurieren?

Danke und Gruß,
Thomas






Mehr Informationen über die Mailingliste Eisfair