it-swarm.com.de

So leiten Sie DNS auf verschiedene Ports um

Ich besitze die Domain "Arboristal.com". Ich besitze auch alle Subdomains privat auf arboristal.com. Wie lg.arboristal oder ft.arboristal.com.

Unter meinen DNS-Einstellungen wird Arboristal.com so eingestellt, dass er zu unserem Webhost wechselt, der derzeit unsere Website hostet.

Ich habe drei Server in meinem Haus, die alle unter einer öffentlichen IP-Adresse laufen. (71.82.237.27)

Ich habe auch drei Subdomains von Arboristal.com, die auf meine IP-Adresse verweisen.

Jeder der drei Server läuft auf eigenen Ports (25565, 25566, 25567)

Ich möchte, dass jede Subdomain auf jeden offenen Port meiner IP-Adresse verweist.

Wenn Sie versuchen, eine Verbindung zu einem dieser Server über eine der Unterdomänen herzustellen, stellt er leider nur eine Verbindung zu dem Server her, für den Sie den Port eingeben.

Meine Situation:

Drei Server, die jeweils an einem anderen Port ausgeführt werden. (Alle portforwarded und arbeiten als Server)

Minecraft Server One (25565)

Minecraft-Server zwei (25566)

Minecraft Server drei (25567)

Ich habe drei Subdomains, die auf meinem DNS-Anbieter (webs.com) ausgeführt werden.

mc.arboristal.com

tekkit.arboristal.com

pvp.artboristal.com

Wenn Sie Minecraft verwenden, um eine Verbindung zu einem dieser Verbindungen herzustellen, erfolgt dies automatisch über Port 25565. Dies bedeutet, dass unabhängig von der URL, mit der Sie versuchen, eine Verbindung herzustellen, diese IP-Adresse immer mit dem Port 25565 verbunden wird. Verbinden Sie sich mit Minecraft Server. Sie können den Port manuell eingeben, aber ich möchte, dass dies so gut und professionell wie möglich bleibt. 

Nun, da Sie meine Situation kennen, können Sie mc.arboristal.com, tekkit.arboristal.com und pvp.arboristal.com unter verschiedenen Ports an meine IP-Adresse weiterleiten, ohne jeden Port angeben zu müssen in der bereitgestellten URL, um auf der Seite des Benutzers eine Verbindung herzustellen?

Ich kann MX, A (mit diesem zum Herstellen einer Verbindung zum Server), CNAME und TXT zu DNS-Einstellungen hinzufügen

Ich kann den DNS-Einstellungen auch Nameserver hinzufügen, wenn ich einen Drittanbieter als meinen DNS-Anbieter verwenden muss. (Bin bereit wenn nötig zu tun) 

Ich habe auch vollen Zugriff auf meinen Router unter 192.168.0.1, wenn dort etwas konfiguriert werden muss. 

Ich habe gerade erst erfahren, wie das Internet in der letzten Woche wirklich funktioniert. Ich bin mir nicht sicher, ob hier überhaupt etwas möglich ist. Ich habe möglicherweise nicht die richtigen Informationen darüber, wie das Internet tatsächlich funktioniert. Bitte verzeihen Sie mir falsche Angaben, die ich über das Internet vermute.

42
Swordstoo

Sie können SRV-Datensätze verwenden :

_service._proto.name. TTL class SRV priority weight port target.

Service: der symbolische Name des gewünschten Services.

Proto: das Transportprotokoll des gewünschten Dienstes; Dies ist normalerweise entweder TCP oder UDP.

Name: Der Domänenname, für den dieser Datensatz gültig ist und mit einem Punkt endet.

TTL: Standard-DNS-Time-to-Live-Feld.

Class: Standard-DNS-Klassenfeld (dies ist immer IN).

Priorität: die Priorität des Zielhosts, niedrigerer Wert bedeutet bevorzugter.

Weight: Eine relative Gewichtung für Datensätze mit derselben Priorität.

Port: der TCP - oder UDP-Port, auf dem der Dienst gefunden werden soll.

Target: der kanonische Hostname des Computers, der den Dienst bereitstellt, und endet mit einem Punkt.

Beispiel:

_sip._tcp.example.com. 86400 IN SRV 0 5 5060 sipserver.example.com.

Also, was ich denke, Sie suchen, ist so etwas zu Ihrer DNS-Hosts-Datei hinzuzufügen :

_sip._tcp.arboristal.com. 86400 IN SRV 10 40 25565 mc.arboristal.com.
_sip._tcp.arboristal.com. 86400 IN SRV 10 30 25566 tekkit.arboristal.com.
_sip._tcp.arboristal.com. 86400 IN SRV 10 30 25567 pvp.arboristal.com.

Nebenbei gesagt, ich empfehle Ihnen dringend, mit einem Hosting-Unternehmen zu gehen, anstatt die Server selbst zu hosten. Es ist nur ein Problem mit Ihrer Heimverbindung (DDoS und Bandbreite/Verbindungsgeschwindigkeit), aber es liegt an Ihnen.

36
Winter

(Es ist schon eine Weile her, dass ich dieses Zeug gemacht habe. Bitte nimm nicht blindlings an, dassalledie unten stehenden Details korrekt sind. Aber ich hoffe, ich bin nichttoopeinlich falsch :))


Wie in der vorherigen Antwort angegeben, unterstützt der Minecraft-Client ( ab 1.3.1 ) SRV-Datensatz die Suche unter Verwendung des Dienstnamens _minecraft Und des Protokollnamens _tcp, Das heißt, wenn Ihre Zonendatei so aussieht ...

arboristal.com.                 86400 IN A   <your IP address>
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 20 25565 arboristal.com.
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25566 arboristal.com.
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25567 arboristal.com.

... dann verwenden Minecraft-Clients, die eine SRV-Datensatzsuche durchführen, wie im Änderungsprotokoll angegeben, die Ports 25566 und 25567 (jeweils 40% der Zeit) gegenüber Port 25565 (20% der Zeit). Wir können davon ausgehen, dass Minecraft-Clients, dienotdiese SRV-Einträge finden und respektieren, wie gewohnt Port 25565 verwenden.


Ich würde jedoch argumentieren, dass es "sauberer und professioneller" wäre, einen Load Balancer wie Nginx zu verwenden. (Ich wähle Nginx nur, weil ich es schon einmal benutzt habe. Ich behaupte nicht, dass es für diese Aufgabe einzigartig ist. Es könnte aus irgendeinem Grund sogar einebadWahl sein. ) Dann müssen Sie sich nicht mit Ihrem DNS anlegen, und Sie können den gleichen Ansatz verwenden, umanyservice auszugleichen, nicht nur solche wie Minecraft, die zufällig vorhanden sind die harte clientseitige Arbeit erledigt, um SRV-Datensätze nachzuschlagen und zu respektieren. Um dies auf die Nginx-Art und Weise zu tun, würden Sie Nginx auf dem arboristal.com - Computer mit etwas wie dem Folgenden in /etc/nginx/sites-enabled/arboristal.com Ausführen:

upstream minecraft_servers {
    ip_hash;
    server 127.0.0.1:25566 weight=1;
    server 127.0.0.1:25567 weight=1;
    server 127.0.0.1:25568 weight=1;
}
server {
    listen 25565;
    proxy_pass minecraft_servers;
}

Hier steuern wir den Lastausgleich selbst auf der Serverseite (über Nginx), sodass wir uns keine Sorgen mehr machen müssen, dass Clients mit schlechtem Verhalten den Port 25565 den anderen beiden Ports vorziehen könnten. Tatsächlich sprechen jetztallclients mit arboristal.com:25565! Der Listener an diesem Port ist jedoch kein Minecraft-Server mehr. Es ist Nginx, der den gesamten Datenverkehr heimlich auf drei andere Ports auf demselben Computer überträgt.

Der Lastausgleich basiert auf einem Hash der IP-Adresse des Clients (ip_hash). Wenn ein Client die Verbindung trennt und später wieder herstellt, besteht eine gute Chance, dass er wieder mit demselben Minecraft-Server verbunden wird, den er hatte Vor. (Ich weiß nicht, wie wichtig dies für Minecraft ist oder wie SRV-fähige Clients für diesen Aspekt programmiert sind.)

Beachten Sie, dass wir einen Minecraft-Server auf Port 25565 ausgeführt haben. Ich habe es auf Port 25568 verschoben, damit wir Port 25565 für den Load-Balancer verwenden können.

Ein möglicher Nachteil der Nginx-Methode besteht darin, dass Nginx zu einem Engpass in Ihrem System wird. Wenn Nginx ausfällt, sind alle drei Server nicht mehr erreichbar. Wenn ein Teil Ihres Systems nicht mit dem Verkehrsaufkommen auf diesem einzelnen Port, 25565, Schritt halten kann, werden alle drei Server unzuverlässig. Und ganz zu schweigen davon, dass Nginx eine große neue Abhängigkeit in Ihrem Ökosystem darstellt. Vielleicht möchten Sie keine weitere massive Software mit einer komplizierten Konfigurationssprache und einer riesigen Angriffsfläche einführen. Das kann ich respektieren.

Ein möglicherVorteilder Nginx-Methode ist ... dass sie Nginx zu einem Engpass in Ihrem System macht! Sie können globale Richtlinien über Nginx anwenden, z. B. Pakete über einer bestimmten Größe ablehnen oder mit einer statischen Webseite auf HTTP-Verbindungen an Port 80 antworten. Sie können auch die Ports 25566, 25567 und 25568 aus dem Internet ausschließen, da diese jetzt vorhanden sind sollte über die Loopback-Schnittstelle mitonlyvon Nginx gesprochen werden. Dies reduziert die Angriffsfläche etwas.

Nginx macht es auch einfacher, Ihrem Backend neue Minecraft-Server hinzuzufügen. Jetzt können Sie einfach eine server -Zeile zu Ihrer Konfiguration hinzufügen und service nginx reload. Bei Verwendung des alten portbasierten Ansatzes müssten Sie einen neuen SRV-Eintrag bei Ihrem DNS-Anbieter hinzufügen (und es kann bis zu 86400 Sekunden dauern, bis Clients die Änderung bemerken) und dannalsoDenken Sie daran, Ihre Firewall zu bearbeiten (z. B. /etc/iptables.rules), um externen Datenverkehr über diesen neuen Port zuzulassen.

Nginx befreit Sie auch von der Notwendigkeit, DNS-TTLs zu berücksichtigen, wenn Sie Änderungen an Operationen vornehmen. Angenommen, Sie möchten Ihre drei Minecraft-Server auf drei verschiedene physische Maschinen mit unterschiedlichen IP-Adressen aufteilen. Mit Nginx können Sie dies vollständig über Konfigurationsänderungen an Ihren server Zeilen tun und diese neuen Maschinen in Ihrer Firewall belassen (nur über eine private Schnittstelle mit Nginx verbunden). Die Änderungen werden sofort wirksam. per Definition. Bei Verwendung von SRV-Einträgen müssen Sie Ihre Zonendatei in etwas Ähnliches umschreiben ...

arboristal.com.                 86400 IN CNAME mc1.arboristal.com.
mc1.arboristal.com.             86400 IN A   <a new machine's IP address>
mc2.arboristal.com.             86400 IN A   <a new machine's IP address>
mc3.arboristal.com.             86400 IN A   <a new machine's IP address>
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 20 25565 mc1.arboristal.com.
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25565 mc2.arboristal.com.
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25565 mc3.arboristal.com.

... und Sie müssen alle drei neuen RechneraußerhalbIhrer Firewall stecken lassen, damit sie Verbindungen aus dem Internet empfangen können.UndSie müssen bis zu 86400 Sekunden warten, bis Ihre Kunden die Änderung bemerken, die sich auf die Komplexität Ihres Rollout-Plans auswirken kann.Undwenn Sie andere Dienste (wie einen HTTP-Server) auf arboristal.com Ausgeführt haben, müssen Sie diese jetzt auf mc1.arboristal.com Verschieben. ] Maschine wegen wie ich das gemacht habe CNAME. Ich habe das nur zum Nutzen der hypothetischen Minecraft-Kunden getan, die SRV-Datensätze nicht respektieren und weiterhin versuchen, eine Verbindung zu arboristal.com:25565 Herzustellen.


Daher halte ich beide Möglichkeiten (SRV-Datensätze und Nginx-Lastausgleich) für angemessen und Ihre Wahl hängt von Ihren persönlichen Vorlieben ab. Ich karikiere die Optionen als:

  • SRV-Aufzeichnungen: "Ich brauche es nur, um zu funktionieren. Ich möchte keine Komplexität. Und ich kenne meinen DNS-Anbieter und vertraue ihm."
  • Nginx: "Ich gehe davon aus, dass arboristal.com Die Welt erobert oder zumindest eines Tages zu einem größeren Computer wechselt. Ich habe keine Angst, ein neues Tool zu lernen. Was ist eine Zonendatei?"
10
Quuxplusone

Mögliche Lösungen:

  1. Verwenden Sie nginx auf dem Server als Proxy, der Port A überwacht und Port B oder C multiplext.

  2. Wenn Sie AWS verwenden, können Sie die Lastausgleichsfunktion verwenden, um die Anforderung basierend auf dem Host auf einen bestimmten Port umzuleiten.

0
Nadav B