• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

delay pool(s) mit squid

Alhifi

Newbie
Hallo Linux-Profis,

ich teile mir mit zwei meiner Nachbarn einen T-DSL-Anschluß, allerdings einen mit verminderter Bandbreite (384 kbit/s).

Da die beiden von der "Computerei" absolute keine Ahnung haben und überall draufklicken, wo "Download" draufsteht, ist der Zugang über DSL teilweise etwas schleppend, wenn sich der eine wieder ein 10 MB PDF-File über "Haarverpflanzung" und der andere die neuste NERO-Version (30 MB) für Windows runterzieht.

Nun will ich den Squid bez. delay pools konfigurieren, salopp ausgedrückt raff ich das aber von vorne bis hinten nicht, insbesondere mit delay_class und delay_parameters komm ich überhaupt nicht klar und es funktioniert entsprechend nichts. Beim Rest an Parametern ist es auch nicht besser aus.

Ich hab so ziemlich alles gelesen, was ich über Google zum Thema gefunden habe, aber verstanden hab ich's trotzdem nicht, es hat noch nicht "klick" gemacht.

Irgendwo gab es eine Konfiguration, in der der delay_pool nur für bestimmte Dateiendungen wie EXE, ZIP, PDF galt, das wäre das was ich einrichten möchte. Im Prinzip sollen also nur Downloads begrenzt werden. Hier dachte ich so an 60-70% der verfügbaren Bandbreite der 384 kbit/s, die restlichen sollen dann weiterhin offen sein für das "normale Surfen".

Könnt ihr mir helfen?

Ciaoi
Alhifi
 

oc2pus

Ultimate Guru
http://squid-docs.sourceforge.net/latest/html/x1982.html

oder hier:
#####DELAY POOLS
#This is the most important part for shaping incoming traffic with Squid
#For detailed description see squid.conf file or docs at http://www.squid-cache.org

#We don't want to limit downloads on our local network.
acl magic_words1 url_regex -i 192.168

#We want to limit downloads of these type of files
#Put this all in one line
acl magic_words2 url_regex -i ftp .exe .mp3 .vqf .tar.gz .gz .rpm .zip .rar .avi .mpeg .mpe .mpg .qt
.ram .rm .iso .raw .wav .mov
#We don't block .html, .gif, .jpg and similar files, because they
#generally don't consume much bandwidth

#We want to limit bandwidth during the day, and allow
#full bandwidth during the night
#Caution! with the acl below your downloads are likely to break
#at 23:59. Read the FAQ in this bandwidth if you want to avoid it.
acl day time 09:00-23:59

#We have two different delay_pools
#View Squid documentation to get familiar
#with delay_pools and delay_class.
delay_pools 2

#First delay pool
#We don't want to delay our local traffic.
#There are three pool classes; here we will deal only with the second.
#First delay class (1) of second type (2).
delay_class 1 2

#-1/-1 mean that there are no limits.
delay_parameters 1 -1/-1 -1/-1

#magic_words1: 192.168 we have set before
delay_access 1 allow magic_words1


#Second delay pool.
#we want to delay downloading files mentioned in magic_words2.
#Second delay class (2) of second type (2).
delay_class 2 2

#The numbers here are values in bytes;
#we must remember that Squid doesn't consider start/stop bits
#5000/150000 are values for the whole network
#5000/120000 are values for the single IP
#after downloaded files exceed about 150000 bytes,
#(or even twice or three times as much)
#they will continue to download at about 5000 bytes/s

delay_parameters 2 5000/150000 5000/120000
#We have set day to 09:00-23:59 before.
delay_access 2 allow day
delay_access 2 deny !day
delay_access 2 allow magic_words2
 

oc2pus

Ultimate Guru
hier noch ein anderes Modell für delay-pools:

# oc2pus ==>delay-pool Definitionen
delay_pools 3

delay_class 1 2
delay_class 2 2
delay_class 3 2

# normal surfing
delay_access 1 allow magic_words1 !lowband
delay_access 1 deny all

# download via http depending on extension
delay_access 2 allow magic_words2 !lowband
delay_access 2 deny all

# bulk
delay_access 3 allow lowband
delay_access 3 deny all

# Let's consider another example:
# you have a 128kbit per second line. Since you want some bandwidth available
# for things like SMTP, you want to limit web access to 100kbit per second. At
# the same time, you don't want a single user to use more than their fair share
# of sustained bandwidth. Given that you have 20 staff members, and 100kbit per
# second remaining bandwidth, each person should not use more than 5kbit per
# second of bandwidth. Since it's unlikely that every user will be surfing at
# once, we can probably limit people to about four times their limit (that's
# 20kbit per second, or 2.5kbytes per second).
#
# We change the delay class for pool 1 to 2. Delay class 2 allows us to specify
# both an aggregate (overall) bandwidth usage and a per-user usage. In the
# previous example the delay_paramaters tag only took one set of options, the
# aggregate peak and burst rates. Given that we are now using a class-two pool,
# we have to supply two sets of options to delay_parameters: the overall speed
# and the per-IP speed. The 100kbits per second value is converted to bytes per
# second by dividing by 8 (giving us the 12500 values), and the per-IP value of
# 2.5kbits per second we discovered is converted to bytes per second (giving us
# the 2500 values.)
# delay_class 1 2
# delay_parameters 1 12500/12500 2500/2500

# calculated for zuhause.nil:
# DSL 1536kbit DSL davon 75% = 1152kbit ==> 144kByte für Netz
# 4 user: 1152kbit/4 = 288kbit * 3 = 864kbit ==> 108kByte pro user
#
# DSL 3096kbit DSL davon 75% = 2322kbit ==> 290kByte für Netz
# 4 user: 2322kbit/4 = 580kbit * 3 = 1740kbit ==> 218kByte pro user
#
# downloads per extension
# 4 user: 1152kbit/4 = 288kbit * 2 = 576kbit ==> 72kByte pro user
# 4 user: 2322kbit/4 = 580kbit * 2 = 1160kbit ==> 145kByte pro user
#
# flashget und sonstige permanenten downloads
# 4 user: 1152kbit/4 = 288kbit * 1 = 288kbit ==> 36kByte pro user
# 4 user: 2322kbit/4 = 580kbit * 1 = 580kbit ==> 72kByte pro user

# arcor dsl 1500
#delay_parameters 1 144000/144000 108000/108000
#delay_parameters 2 144000/144000 72000/72000
#delay_parameters 3 144000/144000 36000/36000

# arcor dsl 3000
delay_parameters 1 290000/290000 218000/218000
delay_parameters 2 290000/290000 145000/145000
delay_parameters 3 290000/290000 72000/72000

# oc2pus <==delay-pool Definitionen
 
OP
A

Alhifi

Newbie
Hallo oc2pus,

erstmal vielen Dank für deine recht ausführlichen Informationen, allerdings muß ich zugeben, das immer noch nicht verstanden zu haben, zumal sich beide Beschreibungen irgendwie dahingehend unterscheiden, das der Parameter delay_parameters wiedersprüchlich erklärt ist ... oder mein Schulenglisch ist über die Jahre so schlecht geworden, das ich das einfach nicht verstehe.

Im ersten Beispiel steht:

Code:
acl magic_words2 url_regex -i ftp .exe .mp3 .vqf .tar.gz .gz .rpm .zip .rar .avi .mpeg .mpe .mpg .qt .ram .rm .iso .raw .wav .mov

Das wäre also meine Liste mit Dateierweiterungen, bei denen die Bandbreite begrenzt werden soll, korrekt? "url_regex" bezieht sich auf die komplette URL zum File, korrekt? Warum steht da ein "ftp", was ist, wenn die Datei per http geholt wird?

Weiter unten im Beispiel steht

Code:
delay_parameters 2 5000/150000 5000/120000

mit der Erklärung, das die Downloadrate auf 5000 runtergesetzt wird, sobald die Datei über 150000 Bytes groß ist, hab ich das richtig verstanden?

Im zweiten Beispiel steht allerdings folgendes

Code:
delay_parameters 2 290000/290000 145000/145000

mit der Erklrärung, das sich die erste Zahlenkombination auf das komplette Netz bezieht, die zweite dann auf einzelne IP-Adressen (somit einzelne User), richtig? Hier wird allerdings nirgendwo mehr wie oben von Dateigrößen gesprochen ??? Irgendwie klickt das bei mir immer noch nicht ...

Ich fasse mal zusammen für mein spezielles Problem:

Ich habe also DSL-Light mit 384 kbit/s. Maximal (theoretisch möglich) surfen 4 User gleichzeitig. Rechne ich das ganze in Bytes pro Sekunde, komme ich also auf eine Gesamtbandbreite zum Eintragen in die squid.conf von 48000. Da der Server ab und an auch mal automatisch eMails prüft, könnte man da ja eine gewisse kleine Bandbreite reservieren, sagen wir mal 4000, so das noch 44000 übrig bleiben. Diese 44000 gilt es also nun auf die möglichen 4 User aufzuteilen. Für das komplette Netz müßte dann der erste Eintrag theoretisch 44000/44000 lauten, richtig? Wie lautet nun der zweite Eintrag? Wenn der User alleine surft, soll er die volle Bandbreite erhalten, logisch, wenn mehrere unterwegs sind, soll sich das gleich aufteilen. Da es 4 User sein können, müßte ich die 44000 teilen und der zweite Eintrag würde lauten 11000/44000, richtig? Also gesamt dann

Code:
delay_parameters 2 44000/44000 11000/44000

Wäre das richtig? Wie sieht das dann mit den Downloads aus, werden die darüber eingeschränkt? Wenn nur 2 zeitgleich surfen, hängen die dann bei 11000 oder jeder bei 22000?

Der Ansatz im ersten Beispiel wäre auch nicht schlecht, wenn eine Datei eine bestimmte Größe überschreitet, wird die Speed runtergesetzt, d.h. kleine Dateien (z.B. bis 500 kB) sind normal mit voller Speed abzurufen, alles darüber wird dann langsamer runtergeladen, aber wie trag ich das ein ... ich verstehs nicht ... ich versteh das einfach nicht.

Ciaoi
Alhifi
 

oc2pus

Ultimate Guru
Alhifi schrieb:
... allerdings muß ich zugeben, das immer noch nicht verstanden zu haben, zumal sich beide Beschreibungen irgendwie dahingehend unterscheiden, das der Parameter delay_parameters wiedersprüchlich erklärt ist ...
schauen wir mal ...

Alhifi schrieb:
Im ersten Beispiel steht:

Code:
acl magic_words2 url_regex -i ftp .exe .mp3 .vqf .tar.gz .gz .rpm .zip .rar .avi .mpeg .mpe .mpg .qt .ram .rm .iso .raw .wav .mov

Das wäre also meine Liste mit Dateierweiterungen, bei denen die Bandbreite begrenzt werden soll, korrekt? "url_regex" bezieht sich auf die komplette URL zum File, korrekt? Warum steht da ein "ftp", was ist, wenn die Datei per http geholt wird?
das bedeutet wenn in der URL irgendwo der Text "ftp" vorkommt!!
Beispiel: http://ftp.gwdg.de/pub/linux/suse/apt/SuSE/9.2-i386/RPMS.mozilla/mozilla-1.7.5-0.1.i586.rpm
==> ich nehme an, das ist ein Download eines Files, weil es in Wirklichkeit ein ftp-server ist ;)

Alhifi schrieb:
Weiter unten im Beispiel steht

Code:
delay_parameters 2 5000/150000 5000/120000

mit der Erklärung, das die Downloadrate auf 5000 runtergesetzt wird, sobald die Datei über 150000 Bytes groß ist, hab ich das richtig verstanden?
ja ;)

Alhifi schrieb:
Im zweiten Beispiel steht allerdings folgendes
Code:
delay_parameters 2 290000/290000 145000/145000
mit der Erklrärung, das sich die erste Zahlenkombination auf das komplette Netz bezieht, die zweite dann auf einzelne IP-Adressen (somit einzelne User), richtig? Hier wird allerdings nirgendwo mehr wie oben von Dateigrößen gesprochen ???
Ja, weil damit die Bandbreiten fix sind, keine Variation über die Grösse. Einfach fix, mehr Bandbreite gibt es nicht.

Alhifi schrieb:
Ich habe also DSL-Light mit 384 kbit/s. Maximal (theoretisch möglich) surfen 4 User gleichzeitig. Rechne ich das ganze in Bytes pro Sekunde, komme ich also auf eine Gesamtbandbreite zum Eintragen in die squid.conf von 48000. Da der Server ab und an auch mal automatisch eMails prüft, könnte man da ja eine gewisse kleine Bandbreite reservieren, sagen wir mal 4000, so das noch 44000 übrig bleiben. Diese 44000 gilt es also nun auf die möglichen 4 User aufzuteilen. Für das komplette Netz müßte dann der erste Eintrag theoretisch 44000/44000 lauten, richtig? Wie lautet nun der zweite Eintrag? Wenn der User alleine surft, soll er die volle Bandbreite erhalten, logisch, wenn mehrere unterwegs sind, soll sich das gleich aufteilen. Da es 4 User sein können, müßte ich die 44000 teilen und der zweite Eintrag würde lauten 11000/44000, richtig?
du musst unterscheiden welchen delay_pool Typ du einsetzt!!

Typ 1: delay_parameters pool aggregate
Typ 2: delay_parameters pool aggregate individual
Typ 3: delay_parameters pool aggregate network individual
dabei bedeuten:
pool
a pool number - ie, a number between 1 and the number specified in delay_pools as used in delay_class lines.

aggregate
the "delay parameters" for the aggregate bucket (class 1, 2, 3).

individual
the "delay parameters" for the individual buckets (class 2, 3).

network
the "delay parameters" for the network buckets (class 3).

A pair of delay parameters is written restore/maximum, where restore is the number of bytes (not bits - modem and network speeds are usually quoted in bits) per second placed into the bucket, and maximum is the maximum number of bytes which can be in the bucket at any time.

Alhifi schrieb:
Wäre das richtig? Wie sieht das dann mit den Downloads aus, werden die darüber eingeschränkt? Wenn nur 2 zeitgleich surfen, hängen die dann bei 11000 oder jeder bei 22000?
das hängt davon ab welchen Pool Typ du verwendest und wie deine Raten aussehen.

Alhifi schrieb:
Der Ansatz im ersten Beispiel wäre auch nicht schlecht, wenn eine Datei eine bestimmte Größe überschreitet, wird die Speed runtergesetzt, d.h. kleine Dateien (z.B. bis 500 kB) sind normal mit voller Speed abzurufen, alles darüber wird dann langsamer runtergeladen
siehe erstes Beispiel


Wenn du "fair" aufteilen willst verwende das zweite "Modell" denn es garantiert jedem eine Mindestbandbreite. Hat aber den Nachteil, das ein Individuum nicht über sein Maximum kommt.
Das Volumenabhängige Modell wird dir keinen Spass machen, da ein Individuum mit einem Downloadaccelerator es leicht schafft sich daran vorbeizumogeln und somit pro Teildownload immer mit maximaler Geschwindigkeit arbeitet ;)
 
OP
A

Alhifi

Newbie
Hi oc2pus,

vielen Dank mal wieder für deine ausführliche Antwort, ich würd sagen, es daämmert, klickt aber immer noch nicht.

das bedeutet wenn in der URL irgendwo der Text "ftp" vorkommt!!
Beispiel: http://ftp.gwdg.de/pub/linux/suse/apt/SuSE/9.2-i386/RPMS.mozilla/mozilla-1.7.5-0.1.i586.rpm
==> ich nehme an, das ist ein Download eines Files, weil es in Wirklichkeit ein ftp-server ist ;)

Also müsste bei der ACL auf jeden Fall ein "ftp" drin vorkommen, damit die greift oder reicht es, wenn eine der angegebenen Dateiendungen gefunden wird?

Beispiel: Was wäre mit "http://www.sysinternals.com/files/procexpnt.zip"

du musst unterscheiden welchen delay_pool Typ du einsetzt!!

Typ 1: delay_parameters pool aggregate
Typ 2: delay_parameters pool aggregate individual
Typ 3: delay_parameters pool aggregate network individual

Also, welchen ich da einsetze ist mir eigentlich egal, hauptsache das was ich realisieren möchte funktioniert (irgendwie).

das hängt davon ab welchen Pool Typ du verwendest und wie deine Raten aussehen.

Welchen Typ muß ich denn nun nehmen, ich denke mal, das die Class 2 schon die richtige ist.

Wenn du "fair" aufteilen willst verwende das zweite "Modell" denn es garantiert jedem eine Mindestbandbreite. Hat aber den Nachteil, das ein Individuum nicht über sein Maximum kommt.
Das Volumenabhängige Modell wird dir keinen Spass machen, da ein Individuum mit einem Downloadaccelerator es leicht schafft sich daran vorbeizumogeln und somit pro Teildownload immer mit maximaler Geschwindigkeit arbeitet ;)

Mhhhh, wieder sowas mit "versteh ich nicht". Ich dachte, der zweite Parameter bei delay_parameters bezieht sich auf den einzelnen User bzw. die einzelne IP-Adresse. Benutzt der einen Downloadmanager, der mehrere Tasks öffnet, um ein File zu holen, schlagen doch alle beim Squid mit derselben IP auf und sollten dann doch seitens des Proxys als ganzes gesehen werden, oder liege ich da jetzt wieder falsch?

Nehmen wir mal an, ich will keinem User eine feste Bandbreite zuordnen, sondern nur beim Download von größeren ZIP-Files etc. eine Bandbreitenbeschränkung benutzen, dann würde mir doch ein delay_pool der class 1 reichen, die acl dafür wäre dann die oben aufgeführte mit den Dateiendungen, oder?

Also in etwa so

Code:
acl SlowFiles url_regex -i .exe .mp3 .vqf .tar.gz .gz .rpm .zip .rar .avi .mpeg .mpe .mpg .qt .ram .rm .iso .raw .wav .mov .pdf
delay_pools 1
delay_class 1 1
delay_parameters 1 16000/350000
delay_access 1 allow SlowFiles
delay_access 1 deny all

Bei "normalem Surfen" passiert nichts und jeder bekommt das, was er will, in der Speed, die aufgrund der aktuellen gesamten Requests halt maximal möglich ist. Klickt er auf einen Download, greift über die ACL der delay_pool und setzt die Geschwindigkeit für den Download im Beispiel hier nach ca. 350 kB runter auf 16000 kB/s. Vermutlich wieder falsch, gell?

Ciaoi
Alhifi
 

oc2pus

Ultimate Guru
Alhifi schrieb:
Also müsste bei der ACL auf jeden Fall ein "ftp" drin vorkommen, damit die greift oder reicht es, wenn eine der angegebenen Dateiendungen gefunden wird?

Beispiel: Was wäre mit "http://www.sysinternals.com/files/procexpnt.zip"
ja diese URL würde auch matchen, weil ".zip" drin vorkommt
diese aber auch:
http://www.zip.de/index.html

Alhifi schrieb:
Welchen Typ muß ich denn nun nehmen, ich denke mal, das die Class 2 schon die richtige ist.
ja, würde ich dir empfehlen

Alhifi schrieb:
...Benutzt der einen Downloadmanager, der mehrere Tasks öffnet, um ein File zu holen, schlagen doch alle beim Squid mit derselben IP auf und sollten dann doch seitens des Proxys als ganzes gesehen werden, oder liege ich da jetzt wieder falsch?
das ist korrekt, ABER der downloadmanager fordert z.bsp immer nur 50K Stückchen an ==> die Regel mit der Grösse und der Geschwindigkeitsverminderung greift nie :(

Alhifi schrieb:
Nehmen wir mal an, ich will keinem User eine feste Bandbreite zuordnen, sondern nur beim Download von größeren ZIP-Files etc. eine Bandbreitenbeschränkung benutzen, dann würde mir doch ein delay_pool der class 1 reichen, die acl dafür wäre dann die oben aufgeführte mit den Dateiendungen, oder?

Also in etwa so

Code:
acl SlowFiles url_regex -i .exe .mp3 .vqf .tar.gz .gz .rpm .zip .rar .avi .mpeg .mpe .mpg .qt .ram .rm .iso .raw .wav .mov .pdf
delay_pools 1
delay_class 1 1
delay_parameters 1 16000/350000
delay_access 1 allow SlowFiles
delay_access 1 deny all
ja, das wäre ein möglicher Ansatz. Aber bedenke das oben gesagte mit den downloadmanagern ... und vergiss die *.rar Files nicht, und die haben wieder die Endungen r01 bis rYY. Und dann gibt es gefakte Extensions,... und deine Mitbenutzer werden sehr schnell die Lücken erkennen.

Deshalb teile ich bei mir die Bandbreite fix auf. HTTP ist KEIN Dateiübertragungsprotokoll, man soll dafür FTP nutzen. Ich habe in meinem squid sogar die max-size der Dateien auf 10MB begrenzt.

Egal für welche Lösung du dich entscheidest:
Du solltest zusätzlich ein Traffic-Shaper Script einsetzen (Beispiele gibt es hier: http://www.linux-club.de/viewtopic.php?t=23562)
 
OP
A

Alhifi

Newbie
Hallo oc2pus,

erstmal wenn auch verspätet nochmal ein Riesendankeschön für deine ausführlichen Erklärungen.

Ich hab daraufhin nochmal "herumprobiert" und seitdem läuft bei mir folgendes:

acl SlowFiles urlpath_regex "/etc/squid/controldownloads"
delay_pools 1
delay_class 1 1
delay_access 1 allow SlowFiles
delay_access 1 deny all
delay_parameters 1 24576/24576

und in der Datei "/etc/squid/controldownloads" steht folgendes:

\.avi$
\.rmi$
\.exe$
\.com$
\.tga$
\.cab$
\.omf$
\.mp3$
\.mpg$
\.mov$
\.mp2$
\.pdf$
\.zip$
\.rar$
\.cab$
\.rpm$


Soweit, sogut, wenn ich das bisher (auch mit Downloadmanagern) probiert habe, hängen alle Downloads (auch die Summe bei mehreren gleichzeitig) so um die 24000 kb, prima.

Besteht nun die Möglichkeit, für bestimmte URLs das wiederum aufzuheben?

Ich benutze hier mit meinen Nachbarn als lokalen Virenscanner den AntiVir von H+BEDV. Die Updates davon sind zwar meist recht klein, wenn man nicht das komplette Paket laden muß, aber meist läuft das ja manuell ab, d.h. das Herunterladen geht soweit automatisch, aber danach muß u.U. was "geklickt" werden. Um nun die Wartezeit bei der Aktualisierung bis zur "Klickerei" zu verkürzen, sollen diverse URLs vom Delay-Pool oben ausgenommen werden. Die Updates kommen alle von dlX.avgate.net, wobei das X dann eine Ziffer von 1 bis 5 (oder 6) darstellt. Der Squid cacht die Dateien zwar, aber wenn der nächste ein Update macht, landet der meist auf nem anderen der dlX-Server und zieht wieder komplett alles.

Kann man nun dem Delay-Pool irgendwie mitteilen, das er die URLs *.avgate.net ignoriert?

Ciaoi
Alhifi
 

oc2pus

Ultimate Guru
fein das es läuft ;)

Kann man nun dem Delay-Pool irgendwie mitteilen, das er die URLs *.avgate.net ignoriert?
ja, das sollte analog deiner ACL Regel mit den Dateiendungen gehen.
Definiere eine ACL für die Antivir-Server. Zusätzlich einen zeiten delay Pool der NUR für diese Ausnahmen benutzt wird und sonst NIE. Dieser delay-Pool sollte vor deinem jetzt definierten stehen!
Wenn also eine solche Ausnahme auftritt wird dieser Pool verwendet, ansonsten landet man im "default-Pool" (deinem jetzigen).

Ähnlich könntest du auch deine User kategorisieren in "powerdownloader" und "lahme enten" (weil sie ihren Anteil an der DSL-Rechnung nicht bezahlt haben) und auf mehrere delay-pools verteilen ...
 
Oben