OPNsense Forum
International Forums => German - Deutsch => Topic started by: jimjohn on April 13, 2021, 04:18:40 pm
-
Hallo Zusammen,
ich möchte über HAproxy 2 Backend-Services verfügbar machen - und zwar unter folgenden (lokalen) IPs:
https://X.X.0.2:443/aaa ===> X.X.3.100:443
https://X.X.0.2:443/bbb ===> X.X.3.105:443
Es will und will nicht ... anbei meine Konfiguration, vielleicht könnt ihr ja helfen.
Danke vorab!
_______________
# Frontend: main-service ()
frontend main-service
bind X.X.0.2:443 name X.X.0.2:443 ssl crt-list /tmp/haproxy/ssl/XXX.certlist
mode tcp
# tuning options
timeout client 30s
# logging options
# ACL: p: /aaa
acl acl_60759f3e8d6fd1.60739350 path -i /aaa
# ACL: p: /bbb
acl acl_60759f93c7a274.75922385 path -i /bbb
# ACTION: r_AAA
use_backend AAA_pool if acl_60759f3e8d6fd1.60739350
# ACTION: r_BBB
use_backend BBB_pool if acl_60759f93c7a274.75922385
# Backend: AAA_pool ()
backend AAA_pool
# health checking is DISABLED
mode http
balance source
# tuning options
timeout connect 30s
timeout server 30s
# WARNING: pass through options below this line
# add X-FORWARDED-FOR
option forwardfor
# add X-CLIENT-IP
http-request add-header X-CLIENT-IP %[src]
http-reuse safe
server pve_AAA X.X.3.100:443 ssl alpn http/1.1 verify none
# Backend: BBB_pool ()
backend BBB_pool
# health checking is DISABLED
mode http
balance source
# tuning options
timeout connect 30s
timeout server 30s
# WARNING: pass through options below this line
# add X-FORWARDED-FOR
option forwardfor
# add X-CLIENT-IP
http-request add-header X-CLIENT-IP %[src]
http-reuse safe
server pve_BBB X.X.3.105:443 ssl alpn http/1.1 verify none
-
Eine Fehlermeldung und Beschreibung des Fehlerbildes wäre ganz nett.
Oder steht in Deinen Browser beim Laden der Seite "Bitte warten, es will und will nicht"?
-
Wenn du einen der Backend Pools testweise als default im Frontend hinterlegst, kommst du dann zumindest auf den schonmal drauf?
-
Und vor allem über welche Unterscheidung willst du auf die Backend Services? Andere Domain? Ist die richtig eingetragen und konfiguriert? Gibts dafür die korrekten ACLs und Einträge?
-
Wenn du einen der Backend Pools testweise als default im Frontend hinterlegst, kommst du dann zumindest auf den schonmal drauf?
Ja, das funktioniert seit Wochen problemlos. Nun kommt halt ein zweiter Service hinzu. Ich vermute ich hatte vorher schon falsche ACLs.
-
Wenn du einen der Backend Pools testweise als default im Frontend hinterlegst, kommst du dann zumindest auf den schonmal drauf?
Ja, das funktioniert seit Wochen problemlos. Nun kommt halt ein zweiter Service hinzu. Ich vermute ich hatte vorher schon falsche ACLs.
Dann passt was mit deinen Regeln bzw. Bedingungen nicht
Mach Mal Screenshots davon
-
Und vor allem über welche Unterscheidung willst du auf die Backend Services? Andere Domain? Ist die richtig eingetragen und konfiguriert? Gibts dafür die korrekten ACLs und Einträge?
Ich stelle es mir so vor (alles spielt sich im lokalen Netzwerk hinter der OPNsense ab).
https://X.X.0.2/aaa liefert mir die Login-Seite für Service aaa, Zugriffe auf URLs funktionieren so: https://X.X.0.2/aaa/test/123
Selbiges mit dem anderen Service:
https://X.X.0.2/bbb/test/123 bringt mich auf meinen zweiten Service.
-
Eine Fehlermeldung und Beschreibung des Fehlerbildes wäre ganz nett.
Oder steht in Deinen Browser beim Laden der Seite "Bitte warten, es will und will nicht"?
Tut mir leid, bin neu bei HAproxy. Dachte der Config-File würde schon alle Infos enthalten, die ihr braucht. :)
-
Wenn du einen der Backend Pools testweise als default im Frontend hinterlegst, kommst du dann zumindest auf den schonmal drauf?
Ja, das funktioniert seit Wochen problemlos. Nun kommt halt ein zweiter Service hinzu. Ich vermute ich hatte vorher schon falsche ACLs.
Dann passt was mit deinen Regeln bzw. Bedingungen nicht
Mach Mal Screenshots davon
Welche brauchst du genau? Also welche Tabs im OPNsense HAProxy Plugin? Sorry für mein Unwissen. :-\
-
Wenn du einen der Backend Pools testweise als default im Frontend hinterlegst, kommst du dann zumindest auf den schonmal drauf?
Ja, das funktioniert seit Wochen problemlos. Nun kommt halt ein zweiter Service hinzu. Ich vermute ich hatte vorher schon falsche ACLs.
Dann passt was mit deinen Regeln bzw. Bedingungen nicht
Mach Mal Screenshots davon
Welche brauchst du genau? Also welche Tabs im OPNsense HAProxy Plugin? Sorry für mein Unwissen. :-\
Alles gut :)
Eigentlich nur von deinen Bedingungen/Conditions unter dem Rule Tab
-
Anbei die Screenshots. :) :) :)
-
Anbei die Screenshots. :) :) :)
Setze die Bedingung mal auf "Path starts with" statt matches
da sich nach dem /aaa/X ja noch Sachen ändern würde er bei "matches" nicht greifen
-
Anbei die Screenshots. :) :) :)
Setze die Bedingung mal auf "Path starts with" statt matches
da sich nach dem /aaa/X ja noch Sachen ändern würde er bei "matches" nicht greifen
Funktioniert leider nicht:
503 Service Unavailable
No server is available to handle this request.
Muss ich bei dem "Public Service" die Regeln auswählen?
-
Anbei die Screenshots. :) :) :)
Setze die Bedingung mal auf "Path starts with" statt matches
da sich nach dem /aaa/X ja noch Sachen ändern würde er bei "matches" nicht greifen
Funktioniert leider nicht:
503 Service Unavailable
No server is available to handle this request.
Muss ich bei dem "Public Service" die Regeln auswählen?
Wenn ich im Public Service den Default Pool setze, komme ich jeweils auf die Server aaa und bbb ... die Pools sind also auch korrekt konfiguriert. Mensch ... ::) ;D
-
Anbei die Screenshots. :) :) :)
Setze die Bedingung mal auf "Path starts with" statt matches
da sich nach dem /aaa/X ja noch Sachen ändern würde er bei "matches" nicht greifen
Funktioniert leider nicht:
503 Service Unavailable
No server is available to handle this request.
Muss ich bei dem "Public Service" die Regeln auswählen?
Ja die Regeln musst du im Frontend hinterlegen
-
Anbei die Screenshots. :) :) :)
Setze die Bedingung mal auf "Path starts with" statt matches
da sich nach dem /aaa/X ja noch Sachen ändern würde er bei "matches" nicht greifen
Funktioniert leider nicht:
503 Service Unavailable
No server is available to handle this request.
Muss ich bei dem "Public Service" die Regeln auswählen?
Ja die Regeln musst du im Frontend hinterlegen
Bringt auch nix. Selber Fehler wie vorher ...
-
OK, komme der Sache näher. Laut Verbose Log klappt die Weiterleitung, ABER:
https://X.X.0.2/aaa wird weiter geleitet. Der Service dahinter leitet auf /login um, daraufhin erscheint im Browser fälschlicherweise https://X.X.0.2/login.
Es müsste aber heißen: https://X.X.0.2/aaa/login.
Selber Fehler bei bbb, hier komme ich auf https://X.X.0.2/ui statt /bbb/ui.
Fehlt da noch eine weitere Regel bzw. ein spezielles Verhalten? :)
Der Server im Backend-Pool soll natürlich von /aaa/ und /bbb/ nichts mitbekommen. 8)
Ist das das URL Rewriting, das fehlt?
Der initiale Fehler scheint gewesen zu sein, dass ich die Regeln dem Frontend-Service nicht bekannt gemacht habe.
-
> Fehlt da noch eine weitere Regel bzw. ein spezielles Verhalten? :)
Nein, aber deine Backends kommen mit der URL Struktur so nicht klar. Wenn dein Proxy den User auf /aaa/blubb schickt und dein Backend Service aber nicht versteht, dass er gefälligst in /aaa/ laufen soll statt unter dem Root Path / dann wird der alles immer redirecten. Das kann man umständlich im Proxy abfangen, das ist aber eigentlich Job des Backends entsprechend richtig konfiguriert zu sein.
Ist aber auch nicht der Normalfall für HAproxy als Einsatz hier mit der IP zu arbeiten. Klar kann man machen, aber einfacher wäre es schlicht mit einer eigenen (Sub)Domain pro Service und beide dann sinnvoll unter / wenn sie eh schon so installiert sind. Warum dann auch mit IPs rumbasteln, wenn man sprechende Namen nutzen kann :)
-
Klar kann man machen, aber einfacher wäre es schlicht mit einer eigenen (Sub)Domain pro Service und beide dann sinnvoll unter / wenn sie eh schon so installiert sind. Warum dann auch mit IPs rumbasteln, wenn man sprechende Namen nutzen kann :)
OK, nun ist es so, dass ich von außen derzeit nur an das WAN Interface der OPNsense (X.X.0.X) komme, wohingegen die Services in der "DMZ" laufen (X.X.3.X). Ich habe entsprechend eine Firewall Regel für UDP/TCP auf X.X.0.2:443 ALLOW gesetzt. So ist es ja auch fein. Innerhalb der OPNsense ist auch alles andere kein Thema. Da kann ich in Unbound einen DNS Override machen (bspw. für aaa.opnsense.lan) und den direkt auf die X.X.3.(aaa) schicken.
Aber was passiert, wenn jemand "von außen" (zwischen Router und OPNsense) auf den Service möchte? Den direkt auf die X.X.3.X zu schicken wäre irgendwie doof. Außerdem kennt er die OPNsense als DNS-Server nicht. Konkret sollen auch Teilnehmer den Service nutzen können, die sich über VPN auf den VPN-Router wählen und von diesem eine IP im Adressbereich X.X.0.X bekommen. Um die auf die X.X.3.X umzuleiten müssten die doch die OPNsense X.X.0.2 als Gateway bekommen und nicht den VPN-Router X.X.0.1, oder? Vom DNS-Server mal ganz zu schweigen ...
Außerdem nutze ich TLS über ein OPNsense Zertifikat, sodass ich in Zukunft im Zweifel auch HTTP Services nach außen über HTTPS bereit stellen kann.
Kannst du mir konkret sagen, wie ich deiner Meinung nach am besten vorgehen sollte? Danke schonmal vorab! :)
-
Klar kann man machen, aber einfacher wäre es schlicht mit einer eigenen (Sub)Domain pro Service und beide dann sinnvoll unter / wenn sie eh schon so installiert sind. Warum dann auch mit IPs rumbasteln, wenn man sprechende Namen nutzen kann :)
OK, nun ist es so, dass ich von außen derzeit nur an das WAN Interface der OPNsense (X.X.0.X) komme, wohingegen die Services in der "DMZ" laufen (X.X.3.X). Ich habe entsprechend eine Firewall Regel für UDP/TCP auf X.X.0.2:443 ALLOW gesetzt. So ist es ja auch fein. Innerhalb der OPNsense ist auch alles andere kein Thema. Da kann ich in Unbound einen DNS Override machen (bspw. für aaa.opnsense.lan) und den direkt auf die X.X.3.(aaa) schicken.
Aber was passiert, wenn jemand "von außen" (zwischen Router und OPNsense) auf den Service möchte? Den direkt auf die X.X.3.X zu schicken wäre irgendwie doof. Außerdem kennt er die OPNsense als DNS-Server nicht.
Außerdem nutze ich TLS über ein OPNsense Zertifikat, sodass ich in Zukunft im Zweifel auch HTTP Services nach außen über HTTPS bereit stellen kann.
Kannst du mir konkret sagen, wie ich deiner Meinung nach am besten vorgehen sollte? Danke schonmal vorab! :)
Am besten wäre 2 Subdomains anzulegen die auf deine öffentliche IP laufen
Im HAProxy verwaltest du dann alles wie z.B. automatisierte LE Zertifikate für die Backends.
Anhand der passenden ACLs teilst du die Dienste auf.
Dennoch müssen deine Dienste im Backend wie oben beschrieben auch mit den gleichen URLs arbeiten, da diese sonst falsch umgeschrieben werden
-
Ja, das "Problem" ist, dass ich keine öffentliche Erreichbarkeit (weder öffentliche Domain noch öffentliche IP) benötige. Die Daten sollen das lokale Netz (inkl. VPN) nicht verlassen. Es geht um private Services, die nur in meinem lokalen Netz wie auch per VPN genutzt werden sollen. Daher funktioniert auch Let's Encrypt nicht. Die self-signed Zertifikate von mir gebe ich intern halt frei, das funktioniert auch gut.
Außer die OPNsense als VPN-Router einzusetzen und den Port also sozusagen direkt auf die OPNsense weiterzuleiten fällt mir nichts ein ... bin aber derzeit eigentlich glücklich mit dem anderen VPN-Server ...
-
Ja, das "Problem" ist, dass ich keine öffentliche Erreichbarkeit (weder öffentliche Domain noch öffentliche IP benötige). Es geht um private Services, die nur in meinem lokalen Netz wie auch per VPN genutzt werden sollen. Daher funktioniert LE nicht. Die self-signed Zertifikate von mir gebe ich intern halt frei, das funktioniert.
Dann mit lokalen Namen oder eben deine Dienste umkonfigurieren dass sie mit /AAA und /BBB laufen
-
Ja, das "Problem" ist, dass ich keine öffentliche Erreichbarkeit (weder öffentliche Domain noch öffentliche IP benötige). Es geht um private Services, die nur in meinem lokalen Netz wie auch per VPN genutzt werden sollen. Daher funktioniert LE nicht. Die self-signed Zertifikate von mir gebe ich intern halt frei, das funktioniert.
Dann mit lokalen Namen oder eben deine Dienste umkonfigurieren dass sie mit /AAA und /BBB laufen
Was meinst du konkret mit "lokalen Namen"? DNS Overrides?