OPNsense Forum

International Forums => German - Deutsch => Topic started by: jimjohn on April 13, 2021, 04:18:40 pm

Title: HAproxy für 2 Backend Services
Post 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!
_______________

Code: [Select]

# 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

Title: Re: HAproxy für 2 Backend Services
Post by: CoolTux on April 14, 2021, 06:24:07 am
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"?
Title: Re: HAproxy für 2 Backend Services
Post by: lfirewall1243 on April 14, 2021, 08:46:25 am
Wenn du einen der Backend Pools testweise als default im Frontend hinterlegst, kommst du dann zumindest auf den schonmal drauf?
Title: Re: HAproxy für 2 Backend Services
Post by: JeGr on April 14, 2021, 10:04:00 am
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?
Title: Re: HAproxy für 2 Backend Services
Post by: jimjohn on April 14, 2021, 11:01:14 am
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.
Title: Re: HAproxy für 2 Backend Services
Post by: lfirewall1243 on April 14, 2021, 11:01:47 am
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
Title: Re: HAproxy für 2 Backend Services
Post by: jimjohn on April 14, 2021, 11:03:16 am
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.
Title: Re: HAproxy für 2 Backend Services
Post by: jimjohn on April 14, 2021, 11:04:11 am
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.  :)
Title: Re: HAproxy für 2 Backend Services
Post by: jimjohn on April 14, 2021, 11:05:02 am
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.  :-\
Title: Re: HAproxy für 2 Backend Services
Post by: lfirewall1243 on April 14, 2021, 11:06:14 am
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
Title: Re: HAproxy für 2 Backend Services
Post by: jimjohn on April 14, 2021, 11:17:21 am
Anbei die Screenshots.  :) :) :)
Title: Re: HAproxy für 2 Backend Services
Post by: lfirewall1243 on April 14, 2021, 11:20:16 am
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

Title: Re: HAproxy für 2 Backend Services
Post by: jimjohn on April 14, 2021, 11:52:00 am
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?
Title: Re: HAproxy für 2 Backend Services
Post by: jimjohn on April 14, 2021, 11:59:21 am
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
Title: Re: HAproxy für 2 Backend Services
Post by: lfirewall1243 on April 14, 2021, 12:00:03 pm
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
Title: Re: HAproxy für 2 Backend Services
Post by: jimjohn on April 14, 2021, 12:04:12 pm
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 ...
Title: Re: HAproxy für 2 Backend Services
Post by: jimjohn on April 14, 2021, 12:07:50 pm
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.
Title: Re: HAproxy für 2 Backend Services
Post by: JeGr on April 14, 2021, 02:34:02 pm
> 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 :)
Title: Re: HAproxy für 2 Backend Services
Post by: jimjohn on April 14, 2021, 04:04:01 pm
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!  :)
Title: Re: HAproxy für 2 Backend Services
Post by: lfirewall1243 on April 14, 2021, 04:07:20 pm
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
Title: Re: HAproxy für 2 Backend Services
Post by: jimjohn on April 14, 2021, 04:12:45 pm
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 ...
Title: Re: HAproxy für 2 Backend Services
Post by: lfirewall1243 on April 14, 2021, 04:14:57 pm
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
Title: Re: HAproxy für 2 Backend Services
Post by: jimjohn on April 15, 2021, 04:38:33 pm
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?