Mein DNS-Eintrag kann nur auf eine IP-Adresse verweisen. Wie kann ich nach einem Hafen greifen?

10

Ich bin ziemlich neu in der Netzwerkadministration und freue mich daher bereits, einen DNS-Eintrag erfolgreich eingerichtet zu haben.

Jetzt bin ich etwas verwirrt, weil ich diese URL haben möchte:

http://www.example.org:8080/fetch/characters/

dadurch tatsächlich erreicht werden

http://www.example.org/fetch/characters/

So können Benutzer den Dienst über Port 8080 erreichen, ohne den Port explizit festlegen zu müssen.

Wie kann ich das machen? Benötige ich eine spezielle Anwendung auf meinem Server? Oder irgendwelche Weiterleitungssachen , die auf Anfragen angewendet werden sollen?

xetra11
quelle
4
Der Browser greift standardmäßig nicht auf Port 8080 zu. Ist das ein Fehler bei der Eingabe der Frage?
Džuris
Missverständnis darüber, was ein DNS ist und was es tut.
Pedro Lobito
@ Džuris Na es war ein Fehler von mir zu denken, 8080 ist der http-Standard anstelle von 80
xetra11

Antworten:

32

DNS-Einträge können nicht auf Ports verweisen (mit einigen Sonderfallausnahmen, die hier nicht gelten).

Wenn ein Webdienst Port 8080 überwacht und ihn ohne Angabe dieses Ports erreichen möchte, haben Sie drei Möglichkeiten:

  • Stellen Sie sicher, dass Port 80 (oder 443 mit https) tatsächlich abgehört wird.
  • Konfigurieren Sie alles, was bereits auf Port 80 empfangsbereit ist, um Anforderungen an Ihren Dienst auf Port 8080 (Reverse Proxy) weiterzuleiten.
  • Wenn Sie mit einer Umleitung leben können, verwenden Sie diese anstelle eines Proxys. Ihre Clients sehen den :8080Teil jedoch nach der Umleitung in ihren Adressleisten.
Sven
quelle
10
Was wäre, wenn wir SRV-Einträge verwenden und Ports für Dienste angeben könnten? Schade, dass Browser dies nicht verwenden.
Jacob Evans
4
@JacobEvans: SRV-Aufzeichnungen für alles sind ein alter Traum von mir. Es würde die Dinge so viel einfacher machen (außer für Firewall-Administratoren, die jetzt alles außer 80 und 443 blockieren können)
Sven
SRV-Datensätze funktionieren sehr gut für einige Dienste wie XMPP ... aber leider nicht sehr viele (und nicht sicher HTTP)
Josh
Option 4: Port vorwärts durch eine Firewall
Joel Coel
10

Webserver überwachen standardmäßig den TCP-Port 80. Wenn Sie die Portnummer nicht explizit in die URL eingeben möchten, haben Sie einige Möglichkeiten:

  • Sie können Ihren Webserver so konfigurieren, dass Port 80 anstelle von Port 8080 verwendet wird. Dies wird für Webserver wie Nginx oder Apache empfohlen, nicht jedoch für Webserver wie Gunicorn. Diese Option ist auch nicht immer möglich, da dieser Port möglicherweise bereits von einem anderen Webserver verwendet wird.

    Wenn sich Ihr Server hinter einem NAT-Gateway befindet, besitzt er nicht die öffentliche IP-Adresse, und die Kombination aus dieser öffentlichen NAT-Adresse und Port 80 wird möglicherweise bereits an einen anderen Webserver weitergeleitet.

  • Sie können einen Reverse-Proxy-Server vor Ihren Webserver stellen, der den Datenverkehr auf TCP-Port 80 akzeptiert und an Ihren Webserver auf TCP-Port 8080 sendet. Dies funktioniert auch, wenn Port 80 bereits verwendet wird. Stellen Sie einfach den Reverse-Proxy-Server vor beide Webserver, sodass beide andere Ports als 80 abhören.

Um eine bessere und detailliertere Hilfe zu der am besten geeigneten Option und den Einschränkungen usw. bereitzustellen, müssen wir mehr über Ihr Setup wissen. Hoffentlich hat diese Erklärung die Dinge schon ein bisschen geklärt.

Tommiie
quelle
Ich habe bereits die Infos, die ich brauche! Ich habe den Standard-
Webport
7

Einfache Antwort, bezogen auf die Fragestufe

Wenn man die exotischen Verwendungen von DNS ignoriert und auch die DNS-Suche umkehrt (für Fragen nicht relevant), hat fast jede DNS-Verwendung die Form:

  1. Der Client sendet einen Domänennamen (vollständig qualifiziert oder anderweitig) an einen DNS-Server
  2. Der DNS-Server gibt Domäneninformationen aus seinen Einträgen zurück. Normalerweise ist die angeforderte Schlüsselinformation entweder die IP-Adresse für die Kommunikation mit Web / E-Mail in dieser Domäne oder die IP-Adresse eines anderen DNS-Servers, der diese Informationen besser bereitstellen kann.

Sobald der Client den Server kontaktiert hat, übernimmt der Server selbst und das DNS-System fällt aus dem Bild.

Dies bedeutet, dass das DNS-System keine Portinformationen bereitstellen muss und dies fast nie tut. Obwohl das Ziel der Frage gültig ist und oft getan wird, ist es nicht das DNS-System, das dies tut. Deshalb kannst du es nicht herausfinden :)

Die Idee ist, dass, sobald Ihr Client den bestimmten Computer oder Server gefunden hat, nach dem er sucht, es an diesem Computer liegt, die von ihm ausgewählten Ports abzuhören und Protokolle an den konfigurierten Ports zu akzeptieren / zu verweigern / darauf zu antworten.

Beispielsweise werden HTTP-Webdienste normalerweise an Port 80 bereitgestellt. Dies bedeutet, dass der Client, sobald er eine Computer-IP kennt, davon ausgehen kann, dass das Senden einer Nachricht an Port 80 dazu führt, dass diese Nachricht vom Webdienst dieses Computers gelesen / beantwortet wird. Aber so muss es nicht sein. Wenn der Server so konfiguriert ist, dass er auf eingehende Webanforderungen an Port 9000 wartet, kann jeder Client, der Port 9000 erreichen kann, seinen Webdienst erreichen. Befindet sich der Server hinter einem Proxy / NAT / Router, der Port 10000 an Port 9000 umleitet, und sendet der Client eine Webanforderung an Port 10000, empfängt der Server diese an Port 9000 und antwortet ebenfalls.

Umleitung / Zuordnung innerhalb des Webservers

Sie haben nach einem Redirect-Mapping gefragt oder in einem Kommentar neu geschrieben. Dies sind Funktionen, die ein Webserver ausführen kann. Grundsätzlich können Sie den Webserver (oder die meisten / viele Webserver) so konfigurieren, dass verwaltet wird, wie er mit der URL umgeht, die er in einer Anforderung erhält. So kann es die URL beim Empfang intern ändern, damit verschiedene URLs auf die gleiche Weise behandelt werden, oder allgemeine Tippfehler (Zuordnung) korrigieren, oder es kann tatsächlich antworten, um den Client selbst anzuweisen, ein zweites Mal nach einer anderen Ersatz-URL zu fragen (umleiten).

Diese haben ihre Verwendung und könnten im Prinzip Ihren Anwendungsfall behandeln, aber sie klingen aus folgenden Gründen nicht nach der "richtigen" Lösung für Sie:

  1. Ich denke nicht, dass Mapping überhaupt helfen würde . Die Zuordnung erfolgt fast vollständig intern auf dem Webserver. Dort heißt es: "Behandle diese URL so, als wäre es diese URL." Beispielsweise können Sie die URL-Zuordnung von Webservern verwenden, um einem Benutzer das Abfragen eines Forums unter Verwendung sehr alter, alter und aktueller URLs (zur Vereinfachung des Benutzers) unter Verwendung von " https://example.com/index.php?area-=forum&topic" zu ermöglichen = 2 ", auch" https://example.com/forum.php?topic=2 "und auch" https://forum.example.com?topic=2 "", und behandeln Sie dies nur einmal, indem Sie die ersten beiden intern als ersten Schritt bei der Bearbeitung der Abfrage intern auf die dritte URL abbilden. Da dieses Ziel den Abfragepfad und nicht die IP / den Port betrifft, ist die Zuordnung nicht sehr nützlich Portverwaltung, und in Ihrem Fall fragt der Client 8080 überhaupt nicht ab.
  2. Die Umleitung würde funktionieren, ist aber möglicherweise nicht das, was Sie wollen . Die Umleitung auf dem Webserver hängt davon ab, dass der Webserver die Abfrage tatsächlich empfängt (da dies interne Funktionen des Webservers sind). Der Webserver müsste also ohnehin Port 80 abhören, um die ursprüngliche Abfrage zu erhalten, um mit der Umleitung / Karte zu antworten. Es müsste auch Port 8080 abhören. Funktionell würde es eine Umleitungsregel benötigen, um jedem Client, der Port 80 abfragt, mitzuteilen, dass er ihn erneut mit der URL ": 8080" abfragen soll, was nicht so klingt, wie Sie es möchten machen. Der Benutzer würde auch die neue URL mit ": 8080" sehen, während es so klingt, als ob Sie möchten, dass sie "transparent" ist und nicht angezeigt wird.
  3. Außerdem würde die Umleitung nur funktionieren, um einen Standardport (80 oder 443) umzuleiten - Sie könnten Port 2000 beispielsweise nicht auf 8080 umleiten, da der Client in erster Linie nicht standardmäßig 2000 abfragen würde, also niemals Gehen Sie zum Webserver, auch wenn er im Jahr 2000 abgehört hat. Dies ist jedoch möglicherweise kein Problem für Sie.

Wenn Sie jedoch eine "intelligente" Umleitung wünschen, bei der nur bestimmte Abfragen an 8080 umgeleitet werden, ist dies möglicherweise der richtige Weg, da die Umleitung eine Logik enthalten kann, um zu entscheiden, welche URLs umgeleitet werden sollen, während die Portzuordnung (unten) alles zuordnen würde .

Wie man es richtig macht

Die Antwort auf Ihre Frage lautet, dass der Webserver auf Webanfragen antworten soll, die der Client an den Standardport (80/443) sendet, die der Server jedoch tatsächlich an Port 8080 empfängt.

Wie Sie sehen, benötigen Sie also etwas dazwischen, das die Ports zwischen Client und Server abbildet . Auf diese Weise sendet der Client an Port 80 (Standardport, der von Webbrowsern verwendet wird), der jedoch vom Webserver tatsächlich an Port 8080 empfangen wird. Natürlich müssen Sie den Webserver so konfigurieren, dass er Port 8080 überwacht, da dies nicht Standard ist, aber es ist einfach und jeder Webserver sollte in der Lage sein, seine Überwachungsports anzugeben.

Der üblichste Weg, dies zu tun, wäre innerhalb des Routers / der Firewall über die Portzuordnung.

In einfachen Worten, um dies zu tun, erhält der Router eine Regel, dass alles, was empfangen wird, eine Ziel-IP von und einen Ziel-Port = 80 hat, an das LAN übergeben werden sollte, wobei der Ziel-Port stattdessen auf 8080 geändert wird. Weder der Webserver noch der Client werden von der Änderung Kenntnis haben (sie wird zu 100% vom Router verarbeitet), sodass sie für beide zu 100% transparent ist. Der Client hat kein ": 8080" in seiner URL und muss nichts umleiten, da er Port 80 abfragt und der Webserver Port 80 ignorieren und nur 8080 abhören kann, da er niemals Abfragen an Port 80 erhält .

Wenn Sie einen einfachen und unkomplizierten Weg suchen, ähnlich wie ein "DNS für Ports", ist dies wahrscheinlich das nächste Äquivalent zu dem, was Sie in Ihrer Frage verlangen.

Stilez
quelle
Ich höre oft von Redirect Mapping oder Rewrite? sind das auch lösungen?
Xetra11
Dies sind Modifikatoren, die bei der Verarbeitung des Client-Befehls innerhalb des Webservers aktiviert werden. Also , wenn der Web - Server unterstützt, Sie könnten automatisch reagieren auf jede Anfrage auf Port 80, mit einem HTTP - Umleitung auf die gleiche URL auf Port 8080 - nach allem, HTTP / 80 -> HTTPS / 443 Umleitung sind viel die gleiche Sache. Es muss jedoch in der Lage sein, die Abfrage zuerst zu empfangen, damit es nicht an Ports funktioniert, für die es nicht zum Abhören konfiguriert ist, und der Client sieht wahrscheinlich die geänderte URL: 8080. Wenn Sie dies über die
Portzuordnung
Ich habe einen Abschnitt "Umleiten / Zuordnen innerhalb des Webservers" hinzugefügt und den letzten Abschnitt erweitert, um Ihre Frage ausführlicher zu behandeln. Ich hoffe sie helfen!
Stilez
3

Das kannst du nicht.

Ich meine, technisch könnte das gemacht werden. DNS ist bekannt dafür, dass es einen Domainnamen übermitteln und eine IP-Adresse erhalten kann. Ich habe mich jedoch ein wenig mit dem DNS-Protokoll befasst, und DNS ist technisch in der Lage, als Abfrage- / Antwortmechanismus für weit mehr als nur Domainnamen und IP-Adressen zu fungieren. Ein möglicher Ansatz wäre die Verwendung eines DNS-Ressourceneintrags, der nicht dem typischen A- oder AAAA-Typ entspricht, z. B. eines TXT-Eintrags (der technisch gesehen nur Text ist und für alles verwendet werden kann) oder eines SRV-Eintrags oder eines anderen neuerer Ressourceneintragstyp, den Sie auswählen.

Wenn Sie Ihre eigene Software (sowohl Client als auch Server) erstellen, gibt es möglicherweise keinen technischen Grund, dies nicht zu tun, außer zu wissen, dass einige Benutzer DNS-Hosting-Unternehmen verwenden und sie auf die Verwendung nur bestimmter Datensatztypen beschränken. Das ist bedauerlich, da Leute, die ihre eigenen DNS-Server betreiben, sicherlich genug Flexibilität für solche Dinge haben.

Wenn Sie jedoch kein eigenes Netzwerkprotokoll erstellen (z. B. wenn Sie HTTP verwenden möchten), tritt wahrscheinlich ein großes Problem auf, nämlich, dass vorhandene Software Ihre benutzerdefinierte Lösung nur verwendet, wenn Sie sie verwenden bereits etablierte Lösungen. Das wird die Barriere sein. Keine technische Unmöglichkeit. Eine soziale Barriere: Können Sie alle davon überzeugen, die Dinge auf Ihre Weise zu tun?

Nachdem ich erklärt habe, warum Sie das nicht können, habe ich möglicherweise eine Lösung für das, wonach Sie suchen. Schauen wir uns zunächst an, warum wir überhaupt IP-Adressen und Ports haben.

IP-Adressen und Ports machen verschiedene Dinge. Der Zweck der IP-Adresse besteht darin, die Ziele der Schichten 2 und 3 des OSI-Modells der Netzwerkkommunikation zu erfüllen. Der Zweck der IP-Adresse besteht darin, zu identifizieren, zu welchem ​​Computer der Datenverkehr gehen soll. Die Tatsache, dass wir möglicherweise eine Portnummer für diesen Zweck verwenden, indem Firewalls / Router Portnummern untersuchen, um NAPT (Network Address Port-based Translation, manchmal auch PNAT oder nur NAT genannt) durchzuführen, ist eine neuere Technik, die a verwendet Ressource (Information), war aber nicht Teil des ursprünglichen Designs. Wenn wir uns für eine Minute von diesem "Missbrauch" der Portnummern entfernen und das ursprüngliche Design berücksichtigen, können wir möglicherweise eine einfachere Lösung finden. Durch das Design des Internets sollten Maschinen mithilfe von IP-Adressen gefunden werden.

Der Sinn einer "Portnummer", die von TCP und UDP und einigen Alternativen verwendet wird, besteht darin, einzelne Konversationen verfolgen zu können. Dies hilft, die Kommunikation mit laufenden Programmen auszurichten. Wenn ein Computer Datenverkehr über den TCP-Port 80 empfängt, weiß der Computer, dass der Netzwerkdatenverkehr von dem Programm verwendet werden soll, das der Webserver ist. Wenn ein Webbrowser mehrere Grafiken gleichzeitig herunterlädt, können Kombinationen aus "Quellport" -Nummern und "Zielport" -Nummern verfolgen, welche Daten für welche Grafik bestimmt sind, sodass diese gleichzeitigen Konversationen stattfinden können, ohne die Daten zu verwechseln.

Ich vermute, Sie haben Zugriff auf einen DNS-Server, und es scheint Ihnen, als ob Sie der Meinung sind, dass die DNS-Verwaltung praktisch wäre, um einen Teil des Verkehrsroutings ein wenig besser verarbeiten zu können. DNS scheint Ihnen jedoch nicht dabei zu helfen, eine Portnummer zu erhalten. Was kannst du tun?

Betrachten Sie IPv6. Mit IPv6 können Sie viel mehr IP-Adressen haben. Darüber hinaus können Geräte, die IPv6 verwenden, im Gegensatz zu einigen IPv4-Implementierungen problemlos mehrere aktive IPv6-Adressen gleichzeitig unterstützen. Wenn Sie also drei verschiedene Netzwerkprotokolle auf einem Computer haben möchten, können Sie demselben Computer mindestens drei verschiedene IPv6-Adressen zuweisen. Und dann können Sie mit diesen IPv6-Adressen beliebige Routing-Spielereien ausführen.

Anschließend können Sie den AAAA-Ressourceneintragstyp verwenden, um dieser IPv6-Adresse einen Namen zuzuweisen, den Ihr Netzwerkdesign als effektiv für den bestimmten Dienst auf dem gewünschten Computer reserviert behandeln kann.

Wallah, Sie haben jetzt DNS, das effektiv auf die Software verweist, und dieses Ziel erreicht, ohne sich darauf verlassen zu müssen, dass DNS auf eine Portnummer verweist, was einfach nicht gut funktioniert, weil diese Funktionalität einfach nicht üblich ist unterstützt.

Möglicher Einwand:
Und wenn Sie sich mit IPv4 festgefahren fühlen und der Meinung sind, dass IPv6 irgendwie nicht unterstützt wird, würde ich Sie ermutigen, zu versuchen, dieses Problem anzugehen. Dieses Problem wird wahrscheinlich einfacher zu beheben sein (möglicherweise mithilfe einer Art Tunneling) und wird wahrscheinlich eine lohnendere Lösung sein, sobald Sie es implementiert haben.

TOOGAM
quelle
IPv6 ist immer gut zu unterstützen, hilft aber nicht, wenn Sie aus irgendeinem Grund jetzt Port 80 (oder 443) verwenden dürfen.
Paŭlo Ebermann
Dies ist wahr, aber wenn DNS eine Portnummer übermitteln könnte, würde dies auch nicht um eine Firewall herum funktionieren, die den Datenverkehr auf einer bestimmten Portnummer blockiert. Außerdem war meine Erklärung zur Verwendung von IPv6 nur ein Teil der Antwort, und ich glaube, dass die früheren Teile meiner Antwort die Frage ansprechen.
TOOGAM