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?
networking
domain-name-system
http
request
xetra11
quelle
quelle
Antworten:
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:
:8080
Teil jedoch nach der Umleitung in ihren Adressleisten.quelle
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.
quelle
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:
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:
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.
quelle
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.
quelle