Wenn man seine Bandbreite fair verteilen will, dann hat man mit einem Proxy ein Problem. Der Proxy ist im Upstream Quelle aller Anfragen, die können also nicht nach User unterschieden werden, egal was man vorher in der mangle table angestellt hat. Ohnehin ist Shaping im Upstream von begrenzter Nützlichkeit.
Im Downstream kann man die Bandbreite zwar fair verteilen, muss sich dann aber nach der Geschwindigkeit des Netzwerkes hinter dem Proxy richten. Das ist meistens langsamer als das Netz, aus dem die Anfragen kommen. Zum Beispiel wenn der Proxy zwischen einer DSL-Leitung und einem schnelleren LAN sitzt. Der Vorteil des Proxys, dass er zwischengespeicherte Daten schneller ausliefert als die DSL-Leitung es könnte, wäre bei einem solchen Shaping dahin.
Squid 3 kann deshalb Pakete abhängig davon, ob die gelieferten Daten aus dem Cache kommen oder nicht, markieren. Anhand der Markierung sortiert man die dann in verschiedene Qdiscs oder Klassen — einmal Bandbreitenmanagement mit DSL-Geschwindigkeit, einmal mit LAN-geschwindigkeit. Problem gelöst.
Aus der Doku:
This setting is configured by setting the source TOS values:
local-hit=0xFF Value to mark local cache hits.
sibling-hit=0xFF Value to mark hits from sibling peers.
parent-hit=0xFF Value to mark hits from parent peers.
(...)
disable-preserve-miss
If set, any HTTP response towards clients will
have the TOS value of the response comming from the
remote server masked with the value of miss-mask.
miss-mask=0xFF
Allows you to mask certain bits in the TOS received from the
remote server, before copying the value to the TOS sent
towards clients.
Default: 0xFF (TOS from server is not changed).
Update 2010-04-28: Ok, ich hätte vielleicht erwähnen sollen, dass Squid3 dazu mit
--enable-zph-qos
kompiliert werden muss. Im Debian-Paket ist das nicht der Fall, es führt also kein Weg dran vorbei.