Domains an lokale Client Ports weiterleiten

Crys

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.634
Hallo miteinander,

ich möchte verschiedene Intranet Geräte mit meinen (Sub-) Domains verknüpfen.
Zur Technik: Mein Intranet hat eine Fritzbox, ein PiHole (für DNS), mehrere kleine Server, NAS, PCs (Windows, Linux) ... denen eine Domain „zugewiesen“ werden soll.

Die Weiterleitung soll immer nach dem Schema ablaufen:
Code:
extern:
example.com -> DynDNS -> private Router IP -> interne IP -> Port XYZ

intern:
example.com -> interne IP -> Port XYZ

Eine unvollständige Liste an Beispielen:
Code:
cloud.example.com -> Client1-> Client1:80/443/20/21 (direkt)
app.example.com -> intern -> Server1:8080/8090 (docker)
tool.example.com -> intern -> Client1:9999 (docker)
pi.example.com -> intern -> Client2:8080/8090 (direkt)
ssh.example.com -> intern -> Client1:22 (direkt)
ssh2.example.com -> intern -> Client3:22 (direkt)
home.example.com -> intern -> Client4:8080/8090 (direkt)
test.example.com -> intern -> Client4:80/443 (docker)

Aktuell werden alle Ports von der Fritzbox an meine Gräte weitergegeben. Dort kümmert sich dann Apache um eine Weiterleitung (per named virtual host) der (http/s) je Domain. Das ist mittlerweile bei vielen Geräte viel Handarbeit ... und funktioniert nicht immer.

Existiert eine Möglichkeit, dass alle Freigaben an mein Pi(Hole) erfolgen und dort zentral an alle Clients mit korrekten Ports weitergeleitet wird?
Wie sähe ein Beispiel für so eine Lösung aus?

Vielen Dank!
 
Das, was du suchst, heißt Reverse-Proxy.

Ich nutze den NPM dafür.

Port 80/443 von Außen auf diesen zeigen lassen. Dort alle Reverse-Proxys definieren. Letsencrypt Zertifikate ggf. mit abfragen lassen für HTTPS.

Im Pihole reicht ein Eintrag im dnsmasq, dass die Wildcard "*.example.com" auf Gerät mit IP A.B.C.D aufgelöst wird.
 
  • Gefällt mir
Reaktionen: chris221177, Crys und Raijin
Sofern explizit der Port mit von der Partie sein soll, läuft es auf einen Reverse-Proxy hinaus. Ohne diesen, würde prinzipiell ein benutzerdefinierter Eintrag im DNS (=pihole), der auf die lokale IP-Adresse zeigt, ausreichen. Allerdings müsste man dann eben nicht nur home.example.com eingeben, sondern home.example.com:8080
 
  • Gefällt mir
Reaktionen: madmax2010, Crys und spcqike
Danke @spcqike und @Raijin

Der Apache2 vHost hat dem ja auch schon entsprochen!?

NPM sieht ja nett aus. Alles mit GUI(?), aber ok.
Den Docker auf dem Pi installieren, alle Ports (21, 22, 80, 443, ...) vom Router, auf den Pi zeigen lassen und neue Zertifikate von LE holen. Fertig?

Der NPM Reverse-Proxy leitet ja nur die DNS (oder so) weiter, also entsteht keine hohe Last?
Aktuell ist es ein RPi v1 B,
 
Das GUI musst du ja nicht nehmen. Dann brauhst du aber auch den Docker-Container nicht. NginX (der Dienst, der in NPM verwendet wird) ist ja ein bekannter und ausreichend dokumentiert.

Den meisten Leuten fällt es mit dem GUI wahrscheinlich leichter, auch wenn man dort nicht alle Möglichkeiten von NginX ausschöpfen kann. (Das lässt sich dann aber per Kommandozeile im Container lösen)

Du brauchst nicht alle Ports dorthin zeigen lassen, sondern nur 21,22,80,443. Auf welchen Port der ReverseProxy am Ende zeigt, ist unabhängig davon. du kannst also eine Subdomain.Domain.TLD:80 anfragen, der ReverseProxy beantwortet die Anfrage dann mit Client1:8080.

Nein, der Proxy macht nicht nur DNS, er ist ein Mittelsman, der die Seite weiterleitet, cached, ggf. ein HTTPS Zertifikat dazwischen setzt etc. pp. Je nachdem, was deine Dienste im Hintergrund sind und wie viele Anfragen bearbeitet werden sollen, kann der Raspberry zu klein sein. Das kann ich dir so nicht sagen.

Ich greife bspw. auf mein NAS über den Reverseproxy zu. Da musste ich die Dateigröße in der config anpassen, damit ich überhaupt Dateien > 200MB herunter/hochladen kann. Je nach Limit/Größe, macht das auf einem Raspberry V1 ggf. Probleme. (nutze es in einer VM mit 16GB RAM)

Ob und wie die Weiterleitung von SSH klappt, kann ich nicht aus eigener Erfahrung sagen. aber per Stream sollte das gehen.

edit:
ja, der Apache VHost kann auch als Reverse-Proxy genutzt werden.

nachtrag2:
wenn du Port 21/22 von Außen erreichbar machst, musst du natürlich um so besser absichern. Und ggf. den SSH Port des Raspberrys verschieben.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Raijin und Crys
Vielen Dank @spcqike, für die ausführlichen Infos.

Dann probiere ich mal NPM am Wochenende aus:
  • alle nötigen Freigaben des Routers zu meinem NAS
  • die hosts des PiHole zeigt dann auch auf meinen NAS (dieser leitet dann weiter?)
Auf dem NAS läuft aktuell nur Apache2 (kein nginx), das sollte kein Problem sein?
Wenn NPM aus dem Docker läuft ...

Ist nur optional. Hier geht es aktuell nur um sftp, da - seit die Browser ftp nicht mehr unterstützten - alles umgestellt wird.
 
Das wird nur dann ein Problem, wenn du den LISTEN Port vom Apache nicht ändern kannst. Damit das Ganze reibungslos läuft (keine Warnungen wegen Port/Zertifikat) sollte der NginX auf Port 80/443 laufen.

Wenn man das nicht einstellen kann, kann man das für den externen Zugriff ggf. beim Portforward am Router "korrigieren", also dort Port 80 und 443 eben auf Port 8080 und 8443 (angenommene Ports für den NginX Container) weiterleiten. Dann hat man das Problem aber noch vom internen Zugriff aus.

Nein, nicht die Host das Pihole, sondern die dnsmasq.d
Code:
etc/dnsmasq.d/00-wildcard.conf

#address=/domain/IP
address=/*.mydomain.tld/192.168.0.8
 
  • Gefällt mir
Reaktionen: Crys
Zurück
Oben