s3dr1ck
Goto Top

Squid soll verschiedene Absender-IPs liefern

Brauche Hilfe bei der Konfiguration meiner Squid-Proxys für eine bestimmte Anwendung...

Hallo zusammen!

Hier erstmal die Problemstellung:

Es gibt 2 Webserver hinter einem Loadbalancer. Die beiden Webserver sind im Optimalfall synchronisiert. Um eben diese Synchronisation und andere Dinge zu testen, wollen unsere Entwickler möglichst einfach gezielt auf diese beiden Server zugreifen.

Ein Kollege von mir hat sich da folgende Lösung ausgedacht:

Der Loadbalancer soll eingehende Verbindungen unterscheiden und entsprechend an den richtigen der beiden Webserver weiterleiten. Die Unterscheidung funktioniert in diesem Script wohl nur anhand der IPs und nicht anhand des Ports. Diesen Umstand muss ich als gegeben hinnehmen.

Somit habe ich nun einen Squid-Proxy aufgesetzt. Dieser hat auf 2 Interfaces 2 verschiedene IP-Adressen. Der Proxy soll nun eingehende Verbindungen entweder anhand des Ports über den der Zugriff auf den Proxy stattfindet oder aber anhand der IP, die die Clients nutzen um sich mit dem Proxy zu verbinden unterscheiden und den clients dann seine entsprechende IP als Absenderadresse mitgeben.

Also mal ganz praktisch:

Ich verbinde mich als user mit der URL des Webs. Habe ich nun bei meiner Proxykonfiguration den Port 8080 eingegeben, dann gibt der Proxy die Verbindung über die IP seiner ersten Schnittstelle weiter. Benutze ich Port 8081, so verbindet der Proxy mich über seine 2. Schnittstelle weiter. Der Loadbalancer erkennt nun anhand der IP, ob meine Anfrage an Webserver1 oder an Webserver2 geleitet werden muss. Die Unterscheidung muss nicht zwingend über den Port stattfinden. Es kann wie gesagt auch über die 2 verschiedenen Interfaces passieren.

Wichtig ist halt nur, dass der Loadbalancer mit 2 verschiedenen Absender-IPs gefüttert werden kann.

Ich habe das ganze nun so gelöst, dass ich Squid mit 2 verschiedenen Konfigurationsfiles 2mal starte. Die eine Konfiguration lässt Squid auf der ersten IP-Adresse auf Port 8080 lauschen und die andere Konfiguration lauscht auf der 2. IP auf Port 8081. Das funktioniert super, da so die Clients verschiedene Absenderadressen bekommen, je nachdem welches Interface vom Squid sie in Ihrer lokalen Proxykonfiguration eintragen.

Ich finde es aber sehr unschön, 2 Instanzen von Squid laufen zu lassen. Ich bin mir sicher, dass man das auch in einer einzelnen Konfiguration hinbekommen kann und hab auch 2 halbe Arbeitstage die Dokumentation gelesen und sehr viel rumgetestet, aber ich bekomme es irgendwie nicht hin, dass mir eine Instanz des Squid seine 2 verschiedneen Interfaces als Absenderadresse liefert. Ich bekomme immer die gleiche.

Man kann nun zwar ACLs anlegen und für jede ACL eine bestimmte tcp_outgoing_address angeben, allerdings kann ich mithilfe der ACLs zwar Ports oder bereiche definieren, aber tcp_outgoing_address erwartet wohl eine ACL die eine IP-Adresse beinhaltet, aber keine einfache Portangabe.


Ich glaube ich habe in meiner Planung einen groben Denkfehler oder ich hab gerade ein Brett vorm Kopf. Die ganze Sache läuft so zwar, aber ich finde es mehr als unschön.

Wenn mir also evt.. wer mit einem Zaunpfahlwink oder einem Tip oder Stichwort weiterhelfen könne, wie ich das eleganter mit einer einzelnen Squidinstanz und über dst und src ACLs regeln kann, wäre ich sehr dankbar. Oder aber wenn Ihr sagt, das was ich hier gemacht habe, ist die einfachste Lösung, die Squid hergibt für diesen Fall, dann wär ich auch mehr oder weniger zufrieden, aber so wie es jetzt ist, kann ich nicht in Ruhe schlafen:P


EDIT:

Ok, habs hinbekommen!

Seit Version 2.7 gibt es einen neuen ACL-Typ namens myport (bzw. myportname für SSL). Dieser gibt den Port an, auf dem die Clients anfragen. Also zum Beispiel:

acl clients_port1 myport 8080
acl clients_port2 myport 8081

Nun kann man mit tcp_outgoing_address den clients eine bestimmte Absenderadresse, entsprechend ihres Ports verpassen:

tcp_outgoing_address 10.11.12.13 clients_port1
tcp_outgoing_address 10.11.12.14 clients_port2

Wenn ich jetzt in den Proxy über Port 8080 connecte, komme ich über dessen lokale IP 10.11.12.13 raus und über 8081 halt über die 10.11.12.14.


Hoffe das hilft evtl. mal jemandem weiter. War jedenfalls nicht so einfach zu finden in der Doku. In der deutschen steht davon garnichts...Habs irgendwie über die Wiki gefunden.

Content-Key: 114349

Url: https://administrator.de/contentid/114349

Printed on: April 19, 2024 at 20:04 o'clock