HAProxy und zwei (Sub)-Domains

Started by cklahn, January 01, 2025, 01:12:35 PM

Previous topic - Next topic
Hi Forum,
ich baue gerade meine SOPHOS UTM zurück und übertrage alle Dienste auf die OPNsense. Ich habe im Büro und zu Hause eine feste Public-IP. Sowohl im Büro als auch zu Hause werkelt dann eine OPNsense. Ich habe im Büro einen internen Exchange-Server laufen, der per HAProxy von aussen ansprechbar ist. Das läuft auch mit den Zertifikaten alles super. Standortverknüpfung Büro und Zuhause läuft auch schon per IPsec und ich kann von zu Hause auf das interne Netz im Büro zugreifen.

Nun war es bisher so, daß ich zu Hause auf dem Server zwei Nextcloud-Server laufen habe. Einen für's Büro und einen für privat. Beide NC-Server werden über Sub-Domains mit unterschiedlicher TLD aufgerufen. Also sinngemäß: cloud.domain.de und cloud.domain.net. Bei beiden Sub-Domains ist beim Hoster der A-Record auf meine feste Public-IP von zu Hause eingestellt.

Bei der alten SOPHOS-Firewall konnte ich in deren Web-Proxy die Domains sauber unterscheiden und den jeweiligen beiden Servern zuweisen.

Nun habe ich nach der Anleitung von TheHellSite den HAProxy aufgesetzt und lasse per ACME für cloud.domain.de und für cloud.domain.net die Zertifikate ausstellen. Funktioniert auch.

Ich habe nun einmal für cloud.domain.de alle Einstellungen in HAProxy gemacht und kann von ausserhalb und von innen prima auf die private Nextcloud zugreifen.

Nun möchte ich aber auch auf die zweite Nextxloud zugreifen wollen. Ich habe dazu im HAProxy einen zweiten Server angelegt, im HTTPS-Fronted des Public Service das zweite Zertifikat hinzugefügt und im Nextcloud-Backend-Pool den zweiten Server hinzugefügt.

Ich kann nun immer nur noch auf die private, zuerst eingerichtete Nextcloud zugreifen. Bei der dienstlichen Nextcloud gibt's eine Fehlermeldung.

Das Map-File liest ja eigentlich nur die Subdomäne "cloud" aus und übergibt dann an den Backend-Pool. Und hier scheint das Problem zu liegen. Der HAProxy kann nicht entscheiden, an welchen Server die Anfrage gestellt wird, da lediglich "cloud" abgefragt wird und nicht "cloud.domain.de" und "cloud.domain.net".

Vielleicht ist die Lösung einfach, aber ich komme nicht drauf :-).

Habt Ihr eine Idee?

Ich hab die Details nicht parat, bin mir aber ganz sicher, dass du ein einziges Frontend verwenden musst bei einer einzigen öffentlichen IP-Adresse. Und SNI.

Schau mal in der Richtung.

HTH,
Patrick
Deciso DEC750
People who think they know everything are a great annoyance to those of us who do. (Isaac Asimov)

Das hat leider nicht gereicht. In der Nextcloud-App der betrieblichen Nextcloud kommt die Fehlermeldung "Server hat 400 Bad Request auf GET..." gemeldet. D.h. eine Anfrage scheint da anzukommen. Scheibar aber die von der betrieblichen Nextcloud.

Quote from: cklahn on January 01, 2025, 01:12:35 PMDas Map-File liest ja eigentlich nur die Subdomäne "cloud" aus und übergibt dann an den Backend-Pool. Und hier scheint das Problem zu liegen.
Obwohl du die vollen Domainnamen verwendest?
Das kenne ich so nicht.

Aber ohnehin würde ich nur ein Map File für Backends mit vielen Domains verwenden. Wenn, so wie du schreibst, je Host nur eine Domain weitergeleitet werden soll, würde ich eine Condition mit "Host = Domain" für jede anlegen. Dann jeweils eine Regel, die diese Condition verwendet.

Und ja, wenn du nur eine WAN IP hast, kannst du auch nur ein Frontend dafür anlegen. In diesem sind dann beide Zertifikate und beide Regeln auszuwählen. Dann sollte das auch klappen.

So, nun klappts. Ich habe je Server einen Backend-Pool angelegt und im Mapfile nicht nur die Zeile "cloud Nextcloud_Backend" angelegt, sondern zwei Zeilen. Einmal "cloud.domain.de Nextcloud_Backend.de" und "cloud.domain.net Nextcloud_Backend.net".

Frontend nur eins und darin dann beide Zertifikate hinterlegt.

Danke für den Tipp ;-).