Verwendung von DNS / Hostnamen oder anderen Methoden zum Auflösen in eine bestimmte IP: Port

51

Dies ist eine kanonische Frage zur Auflösung von DNS / Hostnamen in IPs / Ports

Beispiel 1

Ich verwende einen Webserver auf Port 80 und einen anderen auf Port 87. Ich möchte DNS verwenden, damit www.example.com zu Port 87 wechselt. Wie kann ich dies nur mit DNS erreichen?

Beispiel 2

Ich führe einen Dienst auf meinem Server über einen nicht standardmäßigen Port aus. Wie kann ich Clients dazu bringen, automatisch eine Verbindung zu diesem nicht standardmäßigen Port herzustellen? Kann ich DNS verwenden? Gibt es eine anwendungsspezifische Unterstützung, bei der DNS die IP und den Port angeben kann?

Beispiel 3

Unterstützen einige Anwendungsprotokolle speziell die Erkennung von Hostnamen und ermöglichen spezielle Aktionen, die auf diesen Informationen basieren? Gibt es noch andere Fragen zu Serverfehlern, die einige davon abdecken?

Commandeering:Diese Frage bezog sich ursprünglich auf die Ausführung von IIS und Apache auf demselben Server. Die gleichen Konzepte können jedoch auf jede Serversoftware angewendet werden, die Verbindungen von Clients empfängt. In den folgenden Antworten werden die technischen Probleme und Lösungen für die Verwendung der DNS- und Anwendungsprotokollunterstützung zum Zuweisen einer Portnummer für einen Client zum Herstellen einer Verbindung beschrieben.

Tomasz Smykowski
quelle
In Bezug auf Beispiel drei möchten die Leser möglicherweise auch unsere kanonische Frage untersuchen, wie sie willkürliche Protokolle Hostnamen-fähig machen .
MadHatter

Antworten:

34

Sie können den DNS nicht verwenden, um auf einen Port zu verweisen (es sei denn, der Client unterstützt SRV-Einträge, die meisten nicht).

Websites und Protokolle mit Host-Headern

Dazu müssen Sie eine Front-End-Methode einrichten. Normalerweise verwenden Sie einen Front-End-Webserver oder eine dedizierte Proxy-Software, um die Verbindung von Port 80 zu Port! 80 basierend auf dem Namen des Servers weiterzuleiten, der im Header angefordert wird. Einige Firewalls können auch basierend auf dem Host-Header weiterleiten.

SRV-Aufzeichnungen

Einige Clients unterstützen das Nachschlagen von SRV-Einträgen, die den Hostnamen und die Portnummer des Servers für den angegebenen Dienst angeben (dh der Benutzer gibt "example.com" an, der Client schlägt einen SRV-Eintrag nach und erhält "server101.example.com" an Port "255" "; verbindet sich dann damit). Einige Clients implementieren dies auch, wenn es nicht erforderlich ist (mein letztes Smartphone hat die SRV-Datensätze beispielsweise beim Einrichten eines neuen E-Mail-Kontos nachgeschlagen).

Leider ist die Unterstützung für SRV-Datensätze sehr selten. Nur wenige bemerkenswerte Protokolle schreiben die Unterstützung vor (Jabber / XMPP, Kerberos, LDAP, SIP) und nicht jeder Client unterstützt sie, selbst wenn dies vorgeschrieben ist.

Chris S
quelle
15

Wenn Sie http://www.domain.com in Ihren Browser eingeben, ist der HTTP-Port auf 80 eingestellt. Daher gibt es keine direkte Möglichkeit, www.domain.com auf Port 87 zu verweisen, wenn Sie bereits einen Dienst haben Laufen auf diesem Port in IIS.

Davon abgesehen gibt es ein paar "Workarounds".

  • Verwenden Sie einfach http://www.domain.com:87/ - dies stellt eine Verbindung zu Port 87 (Apache) auf Ihrem Server her.
  • Sie können eine Umleitung einrichten, damit http://www.domain.com/apache (oder einen Proxy, wenn Sie Lust haben möchten) zu www.domain.com:87 weiterleitet.
  • Sie können einen "VirtualHost" einrichten, sodass sich www.domain2.com weiterhin auf Port 80 befindet, der mit www.domain.com geteilt wird. Sie können dies nicht einrichten, ohne IIS zu ändern.

Sam hat recht, DNS ist agnostisch, wenn es um Ports geht. Jede Art von Portumleitung erfolgt durch den Dienst, der auf diesem Port ausgeführt wird. Daher müssten Sie etwas mit IIS tun, um dies zu erreichen, wenn Sie keine andere Wahl haben, als es auf Port 80 zu belassen.

Ich habe auch Ihre Situation durch die Verwendung von mod_proxy unter Apache umgangen und bin mir nicht sicher, ob es eine Möglichkeit gibt, dies mit IIS zu tun.

Dave Drager
quelle
Ok, wie stellst du einen Proxy auf IIS ein?
Tomasz Smykowski
2
Wenn es sich um IIS7 handelt, können Sie Application Request Routing (ARR) verwenden.
Scott Forsyth - MVP
1
Scott, haben Sie einen guten Link für die Dokumentation zu ARR?
Jacques
12

Ich fürchte, Domain-Namen können nur mit einer IP-Adresse und nicht mit einem Port verknüpft werden.

Bei den meisten Webservern (z. B. Apache, IIS usw.) können Sie zwei Domänen auf derselben IP-Adresse hosten, indem Sie die Tatsache verwenden, dass Webanforderungen ein Host-Header-Feld enthalten, das die Domäne in der Anforderung selbst identifiziert.

Wenn Sie sagen, was der Webserver ist, den Sie verwenden, können Sie sicher auf die entsprechende Dokumentation verweisen, um Ihren Server wie gewünscht einzurichten

Phil
quelle
Das ist der Punkt. Ich benutze zwei verschiedene Webserver.
Omar Abid
12

Technisch gesehen können Sie SRV-Einträge auf DNS-Servern wie in RFC 2782 definiert verwenden , um Browsern mitzuteilen, welche Server http an welchen Ports für eine (Sub-) Domain verarbeiten:

_http._tcp.www.example.com.  IN      SRV 0    5      80   www.example.com.
_http._tcp.www2.example.com. IN      SRV 0    5      87   www.example.com.

Dies funktioniert gut für viele Protokolle / Dienste, insbesondere wenn die Verwendung von SRV-Datensätzen bereits in der Protokollspezifikation definiert ist.

Wie diese " Hall of Shame " besagt, unterstützen die meisten Webbrowser / -clients dies jedoch nicht (für HTTP). Lesen Sie auch, warum-Browser-srv-Datensätze-nicht-verwenden .

Grundsätzlich gilt, dass SRV nicht als Muss im http-Protokoll enthalten ist, sodass jeder Browser, der es implementiert, URLs anders auflöst als Browser, die dies nicht tun.

Daher sollten Sie dies nur als optionalen Lastenausgleich verwenden, wenn es nicht relevant ist, welcher Server inhaltlich ausgewählt wird. "Optional", weil es nicht viel von der Last ausgleicht, wenn nur wenige Clients dies implementieren.

JonnyJD
quelle
6

DNS kann nicht zu einem bestimmten Port umgeleitet werden. Es geht nur um die IP-Adressauflösung eines Namens und umgekehrt.

Einige Dienste, wie z. B. Dynamic IP-DNS-Anbieter, wie z. B. NO-IP, bieten eine Dienstleistung, mit der Sie ähnliche Maßnahmen ergreifen können, um das Blockieren von IP-Adressen bei DNS-Diensten zu Hause zu umgehen.

Sam Cogan
quelle
Einige Registrare (GoDaddy) bieten Domain-Weiterleitungen über ihre geparkten Server an. Sie könnten das versuchen, aber es ist ein bisschen kludge. Alternativ können Sie Ihren eigenen Webbrowser schreiben, der nach SRV-Datensätzen sucht, und dann versuchen, die Welt davon zu überzeugen, ihn zu verwenden :)
Jason Antman
6

Um einen beliebigen (TBT-) Dienst auf einem nicht standardmäßigen Port zu verwenden und keinen Port in den URI zu schreiben, kann jeder SRV-Datensätze verwenden, die in RFC 2782 definiert sind.

_http._tcp.www.example.com. IN      SRV 0    5      87   www.example.com.

Alle anderen http-Hosts in der Zone werden weiterhin über den Standardport 80 bedient

Fauler Dachs
quelle
3
+1 für den Hinweis, dass einige der folgenden Aussagen, soweit die Spezifikation dies zulässt, falsch sind - DNS kann über SRV-Einträge durchaus einen Service-Port anzeigen. Es wird jedoch auch vorausgesetzt, dass der Kunde zuerst nach dem SRV-Datensatz fragen muss.
14.
2

Am einfachsten ist es, einen Reverse-Proxy zu verwenden und als Web-Proxy festzulegen. Sie können ein nginxoder apachedafür konfigurieren . Ich hatte in der Vergangenheit im Grunde das gleiche Problem und habe ein Tool entwickelt, um eine solche Konfiguration auf einfache Weise zu erreichen. Ergo: https://github.com/cristianoliveira/ergo

Ich habe dies verwendet und im Grunde funktioniert wie ein Zauber :)

Cristian Oliveira
quelle
0

Ein Ansatz zum Bereitstellen von zwei Webservern auf demselben Host besteht darin, dass beide Port 80 an zwei verschiedenen IPv6-Adressen überwachen. IPv6 legt offiziell fest, dass Sie einer Schnittstelle zwei Adressen zuweisen können, und es gibt genügend IPv6-Adressen, um dies zu tun, ohne dass die Adressen ausgehen.

Dies ist zukunftssicher und Ihre beiden Domains können jeweils AAAA-Einträge haben, die auf die verschiedenen IP-Adressen verweisen, sodass die Domains auf verschiedenen Webservern landen.

Wenn Sie auch eine einzelne IPv4-Adresse haben, können Sie über Port 80 der IPv4-Adresse einen Reverse-Proxy ausführen. Auf diese Weise können nur IPv4-Clients auf beide Webserver zugreifen. Der Reverse-Proxy-Ansatz funktioniert auch, wenn sich einige der Webserver auf demselben Host wie der Reverse-Proxy und einige der Webserver auf anderen Hosts befinden.

In einem solchen Setup example.orgkönnte Adressen haben 192.0.2.1und 2001:db8::1dabei example.netAdressen 192.0.2.1und 2001:db8::2.

Kasperd
quelle