Revers Proxy (Nginx) für Lokale und öffentliche Domains

raspido

Member
Feb 9, 2023
46
5
8
Hey Leute,

ich bin aktuell dadran mein Netzwerk weiter zu entwickeln bzw. auch mich weiter zu entwickeln. Aktuell habe ich ein Revers Proxy bei mir im Netzwerk laufen, womit ich meine externen Domains, bzw. besser gesagt SubDomains administriere.

Da ich meine Netzwerk Hardware aktuell auch anpasse, bzw. es vorbereite bin ich hier am überlegen, was der beste Weg ist. Bislang hatte ich 1 IP Bereich gehabt (mit einer FritzBox), da aber die IP Adressen durch gesammelte / selber gebauten IoT Geräte langsam knapp werden, möchte ich mein Netzwerk auf UniFi umgestellt. Um da vorab schon mal einiges zu testen habe ich das UniFi Netzwerk "hinter" die FritzBox gehängt und erstmal in einer Art "Labor und Testumgebung" aufgebaut, mit Clients bestückt, ein alter PC hat als "Testserver" fungiert und hier und da hatte ich noch paar Geräte die ich Testweise dort hinzufügen konnte.

Da man sich aber auch weiter entwickelt, immer mehr Dienste im Netzwerk / Netzwerkanwendungen genutzt, habe ich angefangen über mein PiHole und die dortigen Localen DNS Auflösungsmöglichkeiten mir eine Domain aufzubauen. Da aber nicht alles auf Port 80 bzw. 81 läuft, habe ich noch ein Nginx ergänzt. Und dadrüber dann die "Namensauflösung mit Ports" etwas "verfeinert". Sprich Proxmox rufe ich einfach über "server.home" auf und werde automatisch auf Port 8006 weitergeleitet.

Nun ergibt sich die Überlegung, sollte ich bezüglich Netzwerksicherheit und so, 2 Nginx Server laufen lassen. Also einer nur für die Lokalen Domains und einer für die öffentlichen oder wäre das ggf. für ein Heimnetzwerk etwas "zuviel des Guten" oder sogar "überflüssig"?

Von der Hardware wäre es nicht das Problem, ein LXC bzw. Dockercontainer mehr oder weniger fällt ja nicht gleich ins Gewicht ;)
 
Ein Proxy sollte normalerweise reichen. Wenn Du Split-DNS verwendest anstelle von NAT-Reflection, setzt Du für die interne Domain overrides für die gewünschten Adressen, welche wiederum auf den Proxy verweisen. Also bspw.: host.meine.localdomain -> ip-des-proxys

Wenn Du eine echte TLD hast, könntest Du auch eine Subdomain davon als lokale Domain verwenden und mittels der API vom NPM dafür gültige Wildcard Zertifikate holen und zuweisen. NPM unterstützt dies für zahlreiche Hoster.

Sowas wie *.intranet.meinetld.de
 
Entschuldigung, das ich mich hier mal mit Einklinke ;):

Auch ich möchte mich weiterentwickeln und haben derzeit eine OpnSense und möchte hier einen HA Proxy oder ggf. eine NGINX Server laufen lassen, um hier die Server auf dem Promox zu erreichen. LetsEncrypt Zerifikate sind kein Problem. Auch die Umleitung von:

subdomain1.TLD.de
subdomain2.TLD.de

würde ich über den HAProxy oder NGNIX hinbekommen. Ich möchte aber gern "noch mehr" Sicherheit und Authelia (im Docker) für den VORGESCHALTETE Reverse Proxy nutzen. Hat hier jemand Erfahrungen in dieser Konfiguration???

derzeit
DSL -> OpnSense -> HAProxy -> Proxmox (mit den Servern, Unifi, Jellyfin, usw.)

bzw. nutze ich derzeit die Umleitung über einen Cloudflare Tunnel, welche auch 2FA anbietet, um per Cloudflare Tunnel (im LXC) auf die Server zuzugreifen. Ich denke aber, dass das mit Jellyfin nicht klappt, weil der kostenlose Cloudflare Tunnel dafür nicht ausgelegt ist.

subdomain.TLD.de -> Cloudflare -> Promox

ZIEL
subdomain.TDL.de -> DSL -> OpnSense -> HAProxy -> Authelia (Docker) mit 2FA -> zurück zum HAProxy -> weiter zum Jellyfin LXC auf Proxmox


Ich bin hier leider nicht so fit und hoffe, dass hier jemand dabei ist, der eine ähnliche Konfiguration am Laufen hat. ;)


Danke für eure Hilfe.
 
@cwt Gerade bin ich bei dir ein wenig "überfordert". Also ich habe das ein oder andere schon gemacht, was Netzwerk und der gleichen angeht, nur wo du jetzt mit "Split-DNS" und "NAT-Reflection" bin ich gerade ein wenig "überfordert".

Aber zum Thema "öffentliche" Domains und interne zu mischen, bin ich grundsätzlich nicht der größte Freund von. Das hat den Hintergrund, ich nutze nicht alles alleine. Meine Frau nutzt auch einiges als "User" zumindest. Und so ist es am einfachsten zu erklären, was man davon "zuhause im WLAN" und was man unterwegs nutzen kann übers normale LTE Netz.

Ich habe nicht alle Dienste und Anwendungen für die "Welt da draußen" frei gestellt.

Ich habe gerade nur ein kleines Problem, wenn ich versuche für den Proxmox Server eine Lokale Domain zu nutzen und entsprechend auf den Port 8006 weiter leite, gibt es nur eine kleine Fehlermeldung und mit einloggen und nutzen von Proxmox wird es nichts. Es wäre zwar am Ende nicht ganz so tragisch, wenn alles außer Proxmox über den Rev. Proxy läuft, aber schöner wäre natürlich alles. :)
 
Also möchtest Du den PVE intern über einen DNS-Namen ansprechen? Dann müsste es reichen, im PiHole den entsprechenden Eintrag zu hinterlegen (bspw. proxmox.meineinterne.domain -> verweist auf die ip des Proxy). Im Proxy dann wiederum den passenden Eintrag mit scheme https auf die IP des PVE mit Port 8006.
 
Habe ich so eingerichtet. Also im PiHole in den DNS Einträgen server.home mit Verweis auf den Rev. Proxy und im Nginx habe ich dann die Domain mit der IP Adresse vom Proxmox Server und dem Port 8006 verknüpft. Scheme auf https gestellt und wenn ich das aufrufe, mich einloggen möchte kommt nur folgende Fehlermeldung:

1698482000940.png

Klicke ich auf "OK" bin ich zwar so gut wie drin, nur außer "Rechenzentrum" steht links nichts. Also auch nicht mein Server.

Rufe ich alles hingegen normal über die IP Adresse und Port funktioniert alles tadellos.
 
@cwt Ich habe nochmal etwas durchgestöbert und so. Und bisschen gegoogelt zu der ganzen "Thematik", ich könnte das ja auch theoretisch über die "Access Lists" im Nginx Proxy Manager lösen? Also das "Lokaledomains" nur "lokal" erreichbar sind oder bin ich da auf dem Holzweg?

Also entweder erlaube ich alle IP Bereiche einzelln, also z.B. 192.168.100.0/24, 192.168.10.0/24, 192.168.20.0/24 oder wenn ich den "gesamten" Privatenbereich aller meiner VLANs nehmen möchte, könnte ich ja auch 192.168.0.0/16 nehmen?
 
Habe ich so eingerichtet. Also im PiHole in den DNS Einträgen server.home mit Verweis auf den Rev. Proxy und im Nginx habe ich dann die Domain mit der IP Adresse vom Proxmox Server und dem Port 8006 verknüpft. Scheme auf https gestellt und wenn ich das aufrufe, mich einloggen möchte kommt nur folgende Fehlermeldung:

View attachment 57202

Klicke ich auf "OK" bin ich zwar so gut wie drin, nur außer "Rechenzentrum" steht links nichts. Also auch nicht mein Server.

Rufe ich alles hingegen normal über die IP Adresse und Port funktioniert alles tadellos.


Du musst für den PVE im Proxy noch folgendes eintragen:

location / { proxy_pass https://DIE-IP-DES-PROXMOX:8006$request_uri; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }

Beim NPM ist das unter „Advanced“ zu finden.
 
Last edited:
@cwt Ich habe nochmal etwas durchgestöbert und so. Und bisschen gegoogelt zu der ganzen "Thematik", ich könnte das ja auch theoretisch über die "Access Lists" im Nginx Proxy Manager lösen? Also das "Lokaledomains" nur "lokal" erreichbar sind oder bin ich da auf dem Holzweg?

Also entweder erlaube ich alle IP Bereiche einzelln, also z.B. 192.168.100.0/24, 192.168.10.0/24, 192.168.20.0/24 oder wenn ich den "gesamten" Privatenbereich aller meiner VLANs nehmen möchte, könnte ich ja auch 192.168.0.0/16 nehmen?
Kannst Du, muss aber nicht. Lokale Domains können von außerhalb nicht erreicht werden, da keine Auflösung im DNS möglich ist.
 
@cwt Ich habe den Nginx Proxy Manager.

Bei mir sieht es aktuell wie folgt aus in den Einstellungen für den Proxmox:

1698486287900.png
1698486308430.png
1698486325210.png
1698486355704.png

Und bei Advanced in das Textfeld einfach das eintragen, was oben genannt hast? Versuche ich gleich mal.

Habe das hier eingetragen:

"location / { proxy_pass https://192.168.100.3:8006$request_uri; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }"

Nur verändert hatte dies so nichts. Also "Fehlermeldung" kommt noch immer.
 
Last edited:
  • Like
Reactions: cwt
Nochmal kurz zur Erläuterung von Split-DNS und NAT-Reflection… nur grob angerissen.

Das Prinzip des DNS ist Dir ja soweit klar. Fragt ein Client nach domain.de den PiHole, löst dieser das für ihn auf. Bei einer lokalen Domain bleibt der Aufruf soz. im LAN. Ist das aber eine „externe“ Domain, gehts nach „draußen“ durch den Router.

Hast Du jetzt einen Dienst auf einer „echten“ Domain (CNAME oder A-Record, der auf die IP Deines Routers verweist - bspw. cloud.deinedomain.de), löst der PiHole dies nach außen auf, obwohl der Dienst im LAN liegt. Sagen wir mal, Du hast eine Nextcloud VM unter der Adresse. Dann würde der Client quasi von „innen nach außen und wieder zurück“ geleitet. Setzt Du diesen DNS-Eintrag aber auf dem PiHole mit Verweis auf den Proxy, geht der Client den direkten Weg und wird nur durch die Bandbreite des LANs gebremst. Dies wäre dann Split-DNS. Die echte Domain ist von außen über Deinen Router <> Proxy erreichbar, von innen dann Client <> Proxy. NAT-Reflection arbeitet anders, stellt aber (ganz grob) den selben Weg bereit.
 
  • Like
Reactions: raspido
@cwt Okay Danke für die Erklärung. Aktuell bin ich an meinem "Testsystem" also da gibt es nur die Lokalen Domains und die öffentlichen Domains. In meinem "aktiven" Netzwerk hab ich ein Server mit Nextcloud im LXC laufen und ja bislang läuft das ganze über den intern nach extern nach intern Weg. Machte bislang keine großen Probleme, da ich nicht die "riesen" Datenberge in die Cloud schaufel. Aber werde ich mir auf jedem fall mal näher angucken ob ich das spätestens dann umbaue, wenn ich mein "Testnetzwerk" zu meinem "aktiven Netzwerk" umbaue und die FritzBox in "Rente" schicke. Dann wird vermutlich auch der Testserver und so verschwinden. Aber das weiß ich noch nicht ganz genau.
 
Sorry, hatte mich bei "Advanced" vertan.

Das wäre der korrekte "Code":

location / {
proxy_pass https://ip-des-proxmox:8006
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}

Aktiviere noch die Option "Websockets Support" auf der ersten Seite.
 
@cwt Okay Danke für die Erklärung. Aktuell bin ich an meinem "Testsystem" also da gibt es nur die Lokalen Domains und die öffentlichen Domains. In meinem "aktiven" Netzwerk hab ich ein Server mit Nextcloud im LXC laufen und ja bislang läuft das ganze über den intern nach extern nach intern Weg. Machte bislang keine großen Probleme, da ich nicht die "riesen" Datenberge in die Cloud schaufel. Aber werde ich mir auf jedem fall mal näher angucken ob ich das spätestens dann umbaue, wenn ich mein "Testnetzwerk" zu meinem "aktiven Netzwerk" umbaue und die FritzBox in "Rente" schicke. Dann wird vermutlich auch der Testserver und so verschwinden. Aber das weiß ich noch nicht ganz genau.
Du könntest Dir Gedanken um eine Firewall wie OPNSense/pfSense als VM machen. Die Fritte nur noch als stumpfes Gateway und die Firewall-VM dahinter als "Exposed Host". Dann hättest Du auch ein wesentlich besseres und granulares Management für Deine VLANs zur Verfügung, was die Fritte ohnehin nicht unterstützt. Und halt nebenbei noch zig andere Features wie Unbound DNS, der gegen die Roots auflösen kann und dem PiHole als forwarder zur Verfügung steht (und Split-DNS via Overrides bietet), DHCP, NTP, VPN, etc. pp.
 
Habe ich gemacht, Ergebnis ist ein Roter Streifen oben ohne Text und speichern lässt sich nichts.

1698488039544.png
 
Kann beim NPM mal vorkommen, ggf. den Host löschen und nochmal neu hinzufügen. Im Zweifeslfall den Container einmal neustarten.
 
Du könntest Dir Gedanken um eine Firewall wie OPNSense/pfSense als VM machen. Die Fritte nur noch als stumpfes Gateway und die Firewall-VM dahinter als "Exposed Host". Dann hättest Du auch ein wesentlich besseres und granulares Management für Deine VLANs zur Verfügung, was die Fritte ohnehin nicht unterstützt. Und halt nebenbei noch zig andere Features wie Unbound DNS, der gegen die Roots auflösen kann und dem PiHole als forwarder zur Verfügung steht (und Split-DNS via Overrides bietet), DHCP, NTP, VPN, etc. pp.
Ja da werde ich mich aber vermutlich nochmal etwas mehr einarbeiten & einlesen dürfen. Nur die FritzBox ist schon auf den Weg in die Rente. Das Modem liegt schon hier. Dect habe ich über eine GigaGo Box gelöst, da ich mit der FritzBox da auch immer wieder Theater hatte, dass ein Telefon ständig abgemeldet wurde und so.

Also die Fritz fliegt nicht in Müll, die wird an die Seite gelegt, wenn mal Modem oder Unifi Dreamrouter aussteigen / kaputt gehen. Vor allem für eine 7490 wird man vermutlich eh nicht mehr viel bekommen.

Bislang hatte ich mit OpnSense und Co noch nichts am Hut gehabt. Da fehlte zum teil auch etwas die Zeit. Leider hat der Tag nur 24 Stunden und sowas "überflüssiges" wir Arbeiten und Schlafen muss man ja auch nochmal und die Famlie und der Hund möchte auch Zeit mit mir verbringen. Werde es aber auf jedem Fall mal im Auge behalten.
 
Kann beim NPM mal vorkommen, ggf. den Host löschen und nochmal neu hinzufügen. Im Zweifeslfall den Container einmal neustarten.
Habe Problem gefunden, lag an mir. Ist das Problem wenn man zwischen verschiedenen Aufgaben hin und her springt. Und man zwischendurch das Netzwerk wechselt, dann kommt man manchmal nicht mehr an Server dran und so.

Habe jetzt die Eintragungen vorgenommen, nur steht nun bei Status nicht mehr "Online" sondern "Offline". Also nachdem ich den "Schieber" umgeschoben hatte und die Konfig eingetragen hatte.

Also kein Erfolg irgendwie. Also wenn ich dann auf die Lokale Domain Klicke kommt Willkommensmeldung vom Nginx Manager und das wars. Sieht schick aus aber naja ;-)
 
Last edited:
Ist da irgendwas an Firewalls zwischen bzw. aktiv? Habe das eben nochmal nachgestellt, funktioniert ohne Probleme.
 
Ne ich hab zwar ein paar ACLs am laufen, aber die sind nur zur Trennung vom IoT VLAN vom Rest, sonst existieren keine Firewallregeln.

Der Nginx Manager (im Docker), der PiHole und der Proxmox befinden sich aber auch alle im gleichen VLAN.

Ich habe die Befehle nochmal überprüft, die genannt hast und ein ; ergänzt, wo ich dachte es fehlt. Nun steht "Online" dran aber folgendes kommt nur:

1698493020246.png

Und das ; was ich ergänzt hatte war hinterm Port, da sonst hinter jeder Zeile das ; stand. Hier nochmal die Befehle:

location / { proxy_pass https://192.168.100.3:8006; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; }
 
Last edited:

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!