FreeBSD 4.8 und Dummynet......

stsch

Member
Hi,

ich möchte eine Bandbreitenbegrenzung für Zugriffe, die auf bestimmte Ports laufen einrichten.
Der Rechner hängt am Dsl, meine Vorstellung war, eine ein- und eine ausgehende Pipe mit 700Kbit/s bzw. 100Kbit/sek
und, quasi als Backup, damit ich auch remote zum Beispiel mit ssh, jederzeit auf den Rechner zugreifen kann, zwei weitere Pipes mit dem Rest.
Außerdem wollte ich die Zugriffe noch gewichten, Zugriffe auf die Ports 4661-4662 sollen das geringste Gewicht bekommen (weight 1), Zugriffe auf Port 80 sollen deutlich bevorzugt werden (weight 50).
Ggf. fallen mir noch andere Sachen ein, die ich bevorzugt über diese Pipe schicken will, aber momentan würde das reichen.
Also, I rtfm, konfigurierte 4 Pipes
ipfw add 4010 pipe 1 ip from any to any in via tun0
ipfw add 4020 pipe 2 ip from any to any out via tun0
ipfw add 4030 pipe 3 ip from any to any in via tun0
ipfw add 4040 pipe 4 ip from any to any in via tun0
ipfw pipe 1 config bw 700Kbit/s queue 25
ipfw pipe 2 config bw 100kbit/s queue 8
ipfw pipe 3 config bw 68Kbit/s queue 5
ipfw pipe 4 config bw 28Kbit/s queue 4
Das sollte die Ausgangskonfiguration sein, der Rest sollte mit Queues, die auf die jeweiligen Pipes zeigen, gelöst werden.
Dummerweise habe ich aber nirgendwo eine Beispielkonfig gefunden, laut manpage kann man mehrere Queues auf die gleiche Pipe zeigen lassen, das Limit der Pipe limitiert die Queues.
Bei den Queues kann man aber eine Gewichtung einführen, also daß, was ich mir vorstelle.
Also weiter:
ipfw add 5010 queue 1 tcp from any to any 4661-4662 in via tun0
ipfw add 5020 queue 2 tcp from any 4661-4662 to any out via tun0
ipfw add 5030 queue 3 tcp from any to any 80 in via tun0
ipfw add 5040 queue 4 tcp from any 80 to any out via tun0
ipfw add 5050 queue 5 ip from any to any in via tun0
ipfw add 5060 queue 6 ip from any to any out via tun0
......
ifpw queue 1 config pipe 1 weight 1
ipfw queue 2 config pipe 2 weight 1
ipfw queue 3 config pipe 1 weight 50
ipfw queue 4 config pipe 2 weight 50
ipfw queue 5 config pipe 1 weight 100
ipfw queue 6 config pipe 2 weight 100
.....
Dummerweise funktioniert das aber nicht so, wie ich mir das vorstelle.
Ich surfe auch über diesen Rechner, mit diesen Einstellungen werden meine Zugriffe extrem langsam, während sich der Donkey breit macht, bis zum Gehtnichtmehr.
Umstellen der Queues, die weight andersrum, alles probiert, aber es ändert sich nichts.
Außerdem mußte ich feststellen, daß ein ipfw -f flush die Queues nicht löscht, die musste ich per Hand mit ipfw delete queue [nr] wieder entfernen.
Aktuell habe ich alle Queues gelöscht und nur pipes konfiguriert.
2 für die Ports 4661-4662 und 2 für den Rest, aber auch das ändert nichts.
Ich kann die Ports begrenzen wie ich will, hilft nichts.
Selbst wenn ich die eingehende Pipe für Donkey auf 200Kbit/s und die Ausgehende auf 50Kbit/s limitiere ändert das nichts.
ipfw show zeigt mir auf den beiden Queues Benutzung, die anderen beiden zeigen 0 0 und surfen, mail usw ist gähnend langsam.
(Donkey neustarten half auch nicht).
Aktuell habe ich folgende Regeln am Laufen:
ipfw add 4010 pipe 1 tcp from any 4661-4662 to any in via tun0
ipfw add 4020 pipe 2 tcp from any to any 4661-4662 out via tun0
ipfw add 4030 pipe 3 ip from any to 192.168.100.0/24 in via tun0
ipfw add 4040 pipe 4 ip from 192.168.100.0/24 to any out via tun0
ipfw pipe 1 config bw 200Kbit/s queue 25
ipfw pipe 2 config bw 50Kbit/s queue 5
ipfw pipe 3 config bw 0
ipfw pipe 4 config bw 0
ipfw show sagt:
04010 0 0 pipe 1 tcp from any 4661-4662 to any in recv tun0
04020 0 0 pipe 2 tcp from any to any 4661-4662 out xmit tun0
04030 0 0 pipe 3 ip from any to 192.168.100.0/24 in recv tun0
04040 0 0 pipe 4 ip from 192.168.100.0/24 to any out xmit tun0
0
Jetzt benutzt er die pipes einfach gar nicht!
Hat jemand einen Tipp für einen völlig verzweifelten Dummynet DAU?

Danke im Voraus
StSch
 
Hab mit dummynet noch(!) nicht gearbeitet, aber die solltest _zuerst_ die Pipes erstellen, und dann die Regeln zum aufteilen auf die Pipes.

Hier mal ein Auszug eines Postings von Bernd Walter aus der dt. FBSD Mailingliste:
Hier mal ein Ausschnitt meiner config:
ipfw pipe 10 config queue 5 bw 15KBytes/s
ipfw queue 1 config pipe 10 weight 5 red 0.05/35/45/0.4
ipfw queue 2 config pipe 10 weight 100 red 0.05/35/45/0.4

[...]
ipfw add queue 1 ip from 10.1.1.111 to any out via tun0
ipfw add skipto 2000 ip from 10.1.1.111 to any out via tun0
ipfw add queue 2 ip from any to any out via tun0

ipfw add 2000 [...]

Den skipto habe ich wegen sysctl net.inet.ip.fw.one_pass=0, da ich
natürlich noch filtern möchte.

Ist für eine TDSL und die IP 10.1.1.111 macht mitunter einigen
ausgehenden Traffik, den ich damit dynamisch kleiner bekomme, sobald
was anderes passiert.
Die weight Angabe ist keine feste % Zahl, Bandbreite oder Priorität.
Deswegen kann man dein Beispiel nicht 1:1 nachbauen, aber es ist
problemlos möglich für den Fall eine sinnvolle Konfiguration zu
erstellen.
 
Hi, Danke für den Tipp.
Jetzt hätte ich noch eine andere Frage:
Kannst Du mir sagen, was die Paramter:
w_q, min_th, max_th, max_p genau machen und noch wichtiger:
Wie man die vernünftig konfiguriert?
Ich konnte leider im Net keinerlei Erklärung finden, was w_q und max_p aussagen bzw. was ich damit angeben kann.


Danke
StSch
 
Dummynet und RED, gefunden....

Hi Raptor,

ich pflichte Dir aus vollem Herzen bei!
Also, wie soll ich sagen, ich habe inzwischen herausgefunden, was die Parameter bedeuten:
Min_th ist die Länge der dynamischen Queue, unterhalb der keinerlei Pakete verworfen werden.
Max_th ist die Länge der dynamischen Queue oberhalb der alle Pakete verworfen werden.
w_q und max_p sind Angaben (in %?) die bestimmen, wieviele Pakete in der Queue der dynamischen Länge zwischen min_th und max_th verworfen werden.
Um das zu verstehen, muß man ziemlich tief in das Tcp Protokoll bzw. in den Ip Stack einsteigen.
Ohne genau zu wissen, wie Tcp funktioniert, welche Optimierungen das Protokoll selbst vornimmt, wie ein Ip Stack arbeitet, was Routing Protokolle im Einzelnen und im Speziellen tun, kommt man hier keinen Millimeter weiter.
Nähere Infos findest Du unter: ftp://ftp.isi.edu/in-notes/rfc2309.txt
Wenn man Deinem Link folgt, kommt man übrigens auch auf die Seite von Icir
Ohne Scheiss, es steht alles im Rfc 2309!
Der Entwickler von Dummynet, hat sich wohl auch voll am Rfc 2309 orientiert, zumindest die Variablennamen deuten darauf hin.
Ich hatte gestern eine mehrstündige Diskussion mit einem guten Freund zu diesem Thema, der ist Bsd Commiter und hat zum Beispiel das Programm Growfs geschrieben.
Der HAT Ahung von diesen Vorgängen und empfiehlt dringend, bevor man da an sowas dreht, erstmal mit einer einzelnen Pipe und einem gut bekannten Protokoll zu testen, zum Beispiel mit einer Pipe, in die die Ftp Ports umgeleitet werden. Dann einschränken, eine Datei definierter Größe runterladen, Dauer berechnen, Parameter ändern.... usw.
Der hat mir auch tcpdump und trafshow nähergebracht, damit ich mal mitbekomme, was da so überhaupt läuft.
Also ich für meinen Teil interessiere mich dafür und werde wohl ein bißchen rumtesten.
Ansonsten soll es, laut meinem Freund, sehr gute Bücher zu diesem Thema geben, er meint, sollte ich mal lesen.
Irgendwie komme ich mir seit dieser Diskussion klein und dumm vor......
Viel Spaß beim Lesen, werde ich auch haben :-)

Gruß StSch
 
Re: Dummynet und RED, gefunden....

Original geschrieben von stsch
Ich hatte gestern eine mehrstündige Diskussion mit einem guten Freund zu diesem Thema, der ist Bsd Commiter und hat zum Beispiel das Programm Growfs geschrieben.

Du hast Kontakt mit Tomsoft?
Dann frag ihn doch mal, wie der Code von "ffsinfo" bitteschön
in Bezug auf Ausgabe=stdout funktionieren soll. Zum Glück
gibt es ja /dev/stdout ;)
Wenn man nach dem Üblichen vorgeht (wie auch in der
Manpage zu ffsinfo beschrieben) und "-o -" aufruft, erhält
man jedenfalls eine Datei mit dem Namen "-"...
 
Zurück
Oben