Subdomainweiterleitung auf Port im Heimnetz

Lobo666

Lieutenant
Registriert
Nov. 2008
Beiträge
552
Hallo zusammen!
Ich möchte gerne eine Subdomain auf einen ganz bestimmten Port meines Servers im Heimnetz weiterleiten.

Zur Situation:
Ich habe eine Domain (inkl. Subdomains) bei Strato -> eine Fritzbox im Heimnetz -> einen Server mit Debian im Heimnetz -> Docker Container mit nextcloud.

Ich möchte nun meinen Nextcloudserver über "nextcloud.meinedomain.de" erreichen. Im ersten Moment dachte ich natürlich über DynDNS nach, also richtete ich das auf Strato und der Fritzbox ein. Ich kann hier aber nur eine (sub)Domain zu einer öffentlichen IP weiterleiten, den Port müsste ich dann trotzdem noch angeben. Ich müsste also "nextcloud.meinedomain.de:8080" schreiben, das möchte ich aber nicht.

Meine zweite Idee war, "nextcloud.meinedomain.de" per CNAME bei Strato zu meiner myfritz Adresse "xyz.myfritz.net:8080" umzuleiten. Das klappt aber leider auch nicht. Lasse ich den Port weg und leite zu "xyz.myfritz.net" um, funktioniert es, aber dann habe ich ja das gleiche Problem wie bei DYNDNS.

Kann mir jemand bei der Lösung helfen?
 
vlt versteh ich die frage bzw. das Problem nich ganz, aber wäre hier ein reverse proxy bei dir nicht die einfachste lösung? Von dort könntest du ankommenden Traffic auf die Subdomain auch an den passenden Container weiterleiten. Und die anderen Anfragen dann eben an die Haupt-Domain.

Als Reverse-Proxy is Traefik recht easy dafür, gibbet auch im Container.
 
  • Gefällt mir
Reaktionen: Rego
Ich verwende dafür "HAProxy". Die LetsEncrypt-Zertifikate der verschiedenen Subdomains lasse ich auf dem jeweiligen Server generieren bzw. verlängern und automatisch per SH-Skript auf den HAProxy-Server kopieren und aktivieren.
 
@Telvanis
Da müsste ich mich natürlich erstmal einlesen.
Vielleicht zum Verständniss was ich will:

Ich will:
nextcloud.meinedomain.de -> UMLEITUNG AUF -> meine.öffentliche.ip:PORT

Nur das bekomme ich bislang hin:
nextcloud.meinedomain.de:PORT -> UMLEITUNG AUF -> meine.öffentliche.ip:PORT

Also ihr sagt mir beide, dass ich das über DYNDNS nicht hinbekomme und ich auf jeden Fall einen Proxydienst benötige. Schade, ich wollte das eigentlich so schmal wie möglich halten...
 
Zuletzt bearbeitet:
ich mein, ich hätt hier auch noch iwo ne compose mit nem nginx-proxy vom kollegen rumfliegen...
Ergänzung ()

Lobo666 schrieb:
nextcloud.meinedomain.de -> UMLEITUNG AUF -> meine.öffentliche.ip:PORT

und das ginge nicht, dass du exakt diese Domain bei Strato mit deiner öffentlichen IP verbindest und dann bei dir dort n reverse proxy aufstellst (an dieser öffentlichen IP für Port 80 und 443 von mir aus) und dann dort einstellst, was mit anfragen passiert, die auf die Subdomain bzw. Hauptdomain gehen...?
Ergänzung ()

Lobo666 schrieb:
Also ihr sagt mir beide, dass ich das über DYNDNS nicht hinbekomme und ich auf jeden Fall einen Proxydienst benötige.

Damit hab ich leider noch überhaupt keine Berührungen gehabt, ich schätze, da kann dir der strato support am besten weiterhelfen...
 
Zuletzt bearbeitet:
Lobo666 schrieb:
Nur das bekomme ich bislang hin:
nextcloud.meinedomain.de:PORT -> UMLEITUNG AUF -> meine.öffentliche.ip:PORT

anders geht das auch nicht ... eine Domain (egal ob Sub oder TLD) löst immer nur eine IP auf, der Port ist nicht Teil von DNS ... der Port ist dann auf der entscheidenden Maschine zu handeln. Du musst also an deiner Fritzbox den Port an deinen Server weiterleiten. Optimal wäre natürlich 443, dann kannst du https://sub.domain.tld eingeben. Du kannst zB 443 (aus dem Internet) an 8080 (auf deinem Server) weiterleiten, das sollte gehen.
 
  • Gefällt mir
Reaktionen: Raijin, DFFVB, /root und 2 andere
Telvanis schrieb:
und das ginge nicht, dass du exakt diese Domain bei Strato mit deiner öffentlichen IP verbindest und dann bei dir dort n reverse proxy aufstellst (an dieser öffentlichen IP für Port 80 und 443 von mir aus) und dann dort einstellst, was mit anfragen passiert, die auf die Subdomain bzw. Hauptdomain gehen...?
Ergänzung ()

Das geht bestimmt irgendwie, nur bin ich nicht so der Netzwerkcrack und wollte es möglichst simpel halten. Außerdem verstehe ich die Funktion des Proxys so, dass er schon direkt auf Strato und nicht erst auf meinem Server laufen müsste, oder nicht? Und ob das da geht ist sehr fraglich.
Ergänzung ()

@LieberNetterFlo
OK! Also gehts das nicht wie ich es mir vorstelle. Danke für diese Information!
Das ich den Port weiterleiten muss war mir zwar klar, deinen letzten Satz verstehe ich allerdings nicht richtig.
Du sagst ich kann mit "https://nextcloud.meinedomain.de" direkt auf "meine.öffentliche.IP:8080" zugreifen? Das wäre genau das was ich brauche! Wahrscheinlich ist die Frage jetzt etwas dämlich für jemanden der sich auskennt, aber warum genau funktioniert das dann? Weil 443 der Standardport für https ist?
 
Zuletzt bearbeitet:
ne, du kannst auf meine.öffentliche.IP:443 zugreifen ... an deiner Fritzbox musst du nun noch einstellen: Portweiterleitung von 443 auf server:8080

ja, weil Browser so funktionieren:

http://sub.domain.tld -> DNS Anfrage -> IP zurückbekommen -> aufruf IP:80
https://sub.domain.tld -> DNS Anfrage -> IP zurückbekommen -> aufruf IP:443

du machst dann sowas:

https://nextcloud.domain.tld -> DNS Anfrage -> IP (deine Öffentliche) zurückbekommen -> aufruf IP:443 -> Weiterleitung intern server:8080

Die Umsetzung 443 auf 8080 macht quasi deine Fritzbox, für den aufrufenden Browser läuft alles über 443, und damit https, und somit ist für ihn alles i.O. (das Fritzbox-Webinterface, welchen du eventuell ins Internet geöffnet hast, musst du dann auf einen anderen Port legen, zB 553 oder einer deiner Wahl)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Digitalzombie
Eine Domain löst wie bereits geschrieben nur in eine IP auf. Sofern die Software mit der du Anfragen über eine Domain schicken willst das mitmacht kann natürlich auch ein Feld der Domain (SRV den Port bereitstellen). Funktioniert natürlich nur wenn die Software dieses Part ausliest

Can I specify a TCP/IP port number for my web-server in DNS? (Other than the standard port 80)
The standard A-record (domain name to IP address) currently used by web-browsers to locate web-servers does not include a port number.
Current web-browsers use the URL protocol prefix (http://) to determine the port number (http = 80, https = 443, ftp = 21, etc.) unless the port number is specifically typed in the URL (for example "http://www.xpertdns.com:5000" = port 5000).
A recent addition to the DNS protocols - the SRV record type (RFC2782), does have the potential to solve this issue.
Future web-browser software may use this to determine the port number, but this is not yet supported by any of the major browsers.
For the time being, if you need to run a web-server on a TCP/IP port other than 80, the visitor will need to specify this directly in the URL, or you need to use a HTTP redirect (from a web-server on port 80).
 
sub.domain.tld ist ja nur die "Kurzschreibweise" für http://sub.domain.tld:80

Du musst also von Port :80 auf Port :8080 weiterleiten. Das kannst du simpel im Router über eine Portweiterleitung machen oder wenn es etwas intelligenter sein soll (z.B. http zu https inkl Zertifikate machen) über ein Reverse Proxie. Der Reverse Proxie kann bei dir loakl auf dem Server laufen. Der Router macht dann simples Port 80->Port80 NAT.
 
@LieberNetterFlo und @alleanderen
Solangsam nimmt es formen an. Ich sollte also möglichst andere Ports wählen, damit im Browser nicht der Port mit eingegeben werden muss. Das klingt generell, als würde das für mich gut funktionieren!

Darf ich dir trotzdem vielleicht noch einmal den Aufbau meiner Portweiterleitungen darlegen, vielleicht kannst du das ja mal für mich bewerten.

PortsJPG.JPG

Im Docker Container wird der Host Port 444 dann zum Exposed Port 443/tcp , und der Host Port 8080 zum Exposed Port 80/tcp geleitet.

Falls du mich jetzt fragst warum ich das genau so gemacht habe. Ich bin einem Tutorial einer Person gefolgt, die extrem gute Tutorials macht. Er hatte soweit ich das verstanden habe, die Ports 80 und 443 bereits für andere Anwendungen verwendet. Ich jedoch offensichtlich nicht, so das ich wahrscheinlich die Weiterleitungen in meiner Fritzbox von 8080 auf 80 und von 444 auf 443 ändern könnte, richtig? Dann müsste ich natürlich auch die Host Ports im Docker Container ändern. Oder sehe ich da etwas falsch?
 
Lobo666 schrieb:
. Er hatte soweit ich das verstanden habe, die Ports 80 und 443 bereits für andere Anwendungen verwendet.
Wenn du nicht schein einen Webserver bei dir am laufen hast (was wohl nicht der Fall ist) sind die Ports noch frei.
 
Wenn du mehrere Dienste unter selbem selben Port mit unterschiedlichen internen Server nutzen willst. Dann könntest du natürlich auch einen ReserveProxy einrichten. Der die Anfragen von Port 80/443 je nach Anwendung dementsprechend passend umleitet.
 
Ich danke euch vielmals!
Die Lösung ist also die Ports 80/443 zu nutzen.
Sollte ich irgendwann mal mehrere Server haben bei denen die Nutzung dieser Ports sinnvoll ist, macht ein ReserveProxy sinn.
 
genau! Wenn du nur einen Dienst hast, leite Port 80/443 weiter auf den Dienst (in deinem Fall Nexcloud), wenn du mehrere hast, kommt ein Reverse Proxy ins Spiel :) die Ports an den Dockern musst du nicht ändern, alle deine Einstellungen kannst du in deiner Fritzbox machen (8080 -> 80 und 444 -> 443)
 
Danke!
Aber jetzt merke ich gerade, dass ich bereits einen Webserver laufen habe und zwar die Weboberfläche meines Servers 🧐
Ich muss also entweder immer die Ports dahnter schreiben oder aber einen Reserve Proxy nutzen.
 
genau :)

wenn du alles in Docker-Containern hast (also Webserver, netxcloud, etc) dann gibts da gute Container die dir auch einen Reverse Proxy machen mit SSL und dynamisch auf deine Container reagieren.

Ansonsten würde ich dir haproxy empfehlen (mit acme.sh als letsencrypt-client)

EDIT: Warte: hast du das Webinterface deines Servers ins Internet gestellt? Falls nein, dann denkst du noch falsch :) ansonsten bleibe ich bei meiner vorigen Aussage.

ich pack mal Paint aus, gib mir ein paar Minuten!
 
Zuletzt bearbeitet:
Trotzdem ist aus dem Internet nur ein Dienst über die "Kurzschreibweise" domain.tld zu erreichen. Für alle anderen muss man den Port (in deinem Beispiel :6128) mitangeben. Nur intern macht man es sich leichter, weil man da nicht alle Ports einzigartig halten muss.
 
Zurück
Oben