Last Updated on 4. Februar 2014 by Thomas J. Fehr
Wichtiger Hinweis zur pfSense Version 2.1:
04.02.2014: Es scheint das Load Balancing mit aktiviertem Squid bei vielen gar nicht mehr funktioniert. Die Failover-Konfiguration funktioniert jedoch ohne Probleme mit dem Squid Proxy. Siehe pfSense Forum
Um einen Standort mit redundanter Internetanbindung auszurüsten, eignet sich die Firewall-Distribution pfSense 2.x perfekt. Die Distribution unterstützt standardmässig Load Balancing und Failover mit mehreren WAN-Anschlüssen. Mehr dazu findet man im pfSense Wiki unter Multi-WAN.
Wird der Web Proxy Squid nicht auf dem gleichen Host betrieben, sondern hinter der Firewall, bietet auch diese Konfiguration keine grossen Probleme. Den das LoadBalancing und Failover funktioniert gut.
In diesem Beitrag werde ich auf die Konfiguration eingehen, bei der Squid auf dem selben Host läuft. Im Web findet man sehr viele Beiträge zu diesem Thema. Es scheint für diese Lösung keine Standardkonfiguration zu geben. Je nachdem ob man zusätzliche Pakete installiert hat, kann die Konfiguration abweichen. Was bei einer Installation läuft, muss nicht zwangsläufig bei einer anderen funktionieren. Ich werde hier einfach meine Erfahrungen und Ergänzungen vorstellen, die ich beim Sichten der verschiedenen Anleitungen gemacht habe, bis ich eine funktionierende Konfiguration hatte. Dieser Beitrag soll kein vollständiges „Howto“ sein, sondern nur die wichtigen Punkte hervorheben, die mir geholfen haben.
Schritt 1: Multi-WAN
Als erster Schritt muss die Multi-WAN Konfiguration, wie in der Anleitung beschrieben, erstellt und ohne Proxy getestet werden. Dabei sollten zusätzlich folgende wichtige Punkte beachtet werden:
Gateways Einstellungen
Anmerkung zur pfSense Version 2.0.3:
Unter „System->Routing->Gateways“ sollte kein Gateway als „Default-Gateway“ markiert sein. Es scheint als verwendet pfSense standardmässig den Gateway des WAN-Interfaces als „Default-Gateway“. (Beim Versuch das WAN2-Interface als „Default-Gateway“ zu definieren funktionierte die Abfrage über Squid nicht mehr.)
Anmerkung zur pfSense Version 2.1:
Mit der Version 2.1 scheint das Definieren eines „Default-Gateway“ auch bei mir wieder zu Funktionieren. Daher sollte unter „System->Routing->Gateways“ ein Gateway als „Default-Gateway“ markiert werden.
Unter „Diagnostics->Routes“ kann die Routingtabelle eingesehen werden und dort findet man auch den Eintrag des „Default-Gateway“.
Ein weiterer wichtiger Punkt ist die Einstellung „Allow default gateway switching“ welche aktiviert werden sollte. So wird beim Ausfall des WAN-Interfaces automatisch ein anderes Interface als „Default-Gateway“ eingesetzt. Dies kann unter „System->Advanced->Miscellaneous“ geändert werden.
DNS-Server Einstellungen
Bei den DNS-Server Einstellungen sollten pro Gateway mindestens ein DNS-Server eingetragen werden. Was auch nicht schaden kann, ist ein öffentlicher DNS-Server der über alle Interfaces erreichbar ist. Hier in diesem Beispiel wurde zusätzlich ein DNS-Server von Google angegeben. Eintragen kann man diese unter „System->General Setup“.
Firewall Rules
Zusätzlich zu den Firewall-Regeln die den Datenverkehr über den gewünschten Gateway oder die Gatewaygruppe leiten, muss noch eine eigene Regel für den DNS-Traffic des Squid Proxy erstellt werden.
Details der Floating-Rule:
- Interfaces: Wan & Wan2
- Direction: out
- Protocol: TCP/UDP
- Source: any
- Destination: any
- Destination Port: 53 (DNS)
- Gateway: Wan1BalanceWan2 (Definierte Gatewaygruppe)
Schritt 2: Squid Konfiguration
Wurde die Multi-WAN Konfiguration erfolgreich getestet (Unterbruch simulieren der verschiedenen WAN’s, surfen funktioniert noch), kann mit der Konfiguration des Proxy-Server’s angefangen werden.
Dazu werden unter „Services->Proxy Server“ die Interfaces ausgewählt bei denen die HTTP-Abfrage über den Proxy Server laufen sollen. Anmerkung: In manchen Anleitungen steht, man soll das „Loopback“ Interface auch auswählen. Dies wird jedoch in dieser Konfiguration nicht verwendet, sondern führt nur zu Fehler bei den Proxy abfragen.
Als letzte Einstellung muss unter „Custom Options“ die Zeile „tcp_outgoing_address 127.0.0.1;“ eingetragen werden. Mit diesem Befehl schickt Squid sämtliche TCP-Anfragen wieder zurück an pfSense, wo dann die Pakete an den richtigen Gateway verschickt werden.
Zum Schluss
Nach diesen Einstellungen sollten nun alle HTTP-Anfragen die über den Squid Web Proxy gehen, auch vom Load Balancing und Failover Mechanismus von pfSense profitieren. Diese Konfiguration habe ich nun seit einiger Zeit im Einsatz und es scheint gut zu funktionieren.
Bei Webapplikationen welche die Anmeldeinformationen an eine IP knüpfen, kann das Load Balancing zu Probleme führen. Nach dem Anmelden wird man kurze Zeit später wieder abgemeldet. Das ist immer dann der Fall, wenn die Verbindung neu über einen anderen Gateway geht. Um diese Problematik zu minimieren, kann man eigene Floating-Rules definieren oder man verwendet die Option „Use sticky connections“. Diese Option sorgt dafür, dass eine bestehende Verbindung immer über denselben Gateway geleitet wird. Aktivieren kann man sie unter „System->Advanced->Miscellaneous“. (Siehe Screenshot „Load Balancing Einstellungen“)
Nützliche Links
pfSense: Erweitern mit Zusatzpaketen (Erweiterungen)
pfSense doc: Multi-WAN
Google Public DNS
pfSense 2.0.2 Multiwan will filter ssl (squid+squidGuard+Lightsquid)
PDF: Set-up transparent Squid Web Proxy with failover on multi-WAN links
default gateway switching concern
New HOWTO: pfSense Squid Web Proxy with multi-WAN links
pfSense Multi-WAN – How to really make it work
Öffentliche Nameserver in der Schweiz
Hi Thomas,
ich habe eine kurze Frage: Wie deaktiviere ich das default-Gateway? Wenn ich den Haken entferne bleibt mein erstes Gateway trotzdem default. Ich komme nicht ohne ein default-Gateway aus den Settings. Hast Du einen Tipp?
Grüße
Hallo
Wenn du die aktuellste pfSense Version 2.1 hast, sollte das Definieren eines “Default-Gateway” funktionieren. Habe vor Kurzem die neue Version installiert und kann jetzt auch WAN2 als “Default-Gateway” markieren und die Abfragen über Squid werden beantwortet. Daher versuch zuerst ein Gateway als “Default-Gateway” zu definieren.
Einen “Default-Gateway” brauchst du immer, nur hat das Markieren in der vorherigen Version, zumindest in meiner Konfiguration, unter “System->Routing->Gateways” nicht wirklich geklappt und nur zu Problemen geführt. Daher habe ich geschrieben, dass ich den „Haken“ entfernt habe.
Und wie sieht es bei dir aus? Funktioniert es?
Grüsse
Hallo Thomas,
sollte das mit der Version 2.1 auch funktionieren?
Bei mir geht Traffic nur übers defaultGW.
Grüsse
Hallo Chris
Ja es funktioniert auch in der Version 2.1. Hast du den bei den „Firewall Rules“ eine Regel definiert, welche sämtlichen Netzwerkverkehr (Bsp. LAN) über deine erstellte „Gateway Group“ leitet? (Siehe Schritt 1 Multi-WAN)
Grüsse
Thomas
Hallo Thomas,
ja habe ich. Ohne Proxy funktioniert das auch ganz gut.
Aber via Proxy läuft der Traffic nur über das defaultGW.
Grüsse
Chris
Hallo Chris
Also wenn ich dich richtig verstehe, funktioniert grundsätzlich das „Failover / Loadbalancing“ solange du nicht den Proxy (Squid) verwendest?
Wenn du eine Leitung offline nimmst (Stecker ziehst), hast du immer noch Internetzugriff und im Dashboard wird dir ein Interface als offline angezeigt?
Wie sieht den deine Konfiguration aus?
-> Squid Version
-> Gateway Groups
-> Loadbalancing oder Failover?
-> Firewall Rules die den Traffic weiterleiten
Um dir Helfen zu können, brauche ich halt doch ein paar Infos mehr 🙂
Grüsse
Thomas
Hallo Thomas,
sorry fürs späte Melden. Habe jetzt nochmal neu installiert.
Squid-Version ist die 2.79 aus den Packages.
Gateway Group ist angelegt und Loadbalancing funktioniert auch.
– Eine Lan Regel: LAN net –> pfsenseIP:3128
– keine WAN1 oder WAN2 Regeln
– Floating: TCP/UDP * * * 53 GWGROUP
Sobald ich den Proxy nutze, geht der ganze Traffic über WAN1
MfG
Chris
Hallo Chris
Ich verstehe deine LAN-Regel nicht ganz.
Du willst also aus dem LAN nur traffic zu deinem Proxy erlauben??
Eigentlich solltest du eine Regel haben, die dein Traffic zuerst einmal an deine GWGROUP schickt. Sonst wird
ja dein Traffic gar nicht „Loadbalanced“:
Proto Source Gateway
IPv4 TCP/UDP LAN net GWGROUP
Dann aktivier in der Proxy-Konfiguration mal den „Transparent proxy mode“.
Und kontrollier, wie im Schritt 2 beschrieben, dass du im Feld “Custom Options” “tcp_outgoing_address 127.0.0.1;” eingetragen hast.
Was passiert nun wenn du auf eine Webseite mit IP-Anzeige gehst und diese wiederholt aktualisierst ?
Grüsse
Thomas
Hallo Thomas,
es wird immer dieselbe IP angezeigt. Komischerweise NICHT die vom default GW.
MfG
Chris
Hallo Chris
Die IP die angezeigt wird, sollte aber dann schon eine von dir sein.
Wenn du zwei Leitungen hast solltest du auch 2 IP’s haben.
Kann natürlich auch sein, dass dein Provider auch einen Proxy zwischen geschaltet hat.
Im Moment fehlen mir einfach die Informationen um dir helfen zu können. Ich kenne ja deine Infrastruktur nicht. Du kannst mir gerne eine Email schicken, mit einem Beschrieb deiner pfSense Infrastrukur und Screenshots der Einstellungen, damit diese nicht im Blog Veröffentlicht sind.
Bei interesse kannst du mir im Kontakt Formular schreiben, werde dir dann die Email schicken.
Ansonsten können Sie dir im pfSense Forum auch weiterhelfen.
Grüsse
Thomas
Hallo Thomas,
erstmal Danke für Deine Hilfe.
Laut div. Threads im pfsense Forum soll in der 2.1 MultiWAN und Squid nicht funktionieren, bei einigen aber scheinbar wieder doch. Sind sogar grade ein paar aktualiesierte Threads ganz oben.
So richtig schlau wird man da nicht draus.
Ich hab das jetzt erstmal zurückgestellt und wenn ich Zeit hab, versuch ichs mit der 2.03 und MultiWAN/Squid
Hast Du eigendlich die 2.1 mit MultiWAN neu aufgesetzt oder Deine 2.03 geupdatet? Vielleicht funktioniert es deshalb bei Dir.?
MfG
Chris
Hallo Chris
Ich habe jetzt mal einen Hinweis im Artikel angefügt, dass es mit der pfSense Version 2.1 und aktiviertem Squid Proxy Probleme mit dem Load Balancing gibt. Zu deiner Frage: Ich habe meine Version 2.0.3 Upgraded und kurze Zeit später lief nichts mehr. Habe dann eine Neuinstallation vorgenommen und ein Backup der Konfiguration eingespielt. Ich würde bei der Version 2.1 bleiben solange du nicht zwingend den Proxy brauchst. Hoffe es wird bald eine Lösung gefunden, die für alle funktioniert.
Gruess
Thomas