OPNsense Forum

International Forums => German - Deutsch => Topic started by: Emma2 on January 21, 2020, 10:34:07 am

Title: [HAProxy] Umleitung auf internen Host per Name
Post by: Emma2 on January 21, 2020, 10:34:07 am
Ich stelle mal die Frage neu, weil ich die im ersten Thread angefragte Version (Unterverzeichnis) mittlerweile aufgegeben habe...

Ich habe zwei virtuelle Hosts auf dem selben physischen Server/IP 192.168.0.111:
  - server-a
  - server-b

Von draußen komme ich mit unterschiedlichen URLs
  - extern-01.mydomain.de
  - extern-02.mydomain.de
Ich möchte nun extern-01 auf server-a und extern-02 auf server-b weiterleiten.

Es funktioniert NICHT, dass ich als "reale Server" die internen Namen server-a und server-b eintrage, denn die opnSense kann natürlich nicht auf mein internes DNS zugriefn (oder könnte sie)? Wenn ich diese Namen eintrage, dann erhalte ich einen Timeout. Wenn ich jedoch die IP eintrage, dann lande ich nicht auf einem der beiden virtuellen Hosts, sondern auf dem Default-Host des Servers.

Ich muss also anscheinend keine Regel à la "Nutze Pool" haben, sondern eine "Weiterleitung".
So, wie ich es bisher verstanden habe, ist das aber auch kein redirect (Doku: "which tell the client to send the request to another URL", wäre also extern), sondern ein rewrite (Doku: "change the request as it moves between the client and the backends transparently", also unsichtbar für den Client)

Ein rewrite wird aber wohl nicht durch die GUI unterstützt. Kann das sein?
Wie kriege ich das dann hin? "Custom rule (option pass-through)"? Steht im anderen Thread...

Aber was sind die Parameter? So richtig steige ich da nicht durch...
wäre echt super, wenn jemand, gern am obigen Beispiel, mit der Formulierung hilft.
Title: Re: [HAProxy] Umleitung auf internen Host per Name
Post by: mimugmail on January 21, 2020, 12:33:10 pm
Geht ein override im dns nicht mit server-a und -b? Notfalls kannst du die internen Webs auch auf unterschiedlichen Ports laufen lassen, dann spielt der hostheader keine Rolle
Title: Re: [HAProxy] Umleitung auf internen Host per Name
Post by: Emma2 on January 21, 2020, 01:04:13 pm
Hi, und danke für Deine Antwort.
Ich bin leider nicht so sehr der opnSense-Experte und deshalb auch auf die GUI angewiesen.

Was meinst Du denn mit "override im dns"? In meinem internen DNS habe ich natürlich die beiden server-a und server-b stehen, beide mit der IP 192.168.0.111. Mein Problem scheint, dass (a) die opnSense meine internen Namen nicht auflöst (kann ich sie dazu zwingen?) und (b) dann vermutlich immer noch nicht der interne Name verwendet wird (zumindest dann nicht, wenn ich nur eine "Nutze-Pool"-Regel habe). Oder seht Ihr das anders?

Die Verwendung unterschiedlicher Ports habe ich auch schon in Erwägung gezogen, aber da der Apache ja die komfortabel-einfache Möglichkeit der "virtuellen Hosts" bietet, wäre das meine bevorzugte Lösung. ("Virtuelle Hosts": wenn eine Anfrage auf dem Server landet, guckt dieser in den HTTP-Header und leitet auf die entsprechend benannte Site um.)

Dass ein URL-rewrite das Richtige ist, da bin ich recht zuversichtlich, ich steige eben "nur" nicht durch die entsprechende Syntax durch...  :(
Title: Re: [HAProxy] Umleitung auf internen Host per Name
Post by: Domi741 on January 22, 2020, 12:03:25 pm
Was nutzt du denn als internen DNS? Den Unbound von opnsense oder hast du im Lan einen anderen DNS aktiv?




Gesendet von iPhone mit Tapatalk Pro
Title: Re: [HAProxy] Umleitung auf internen Host per Name
Post by: mimugmail on January 22, 2020, 03:33:07 pm
Hi, und danke für Deine Antwort.
Ich bin leider nicht so sehr der opnSense-Experte und deshalb auch auf die GUI angewiesen.

Was meinst Du denn mit "override im dns"? In meinem internen DNS habe ich natürlich die beiden server-a und server-b stehen, beide mit der IP 192.168.0.111. Mein Problem scheint, dass (a) die opnSense meine internen Namen nicht auflöst (kann ich sie dazu zwingen?) und (b) dann vermutlich immer noch nicht der interne Name verwendet wird (zumindest dann nicht, wenn ich nur eine "Nutze-Pool"-Regel habe). Oder seht Ihr das anders?

Die Verwendung unterschiedlicher Ports habe ich auch schon in Erwägung gezogen, aber da der Apache ja die komfortabel-einfache Möglichkeit der "virtuellen Hosts" bietet, wäre das meine bevorzugte Lösung. ("Virtuelle Hosts": wenn eine Anfrage auf dem Server landet, guckt dieser in den HTTP-Header und leitet auf die entsprechend benannte Site um.)

Dass ein URL-rewrite das Richtige ist, da bin ich recht zuversichtlich, ich steige eben "nur" nicht durch die entsprechende Syntax durch...  :(

Dann probier mal in System : Settings : General die internen DNS Server und unten den Haken anklicken dass DNS Abfragen nicht über den lokalen DNS laufen sollen. Dann müsste das klappen.
Title: Re: [HAProxy] Umleitung auf internen Host per Name
Post by: Emma2 on January 23, 2020, 10:24:10 am
Danke Euch beiden für den Vorschlag, aber ich befürchte, das wird mir nicht helfen:
Obwohl nun die opnSense meinen internen DNS nutzt, um interne Adressen aufzulösen, lande ich damit noch nicht auf dem richtigen virtuellen Host des Apache.

Ich kann zwar jetzt den realen Server per internem Namen finden, danke dafür, aber dieser wird HTML-weise natürlich nach wie vor mit dem externen Namen angesprochen, also mit extern-01.mydomain.de, nicht etwa mit dem internen Namen server-a. Also erhalte ich immer noch nur die Default-Site des Apache und nicht den gewünschten virtuellen Host.

Ich nehme also nach wie vor an, dass der Request "umgeschrieben" werden muss. Ich suche also nach wie vor nach Hilfe für die rewrite-Regel.
Title: Re: [HAProxy] Umleitung auf internen Host per Name
Post by: fabian on January 23, 2020, 10:37:44 am
Warum lässt du den Webserver nicht mit dem externen FQDN laufen? Httpd hab ich schon länger nicht mehr verwendet aber im nginx kannst du unter der Direktive server_name auch mehrere angeben.
Title: Re: [HAProxy] Umleitung auf internen Host per Name
Post by: Emma2 on January 23, 2020, 10:47:14 am
Warum lässt du den Webserver nicht mit dem externen FQDN laufen?
Intern haben alle meine Server eben interne Namen.
Httpd hab ich schon länger nicht mehr verwendet aber im nginx kannst du unter der Direktive server_name auch mehrere angeben.
Müsste ich mal prüfen, ob der Apache auch mehrere Namen für einen virtuellen Host haben kann.

Aber dennoch - ich weiß, ich bin störrisch ;-) - kann denn niemand hier etwas zur Syntax der rewrite-Regel sagen? Für die Cracks hier kann das doch kein Hexenwerk sein, oder? Persönlich fände ich das den saubersten Weg: Die Anfrage kommt rein und wird vom HAProxy "transparent" auf einen internen Server umgeleitet.
Title: Re: [HAProxy] Umleitung auf internen Host per Name
Post by: fabian on January 23, 2020, 11:12:35 am


Aber dennoch - ich weiß, ich bin störrisch ;-) - kann denn niemand hier etwas zur Syntax der rewrite-Regel sagen? Für die Cracks hier kann das doch kein Hexenwerk sein, oder? Persönlich fände ich das den saubersten Weg: Die Anfrage kommt rein und wird vom HAProxy "transparent" auf einen internen Server umgeleitet.

Bin halt auch kein Experte dafür. Ich hab das nginx plugin gebaut und das Feature dort nicht implementiert aber dort wäre der Änderungssatz so an die 20 Zeilen also innerhalb von ner halben Stunde zu machen. Dort wird derzeit der Host Header weitergeleitet und würde sich ähnlich verhalten. Der könnte dort aber leicht überschrieben werden.
Title: Re: [HAProxy] Umleitung auf internen Host per Name
Post by: johnsmi on January 25, 2020, 05:32:57 pm
Ich suche also nach wie vor nach Hilfe für die rewrite-Regel.
nichts mit rewrite, aber dafür eine Handvoll Bedingungen und Regeln:


[Real Server] -> Real Server
Name: server-ab
FQDN or IP: 192.168.0.111

[Virtual Services] -> Backend Pools
Name: pool-ab
Servers: server-ab



[Rules & Checks] -> Conditions
=> Bedingungen anlegen:

Name: server-a
Condition: Host matches
Host String: extern-01.mydomain.de

Name: server-b
Condition: Host matches
Host String: extern-02.mydomain.de



[Rules & Checks] -> Rules
=> Regel anlegen:

Name: rule-ab
Test type: IF
Select conditions: server-a,server-b
Logical operator for: OR
Execute function: Use specifies Backend Pool
Use backend pool: pool-ab



[Virtual Services] -> Public Services
Name: von-Extern
Select Rules: rule-ab

ggf:
... mit LetsEncrypt auf der opnsense:
Select Rules: rule-ab,redirect_acme_challenges
...Wenn die internen Hosts (z.B. nextcloud + office) selbst LE verwenden, dann muss ggf. die "redirect_acme_challenges"-Rule geändert werden.