Individuelle "Hostnames" für mehrere Dienste auf einem Homeserver

Weynford

Cadet 2nd Year
Dabei seit
Feb. 2015
Beiträge
29
Hallo!

Ich habe zuhause einen Rechner gesondert als Server für verschiedene Dienste abgestellt. Um darauf zuzugreifen, nutze ich verschiedene Ports / Sockets auf der Maschine. Beispielhaft:
  • server.fritz.box:8010/ -- Home Automation
  • server.fritz.box:8020/ -- Medien
  • server.fritz.box:8030/ -- Game Server
(server:8010/, server:8020/, usw., funktioniert allerdings auch, ich wollte nur darauf hinweisen, dass eine FritzBox 7580 zum routen eingesetzt wird.)

Das ist wenig intuitiv und umständlich, weil sich aus dem Port nicht schließen lässt, welcher Dienst dahinter läuft und man sich merken muss, welcher Port zu welchem Dienst gehört. Daher suche ich nach einer Möglichkeit, jeden Dienst über einen individuellen, aussagekräftigen Namen anzusprechen. Beispiele:
  • automation/ oder automation.fritz.box/ für server.fritz.box:8010/
  • medien/ oder medien.fritz.box/ für server.fritz.box:8020/
  • game/ oder game.fritz.box/ für server.fritz.box:8030/
Ist das realisierbar? Ein Hostname bezieht sich ja lediglich auf die IP-Addresse. Wie sorgt man also dafür, dass ein Name in eine Socket-Addresse / IP-Port-Kombination aufgelöst werden kann?

Alternativ wäre ich auch super happy, wenn sich die Ports auf eine "Subdomain" des Hostnames des Servers mappen ließen. Etwa so:
  • automation.server/
  • medien.server/
  • game.server/
Wobei auch hier seitens der FritzBox praktisch nur ein Name in eine (immer die gleiche) IP-Addresse übersetzt und der Port ignoriert würde.

Ich hoffe, jemand unter euch kennt da eine praktische Lösung. :)
 

wirelessy

Commander
Dabei seit
Nov. 2008
Beiträge
3.040
Den Hostnamen-Part kannst du einfach per DNS lösen. Für Port-Teil brauchst du PAT, oder nen Reverse-Proxy z.B..
Auf jeden Fall eine aktive Netzwerkkomponente, welche den Traffic für dich handhabt.
 

Jesterfox

Fleet Admiral
Dabei seit
März 2009
Beiträge
38.758
Theoretisch kann ein Rechner ja mehrere IP Adressen haben. Die Frage ist ob man in der Praxis seine Dienste auf die verschiedenen IPs konfigurieren kann... (gute Software sollte das können) Dann kann man die Dienste auch auf den Defaultports laufen lassen und die Angabe weglassen.
 

Nilson

Fleet Admiral
Dabei seit
Dez. 2008
Beiträge
17.535
Sofern der Port nicht durch das Protokoll impliziert wird (z.B. :443 bei https, :22 bei SSH etc.) musst du eh den Port angeben, weil der Browser sonst ein :80 dahinter hängt (oder der SSH client die :22).
Du brauchst als ein Service, der auf :80 lauscht und dann den Port entsprächen ändert.
Unter Linux könntest du der Netzwerkkarte mehrere IPs geben (pro Dienst eine), die Namensauflösung dann pro IP anlegen und das anpassen der Ports sollte über iptables gehen. Praktisch hab ich das aber noch nicht gemacht.
 

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
12.446
Stichwort wurde bereits genannt: Reverse Proxy und die Portgeschichten ab da an vergessen.
 

Masamune2

Vice Admiral
Dabei seit
Okt. 2009
Beiträge
6.216
Dafür brauchst du einen Reverse Proxy und einen anderen DNS Server. Der nimmt dann eine Anfrage auf z.B. https://automation.fritz.box entgegen und leitet es an https://server.fritz.box:8010 weiter.
Da sich der DNS Server der Fritzbox nicht konfigurieren lässt musst du hier einen anderen nutzen und damit die einzelnen Hostnamen (automation, medien, game,...) auf die IP des Reverse Proxy zeigen zu lassen.
Vielleicht eine gute Gelegenheit dabei einen PiHole als DNS zu verwenden, dann hast du auch gleich weniger Werbung und Tracking beim Surfen.
 

Weynford

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Feb. 2015
Beiträge
29
Ah, Reverse Proxy ist also das Zauberwort. Dann werde ich mich damit die Tage mal auseinander setzen.

PiHole habe ich tatsächlich bereits auf dem Server in einem Docker Container laufen, nutze es aber derzeit nur testweise und manuall an einem einzigen Rechner im Haushalt, nicht im ganzen Netzwerk. Es böte sich dann an, das gleich mit einzubinden.

Danke für eure Antworten!
 

RalphS

Lieutenant
Dabei seit
Feb. 2015
Beiträge
621
Das geht unter Windows auch mit dem IIS.

Der (einer der) Netzwerkkarte(n) weitere statische IPs zuweisen (aufpassen, daß da nichts kollidiert, also immer noch außerhalb des DHCP-Pools und nur exakt einmal vergeben) und dann über die Bindungen festlegen, welcher Service auf welchem Socket hört (Socket = Ipadresse : port).

Fritzbox ist natürlich absoluter Gammel, aber vielleicht hast Du ja irgendeine Maschine da, die 24/7 läuft und wo man einen DNS-Server raufklatschen kann. Mehr oder weniger überall funktioniert ISC BIND. Der muß dann allerdings der Fritzbox bekanntgegeben werden, damit die ihn im Heimnetz verteilt, UND er muß ordentlich konfiguriert sein, ie. muß einen forwarder auf die Fritzbox bekommen.

Irgendwelche Proxies sind nicht notwendig, weder forward noch reverse.
 

RalphS

Lieutenant
Dabei seit
Feb. 2015
Beiträge
621
Eine SNI-Umgebung. Ich weiß echt nicht, was da Proxy sein soll.

Man bindet einen Service ein exakt einen Socket. Das ist Standardverhalten, AUSSER man bindet es an ALLE IPs.
 

wirelessy

Commander
Dabei seit
Nov. 2008
Beiträge
3.040
Na, der IIS ist der Proxy. SNI ist ein TLS-Feature, und kommt in deinem Konstrukt auch nicht zwangsläufig vor. Nicht, wenn jeder Listener eine eigene IP bekommt. Sowieso schonmal nicht, wenn kein TLS geredet wird.

Ich fürchte du denkst dir zuviel Komplexität in einen Proxy.
Lass mich die deutsche Wikipedia kurz zitieren:
Der Reverse Proxy holt Ressourcen für einen Client von einem oder mehreren Servern. Die Umsetzung der Adresse ist atypisch und der Richtung des Aufrufes entgegengesetzt (deutsch „umgekehrter Proxy“). Die wahre Adresse des Zielsystems bleibt dem Client verborgen. Das unterscheidet ihn vom typischen Proxy, der mehreren Clients eines proprietären (in sich abgeschlossenen) Netzes den Zugriff auf ein externes Netz gewährt.[1]
Die Definition ist recht passend, und exakt das, was dein IIS tun würde.
 

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
12.446
Eine SNI-Umgebung. Ich weiß echt nicht, was da Proxy sein soll.
Genau das ist ein Proxy. Der Reverse Proxy bündelt nur nicht wie beim herkömmlichen Proxy mehrere Clients, sondern eben mehrere Services. Ob das nun auf unterschiedlichen Geräten oder dem selben ist, ist egal. Du bündelst mehrere Dienste über einen Einstiegspunkt - Reverse Proxy.

Ein Reverse Proxy kann übrigens auch Fähigkeiten eines Load Balancers besitzen. Deswegen ist es immer noch ein Proxy. SNi ist übrigens nur ein TLS-Feature, wodurch ein bestimmtes Zertifikat anhand eines Hostnamen ausgeliefert werden kann. Früher gabs nämlich nur ein SSL-Zertifikat pro IP, was nun durch SNI umgangen wird.
 

wirelessy

Commander
Dabei seit
Nov. 2008
Beiträge
3.040
Das Wording ist auch nicht ganz treffend, aber ja, so ungefähr :).

@RalphS: Das Binding an sich macht es auch nicht zum Proxy. Die Weiterleitung der Pakete an das Zielsystem mit umgeschriebenem Absender macht es aber dazu.

Und ja, natürlich ist das Standardzeug, was viele Webserver heute halt so können.
Siehe NGINX, Apache, wie auch immer. Ich bin mir nicht sicher, ob alle das auch für andere non-http Services können, aber für HTTP halt schon.
 

Jesterfox

Fleet Admiral
Dabei seit
März 2009
Beiträge
38.758
Der Reverse Proxy bündelt nur nicht wie beim herkömmlichen Proxy mehrere Clients, sondern eben mehrere Services.
Wo wird da etwas gebündelt? Er bindet einfach nur verschiedene Services auf verschiedene IP Adressen. Von Weiterleitung war auch erst mal nicht die rede. Solange sich die Services die man betreiben will direkt an bestimmte IPs binden lassen ist auch keine Weiterleitung notwendig (und je nach Protokoll wäre die auch nicht so einfach... ein Gameserver spricht kein HTTP....)
 

wirelessy

Commander
Dabei seit
Nov. 2008
Beiträge
3.040
Klar ist ne Weiterleitung notwendig, sonst würde ja der Reverse-Proxy die Services hosten - und damit auch kein Reverse-Proxy mehr sein. Die Services verbleiben aber da wo sie heute auch stehen, und man redet halt einfach über den Reverse-Proxy, der sich um die entsprechenden Weiterleitungen kümmert.
Das müssen nicht mehrere Services sein, das kann auch nur einer sein, macht zB Sinn, um in einer DMZ interne Services anzubieten.

Ansonsten bringt mich das aber zu meinem zweiten Stichwort zurück - PAT. Ein simpler Reverse-Proxy macht auch nicht mehr als das.
 

Jesterfox

Fleet Admiral
Dabei seit
März 2009
Beiträge
38.758
Naja, das ist was ich meine... wieso weiterleiten wenn man die Sevices direkt hosten könnte? Vor allem da man ja nicht alles so einfach weiterleiten kann. Zumindest übern Proxy. PAT ist ein anderes Thema, damit müsste es gehen.
 

Weynford

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Feb. 2015
Beiträge
29
Fritzbox ist natürlich absoluter Gammel, aber vielleicht hast Du ja irgendeine Maschine da, die 24/7 läuft und wo man einen DNS-Server raufklatschen kann.
Ja, habe ich. Und zwar die Kiste, um die es mir hier geht. :)
Allerdings läuft da kein Windows drauf, sondern Debian.

Andere Frage: Was wäre dann eine bessere Alternative zur FritzBox, die diesbezüglich mehr Möglichkeiten zur Konfiguration böte?

Reverse Proxy wenn das alles "Websites" sind. Wobei z.B. mit einem Apache Server geht das auch ohne. Wäre besser Du beschreibst mal was da tatsächlich läuft. 🤔
Auf der Maschine läuft Debian Stretch mit OpenMediaVault, was standardmäßig Port 80 des NGINX-Servers für das WebGUI nutzt, was sich auch nicht ändern lässt. Mit der Zeit kamen dann diverse andere Dinge hinzu:

InfluxDB samt Chronograf, Grafana, node-RED. Außerdem diverse Docker-Container, wie GitLab, PiHole, Home Assistant und ein weiterer NGINX-Server mit diversen Webseiten-Projekten darauf.

Soweit also allesamt Web-Interfaces, die da auf den diversen Ports ausgeliefert werden. Das einzige, was derzeit nicht über HTTP/HTTPS läuft, ist ein Minecraft-Server für die Kids und mich.

Alles ein bisschen, nun, durcheinander und ist im Laufe der letzten anderthalb Jahre quasi organisch gewachsen. Galt ursprünglich nur als Spielwiese und könnte daher auch durchaus noch einmal von Grund auf neu aufgesetzt werden.

---

Für die Webseiten könnte ich vermutlich eine conf im Haupt-NGINX einbinden, in denen ich die einzelen Dienste umleite, etwa so:
NGINX:
location ^~ /grafana/ {
        proxy_pass http://localhost:3000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HTTP_X-Forwarded-For $proxy_add_x_forwarded_for;
}
https://server/grafana leitet dann auf http://server:3000/ um. Klappt soweit auch, mehr oder weniger. Zumindest bekam ich in diesem Fall die Grafana-Startseite ausgeliefert, allerdings ohne jegliches CSS, PHP und Co.

Naja, ist ein Anfang. Hatte heute nicht viel Zeit. Morgen geht's weiter. :)
 

Raijin

Admiral
Dabei seit
Nov. 2007
Beiträge
9.448
Soweit also allesamt Web-Interfaces, die da auf den diversen Ports ausgeliefert werden. Das einzige, was derzeit nicht über HTTP/HTTPS läuft, ist ein Minecraft-Server für die Kids und mich.
Darf ich eine banale Frage stellen? Wenn das alles WebGUIs sind, warum setzt man dann nicht einfach Bookmarks im Browser? Genau dafür sind die schließlich da. Muss man sich nix merken, kann den Bookmarks sogar sprechende Namen geben und muss auch nicht mit Proxies um sich werfen. Klar, man kann das so machen, aber die Frage kommt nicht von ungefähr, weil ich selbst eine Handvoll Bookmarks für meinen Server im Menü habe......
 

Weynford

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Feb. 2015
Beiträge
29
Völlig berechtigte Frage! In der Praxis funktioniert das tatsächlich auch genau so, weil sich eben niemand merken kann, was hinter Tor 1880, 3000 oder 8123 steht.

Es geht hierbei hauptsächlich um persönliches Interesse. Das ganze Serverprojekt wurde im Grunde nur zum tüfteln und lernen aufgestellt. So auch hier: ich habe ein "Problem", nun versuche ich es zu lösen. In diesem Fall wusste ich nicht, wo ich da überhaupt ansetzen kann. Daher meine Frage.

Davon mal abgesehen, wäre es toll, wenn man Gästen, die beispielsweise in der selbstgeschriebenen Rezepte-App stöbern möchten, nicht so eine holprige URL wie server.fritz.box:8020/rezepte buchstabieren muss, sondern schlicht rezepte.server oder eben server/rezepte. Aber auch so sieht letzteres in der Adresszeile des Browsers einfach schöner aus. Das Leben ist schwer. :D
 
Top