Squid Proxy Priorisierung?

nuhll

Freizeitschrauber(in)
Hallo,
ich setze derzeit einen Squad Lan Proxy auf.

Gibt es eine Möglichkeit z.B Windows Updates/Spiele Patches usw. mit einer niedrigen Priorität laufen zu lassen so das Surfen normal möglich ist? Momentan ist es so das wenn Windows Updates gecached werden das Internet ne weile nicht oder schlecht geht... wenn ja, wie?

Wenn eine Priorisierung nicht geht, kann man die Bandbreite wenigstens beschränken?

Vielen dank für die Hilfe!
 
Zuletzt bearbeitet:
Da der Proxy afaik nur die einzelnen Anfragen, nicht aber den Traffic an sich beeinflusst, wird Squid hier wohl nicht weiterhelfen. Was du brauchst, ist eine QOS-Lösung wie die hier. An Software werden glaube ich nur iptables und iproute/iproute2 benötigt.
Grundsätzlich ist es extrem schwierig, eingehenden Traffic zu priorisieren, da der ja schon am Router anklopft. Du kannst aber den ausgehenden Traffic steuern, so dass den Clients oder bestimmten Ports mehr Anteile des Upstreams zugeteilt werden.

Erläuterung: das Skript teilt ausgehenden Traffic in zwei Kategorien ein - einmal Traffic, welcher möglichst lagfrei rausgehen soll (SSH-Verbindungen, IRC-Verbindungen, Traffic der Clients) und Traffic, welcher einfach nur möglichst viel Bandbreite bekommen soll, aber nicht so latenzkritisch ist, hier alles, was von /zu der Adresse 10.0.0.1 geht. Letztendlich musst du also nur die Kriterien anpassen - Knackpunkt hierbei ist, Kriterien zu finden, mit welchen du die dicken Downloads von normalem "Surftraffic" unterscheiden kannst. Eine Möglichkeit wäre, das über Ziel-IP-Adressen zu machen, was aber natürlich etwas aufwändig ist.

MfG Jimini
 
Kann man denn bei Squid keine Max Durchsatz angeben? Pro Domain z.B. es muss doch igendeine art Begrenzung geben!? Hab halt kein Bock das ich beim Zocken mit einmal nen 9012830923 ping hab, weißte.
 
Zuletzt bearbeitet:
Hast du denn ne Ahnung wie ich es schaffe einen DNS Server auf Debian zu installieren welcher NUR bestimmte Domains auf meinen lokalen Proxy leitet? Ich hab Bind probiert und bin an der unglaublich schwierigen Konfig gescheitert... bräuchte da was ganz einfaches für vllt 5 Domains...
 
Meinst du, du möchtest Anfragen an bestimmte Domains über den Proxy laufen lassen und andere sollen ohne Proxy rausgehen? Das würde ich über iptables machen:
Code:
iptables -t nat -A PREROUTING -d www.beispiel.de -p tcp --dport 80 -j REDIRECT --to-ports 3128
Ich habe es nicht getestet, probiere die Regel mal aus. Die Regel deckt allerdings nur HTTP-Traffic ab, sobald SSL-Verbindungen genutzt werden, gehen die an der Regel vorbei. Aber Squid und HTTPS ist ohnehin nochmal ein eigenes Kapitel.

Es dürfte auch möglich sein, nur bestimmte Domains durch Squid zu erfassen, indem man eine entsprechende ACL anlegt. Aber ich muss gestehen, dass ich die Squid-Config immer recht kompliziert fand und daher alles, was möglich ist, über iptables mache.

An Bind würde ich mich mit dem Problem nicht setzen, Bind ist in der Tat recht nervig zu konfigurieren.

MfG Jimini
 
Nein. Es soll alles über den Proxy laufen, aber bestimmte Programme wie z.B: League of legends ignorieren gerne mal die Proxy Einstellungen... daher muss man die Domain der Updates auf den Lokalen Server umleiten damit das gecached wird, momentan mache ich das per Hosts, aber das ist nicht schön weil es nicht funktioniert wenn Besuch da ist...
 
Wie leitest du den Traffic denn aktuell zum Proxy hin? Die meisten Updater laufen ja auf sehr speziellen Ports. Wenn der Proxy dann aber nur auf Port80-Traffic reagiert, ist es ja klar, dass die Updater ihre Daten am Proxy vorbei senden und empfangen.

MfG Jimini
 
Nein, das ist quatsch. Wenn du einen Proxy einstellst dann kannst du per Proxy jeden port ansprechen.

Zum Beispiel: Mein proxy läuft auf Port 8080, trotzdem kann ich ja im Internet surfen (Port 80) ;-).

Wenn man im Internet Explorer den Proxy einstellt dann geht schon fast alles über Proxy, aber natürlich nicht Domains wo die IP auf <korrekte IP zum Patchen>, dann gehts zwar über Proxy, wird aber nicht gecached. Daher muss ich die Domain umleiten auf den Proxy.

Ich hab das momentan so:

LANCache: 0.4 Is up! | ChurchNerd.net

SquidFaq/WindowsUpdate - Squid Web Proxy Wiki
 
Nein, das ist quatsch. Wenn du einen Proxy einstellst dann kannst du per Proxy jeden port ansprechen.

Zum Beispiel: Mein Proxy läuft auf Port 8080, trotzdem kann ich ja im Internet surfen (Port 80) ;-).

Wenn man im Internet Explorer den Proxy einstellt dann geht schon fast alles über Proxy, aber natürlich nicht Domains wo die IP auf <korrekte IP zum Patchen>, dann gehts zwar über Proxy, wird aber nicht gecached. Daher muss ich die Domain umleiten auf den Cache von Nginx.

Ich hab das momentan so:

LANCache: 0.4 Is up! | ChurchNerd.net

SquidFaq/WindowsUpdate - Squid Web Proxy Wiki

Problem ist nur das http://churchnerd.net/2013/11/lancache-dns-forwarder-setup/ mir nicht hilft da ich nicht noch ein Rechner Extra wegen ein paar Umleitungen hinstellen will...

Greifen denn die IP Tables bei Anfragen über Squid?

Hinzu kommen soll noch:
http://lkrms.org/caching-ios-updates-on-a-squid-proxy-server/
und AV.

Ist erstmal ne SChweine arbeit, aber wenns einmal läuft, geile Location um spontane Lan Partys zu organisieren.
 
Zuletzt bearbeitet:
Nein, das ist quatsch. Wenn du einen Proxy einstellst dann kannst du per Proxy jeden port ansprechen
Ja okay, ich ging jetzt von einem transparenten Proxy aus - wenn du den Proxy im Client festlegst, kannst du natürlich sonstwas einstellen. Aber dennoch reagiert der Proxy meines Wissens nicht auf jeglichen Traffic, den beispielsweise Firefox anfordert - man kann in der Squid-Config ja eine ganze Reihe von Ports / Protokollen festlegen, welche behandelt werden sollen.
Zum Beispiel: Mein Proxy läuft auf Port 8080, trotzdem kann ich ja im Internet surfen (Port 80) ;-).
Das sind ja zwei unterschiedliche Paar Schuhe, hierbei kommt es ja nur auf die Adressierung an. Oder verstehe ich dich falsch?
Ich hab das momentan so:
LANCache: 0.4 Is up! | ChurchNerd.net
SquidFaq/WindowsUpdate - Squid Web Proxy Wiki
Problem ist nur das LANCache: DNS Forwarder Setup | ChurchNerd.net mir nicht hilft da ich nicht noch ein Rechner Extra wegen ein paar Umleitungen hinstellen will...
Kannst du evtl. kurz skizzieren, wie dein Setup aussieht? Ich möchte ungern mehrere Howtos durchlesen deswegen ;)
Greifen denn die IP Tables bei Anfragen über Squid?
Naja, die iptables greifen den Traffic ab, noch bevor er Squid erreicht. Du musst also erst den Traffic an Squid leiten, welcher vom Proxy manipuliert werden soll.
Ist erstmal ne SChweine arbeit, aber wenns einmal läuft, geile Location um spontane Lan Partys zu organisieren.
Ich würde, wenn es irgendwie möglich ist, den Proxy transparent laufen lassen. Dann kommt niemand ohne größeren Aufwand am Proxy vorbei und du sparst dir die Konfiguration der Clients.

MfG Jimini
 
Ziemlich einfach.

Ich möchte bei allen Rechnern/iPhones die DNS von meinem Server eintragen.

Dieser DNS Server soll für einige Domains (wegen Caching) die IPs auf den Server umleiten.

Dort empfängt sie dann ein NGINX Reverse Proxy der eingestellt ist wie gesagt einige Patches und Updates zu Cachen.

Zusätzlich ist auf dem Server ein Squid Proxy, welcher Internetseiten sowie Windows Updates Cached. (wird manuell eingestellt)

Es geht auch so wie jetzt, das ich einfach die Hosts datei manipulier, aber wäre kewler wenns automatisch geht :D...

Seh ich das richtig wenn ich einen DNS Server laufen habe und ein Client die IP von ner Domain haben will, die Iptables nicht greifen?

Wie realisiere ich einen transparenten Proxy, dafür brauch ich doch auch andere Hardware bzw. Router? Davon abgesehen geht das auch mit Squid?

Beste Möglichkeit wahrscheinlich den Rechner direkt als Zugangspunkt benutzen, dh 2 Netzwerkkarten usw...?! Dann wäre auch das bzgl. DNS gelöst.
 
Zuletzt bearbeitet:
Damit die iptables-Regeln greifen, muss der entsprechende Traffic über das System laufen, auf welchem die Regeln aktiv sind - idealerweise fungiert der Rechner also als Gateway.
Mit DNS, Caching etc. haben die iptables selber erstmal nichts zu tun, sie sorgen nur dafür, dass Traffic zugelassen, verworfen oder umgeleitet wird.

Squid eignet sich hervorragend für einen transparenten Proxy, ein solches Setup (Squid arbeitet darüber hinaus noch als Adblocker) habe ich bei mir seit Jahren auf einem gewöhnlichen Rechner (welcher gleichzeitig als Router und Firewall fungiert) laufen.

Es bleibt dann aber immer noch das Problem, dass die Updates beim allerersten Download die Leitung dichtmachen, oder?

MfG Jimini
 
Wenn das Features/DelayPools - Squid Web Proxy Wiki funktioniert, nicht.

Eine Frage. Wenn ich einen Transparenten Proxy laufen lasse, wird ja jeglicher Traffic, per IPtables z.B., auf den Squid (8080) geleitet. Kann man davor ne Regel "schalten" das er Anfragen aus dem Netzwerk auf Domain XYZ NICHT auf 8080 sondern auf 80 leitet, wenn ja wie sieht so eine Regel aus?
 
Zuletzt bearbeitet:
Wenn ich einen Transparenten Proxy laufen lasse, wird ja jeglicher Traffic, per IPtables z.B., auf den Squid (8080) geleitet. Kann man davor ne Regel "schalten" das er Anfragen aus dem Netzwerk auf Domain XYZ NICHT auf 8080 sondern auf 80 leitet, wenn ja wie sieht so eine Regel aus?
Die folgende Regel leitet alle Anfragen, welche aus dem LAN nach außen auf Port 80 gehen würden (und auf $lan zuerst auf dem Router landen), auf Port 80 des Routers (hier 10.0.0.1) um:
Code:
iptables -t nat -A PREROUTING -i $lan -p tcp --dport 80 -j REDIRECT --to-ports 10.0.0.1:80
Zudem muss natürlich erlaubt sein, dass Port 80 angesprochen werden darf:
Code:
iptables -A INPUT -i $lan -p tcp -d 10.0.0.1 --dport 80 -j ACCEPT
Das gleiche kannst du dann auch nochmal für Port 443 (HTTPS) machen, allerdings wird es da dann wahrscheinlich etwas schwieriger, mit Squid zu cachen bzw. den Traffic zu manipulieren.

MfG Jimini
 
Ne, 80 reicht mir. Wollens net übertreiben, wenn man SSL Cachen will ist das im End effekt ne Man in the Middle attack, kann man machen, aber nur mit großen aufwand und dabei hebelst du die SSL Sicherheit aus...

Nur wie leite ich nun bestimmte Domains auf einen anderen Port?
 
Das Problem ist dann aber, dass Update-Programme, welche über HTTPS Daten herunterladen, dein komplettes Konzept aushebeln.
Wenn du nur den Traffic, welcher an eine bestimmte Zieladresse geht, auf den lokalen Port 80 umleiten willst, fügst du bei der oberen Regel noch ein "-d 1.2.3.4" oder "-d www.beispiel.de" (ich glaube, iptables kann das auflösen) ein.

MfG Jimini
 
Okay, alles soweit da und funktioniert. Also jedenfalls Transparent Proxy, Internet und sogar per Wlan (bin schon etwas stolz) :P.

Aber es war der Horror im nachhinein auf Debian eine Netzwerkkarte zu installieren. K.a. wie, aber es geht.

erstes dickes Problem mit IPtables.

#!/bin/sh

# squid proxy's IP address (which is attached to eth0)
SQUID_SERVER=`ifconfig eth0 | sed -ne 's/.*inet addr:\([^ ]*\).*/\1/p'`

# interface connected to WAN
INTERNET="eth0"

# interface connected to LAN
LAN_IN="eth1"

# squid port
SQUID_PORT="3128"

# clean old firewall
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# load iptables modules for NAT masquerade and IP conntrack
modprobe ip_conntrack
modprobe ip_conntrack_ftp

#domains umleiten 2
#iptables -t mangle -P PREROUTING ACCEPT
#iptables -t nat -A PREROUTING -p tcp -i eth0 --source 0.0.0.0/0.0.0.0 -d cs.steampowered.com --destination-port 80 -j DNAT --to-destination 192.168.0.1:80
#iptables -t nat -A PREROUTING -p tcp -i eth0 --source 0.0.0.0/0.0.0.0 -d content1.steampowered.com --destination-port 80 -j DNAT --to-destination 192.168.0.1:80
#iptables -t nat -A PREROUTING -p tcp -i eth0 --source 0.0.0.0/0.0.0.0 -d content2.steampowered.com --destination-port 80 -j DNAT --to-destination 192.168.0.1:80
#iptables -t nat -A PREROUTING -p tcp -i eth0 --source 0.0.0.0/0.0.0.0 -d content3.steampowered.com --destination-port 80 -j DNAT --to-destination 192.168.0.1:80
#iptables -t nat -A PREROUTING -p tcp -i eth0 --source 0.0.0.0/0.0.0.0 -d content4.steampowered.com --destination-port 80 -j DNAT --to-destination 192.168.0.1:80
#iptables -t nat -A PREROUTING -p tcp -i eth0 --source 0.0.0.0/0.0.0.0 -d content5.steampowered.com --destination-port 80 -j DNAT --to-destination 192.168.0.1:80
#iptables -t nat -A PREROUTING -p tcp -i eth0 --source 0.0.0.0/0.0.0.0 -d content6.steampowered.com --destination-port 80 -j DNAT --to-destination 192.168.0.1:80
#iptables -t nat -A PREROUTING -p tcp -i eth0 --source 0.0.0.0/0.0.0.0 -d content7.steampowered.com --destination-port 80 -j DNAT --to-destination 192.168.0.1:80
#iptables -t nat -A PREROUTING -p tcp -i eth0 --source 0.0.0.0/0.0.0.0 -d content8.steampowered.com --destination-port 80 -j DNAT --to-destination 192.168.0.1:80

#domains umleiten
iptables -t nat -A PREROUTING -d cs.steampowered.com -p tcp --dport 80 -j REDIRECT --to-ports 80
iptables -t nat -A PREROUTING -d content1.steampowered.com -p tcp --dport 80 -j REDIRECT --to-ports 80
iptables -t nat -A PREROUTING -d content2.steampowered.com -p tcp --dport 80 -j REDIRECT --to-ports 80
iptables -t nat -A PREROUTING -d content3.steampowered.com -p tcp --dport 80 -j REDIRECT --to-ports 80
iptables -t nat -A PREROUTING -d content4.steampowered.com -p tcp --dport 80 -j REDIRECT --to-ports 80
iptables -t nat -A PREROUTING -d content5.steampowered.com -p tcp --dport 80 -j REDIRECT --to-ports 80
iptables -t nat -A PREROUTING -d content6.steampowered.com -p tcp --dport 80 -j REDIRECT --to-ports 80
iptables -t nat -A PREROUTING -d content7.steampowered.com -p tcp --dport 80 -j REDIRECT --to-ports 80
iptables -t nat -A PREROUTING -d content8.steampowered.com -p tcp --dport 80 -j REDIRECT --to-ports 80

# define necessary redirection for incoming http traffic (e.g., 80)
iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT

# forward locally generated http traffic to Squid
iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner --uid-owner proxy -j ACCEPT

iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports $SQUID_PORT

# forward the rest of non-http traffic
iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $INTERNET -j ACCEPT

# enable IP forwarding for proxy
echo 1 > /proc/sys/net/ipv4/ip_forward


Routing, dns und alles drum und dran funktioniert. NUR möchte ich jetzt zum cachen einzelne Domains auf einen anderen Port leiten ( nginx - 80) statt 3128 (squid proxy).

Einfache Idee? Habe wie du siehst schon was probiert, geht aber irgendwie nicht. Ich weiß auch nicht die reihenfolge. Ursprünglich ging der Nginx Proxy (als ich einfach nur per DNS drauf verwies. Seit dem Routing über Debian läufts allerdings GARNICHT mehr - egal was ich mache. *werde ich eventuell so lassen, es scheint als wenn auch squid alleine Steam etc cached...

Ich wunder mich echt wieso man über Debian Router so wenig (aktuelles) findet... unglaublich.

edit:
weiter scheint kein FTP Upload sowie bei Speedtests funktioniert der Upload auch nicht.. was ist da los!? Beim FTP Upload fängts gut an mit 190kb/s+ (von 200) geht dann auf 70... 12... 0 dann bricht ab....

edit2:
verstehe ich http://wiki.ubuntuusers.de/Skripte/Traffic-Shaping richtig, das man zb downloads auch beschneidet wenn man die mehr Leistung gar nicht bräuchte?
 
Zuletzt bearbeitet:
Okay, alles soweit da und funktioniert. Also jedenfalls Transparent Proxy, Internet und sogar per Wlan (bin schon etwas stolz) :P.
Gratuliere! :)
Ich weiß noch, was für ein erhebendes Gefühl es war, als mein erster Selbstbau-Router hochfuhr und Tage später das von mir geschriebene iptables-Skript endlich die Pakete routete.
Aber es war der Horror im nachhinein auf Debian eine Netzwerkkarte zu installieren. K.a. wie, aber es geht.
Eigentlich muss man nur /etc/network/interfaces anpassen, was (theoretisch) aber kein Problem sein sollte - vorausgesetzt, die Karte wird unterstützt. Sofern man aber nichts exotisches verwendet, kommt jede gängige Linux-Distribution mit der Karte sofort klar.
erstes dickes Problem mit IPtables.
Ich würde zunächst nur eine minimale iptables-Konfiguration fahren und diese dann Schritt für Schritt erweitern. Die Fehlersuche gestaltet sich sonst als extrem aufwändig. Nimm also am besten nochmal die Umleitungen raus und suche den Grund, wieso keine Uploads funktionieren.
Ich habe für die Fehlersuche folgenden Block ganz am Ende meines Skripts, den ich bei Bedarf entkommentiere:
Code:
#iptables -A INPUT -j LOG --log-prefix "DROPPED_INPUT: " --log-level=5
#iptables -A OUTPUT -j LOG --log-prefix "DROPPED_OUTPUT: " --log-level=5
#iptables -A FORWARD -j LOG --log-prefix "DROPPED_FORWARD: " --log-level=5
Da der Block am Ende liegt, erfassen diese Regeln alle Pakete, welche bisher nicht auf eine Regel passten. Deswegen liegt sicherheitshalber noch ein
Code:
iptables -A INPUT -j REJECT
iptables -A OUTPUT -j REJECT
iptables -A FORWARD -j REJECT
dahinter. Aus irgendeinem Grund werden nicht erfasste Pakete nämlich bei mir scheinbar weiter verarbeitet, trotz entsprechender Policies.
Immer wenn ich größere Veränderungen in das Skript einarbeite, läuft nebenbei eine Shell mit tail -f /var/log/messages, so dass ich mögliche Fehler sofort sehen kann.
Routing, dns und alles drum und dran funktioniert. NUR möchte ich jetzt zum cachen einzelne Domains auf einen anderen Port leiten ( nginx - 80) statt 3128 (squid proxy).
Einfache Idee? Habe wie du siehst schon was probiert, geht aber irgendwie nicht. Ich weiß auch nicht die reihenfolge. Ursprünglich ging der Nginx Proxy (als ich einfach nur per DNS drauf verwies. Seit dem Routing über Debian läufts allerdings GARNICHT mehr - egal was ich mache. *werde ich eventuell so lassen, es scheint als wenn auch squid alleine Steam etc cached...
Dafür musst du eigentlich nur zusätzliche Umleitungen einbauen, wie du es schon für Port 3128 gemacht hast.
Was die Reihenfolge angeht, so ist der Aufbau recht simpel:
- Definition von Variablen
- Schreiben von Einstellungen (wie etwa echo 1 > /proc/sys/net/ipv4/ip_forward)
- Löschen alter Regeln
- Definieren von Policies
- Masquerading zulassen
- Pakete, welche zu einer aufgebauten Verbindung gehören, zulassen,
- Ausnahmen definieren (sprich: was soll erlaubt sein etc.)
Schau dir dazu nochmal mein Skript in meinem ersten Posting dieses Threads an.
Ich wunder mich echt wieso man über Debian Router so wenig (aktuelles) findet... unglaublich.
Also eigentlich findet man dazu recht viel - es ist ziemlich egal, ob ein Howto von 2006 oder von 2012 ist, da die wesentliche Config sich in den letzten Jahren nicht geändert hat. Zur Not kannst du aber auch in die Wikis von Ubuntu und Gentoo schauen.
edit:
weiter scheint kein FTP Upload sowie bei Speedtests funktioniert der Upload auch nicht.. was ist da los!? Beim FTP Upload fängts gut an mit 190kb/s+ (von 200) geht dann auf 70... 12... 0 dann bricht ab....
Bzgl. Upload:
Was genau funktioniert nicht? Jeglicher Upload auf Port 20, 21 und 80, egal von welchem Client?
edit2:
verstehe ich Traffic-Shaping richtig, das man zb downloads auch beschneidet wenn man die mehr Leistung gar nicht bräuchte?
Downloads werden hier nicht beschnitten - es wird nur dem Traffic auf Port 80 eine höhere Priorität eingeräumt, wenn ein ausgehender FTP-Upload die Leitung dichtmacht. Eingehenden Traffic zu shapen ist alles andere als trivial und meines Wissens nur mit einigem Aufwand machbar (siehe ifb | The Linux Foundation oder Traffic shaping - Gentoo Wiki).
Entscheidend bei den Shaping-Regeln ist der "ceil"-Wert, welcher einer bestimmten Art von Traffic zugewiesen wird. Diesen Wert legt man üblicherweise auf den verfügbaren Upstream, somit bekommt der Traffic immer so viel Bandbreite wie möglich.

MfG Jimini
 
Zurück