Comment rediriger des DNS vers différents ports

Je possède le domaine "Arboristal.com". Je possède également tous les sous-domaines en privé sur arboristal.com. Comme lg.arboristal ou ft.arboristal.com.

sous mes paramètres DNS, Arboristal.com est prêt à aller à notre hébergeur web qui héberge actuellement notre site web.

j'ai trois serveurs chez moi qui fonctionnent tous sous une adresse IP publique. (71.82.237.27)

j'ai aussi trois sous-domaines de Arboristal.com pointant vers mon adresse IP.

Chaque des trois serveurs fonctionnent sur leurs propres ports (25565, 25566, 25567)

je veux que chaque sous-domaine pointe vers chaque port ouvert sur mon adresse IP.

malheureusement, lorsque vous essayez de vous connecter à l'un de ces serveurs en utilisant l'un des sous-domaines, il ne se connecte qu'au serveur pour lequel vous tapez le port.

Ma situation:

trois serveurs, chacun fonctionnant sur un port différent. (Tous les portforwarded de travail et serveurs)

Minecraft serveur un (25565)

Minecraft serveur deux (25566)

Minecraft serveur de trois (25567)

j'ai trois sous-domaines en cours d'exécution sur mon fournisseur DNS (webs.com)

mc.arboristal.com

tekkit.arboristal.com

pvp.artboristal.com

lorsque vous utilisez Minecraft pour se connecter à l'un de ceux-ci, il fait automatiquement par le port 25565, ce qui signifie que peu importe L'URL que vous tentez de se connecter à elle va toujours à mon IP avec le port 25565. Vous connecter à Minecraft server one. Vous pouvez taper le port manuellement, mais je préfère que ce soit aussi beau et professionnel que possible.

donc, maintenant que vous connaissez ma situation, y a-t-il un moyen que je puisse faire mc.arboristal.com, tekkit.arboristal.com, et pvp.arboristal.com tous vont à mon adresse IP sous des ports différents sans avoir à spécifier chaque port dans L'URL fournie pour se connecter sur la fin des utilisateurs?

je peux ajouter MX, UN (à l'Aide de celui-ci pour se connecter au serveur), CNAME et TXT enregistrements DNS settings

je peux aussi ajouter des serveurs de noms aux paramètres DNS si je dois utiliser un tiers comme mon fournisseur DNS. (Je suis prêt à le faire si nécessaire)

j'ai aussi un accès complet à mon routeur à 192.168.0.1 si quelque chose doit être configuré.

je viens juste d'apprendre comment internet Fonctionne vraiment la semaine dernière donc je ne suis pas sûr si quelque chose ici est réellement possible. J'ai aussi n'a pas le droit des informations sur le fonctionnement réel d'internet. Veuillez m'excuser pour toute information fausse que je pourrais supposer au sujet d'internet.

40
demandé sur ROMANIA_engineer 2013-09-26 01:00:50

2 réponses

Vous pouvez utiliser enregistrements SRV:

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

Service: le nom symbolique du service souhaité.

Proto: le protocole de transport du service souhaité; il s'agit généralement de TCP ou UDP.

Nom: le nom de domaine pour lequel cet enregistrement est valide, se terminant par un point.

durée de vie: DNS standard durée de vie du champ.

Classe: champ de classe standard DNS (Ce champ est toujours présent).

Priorité: la priorité de l'hôte cible, valeur faible signifie plus privilégiées.

Poids: une pondération relative pour les documents ayant la même priorité.

Port: le port TCP ou UDP sur lequel se trouve le service.

cible: le nom canonique de la machine fournissant le service, se terminant par un point.

Exemple:

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

donc ce que je pense que vous cherchez est d'ajouter quelque chose comme ça à votre DNS fichier hosts:

_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.

sur une note secondaire, je vous recommande fortement d'aller avec une société d'hébergement plutôt que d'héberger les serveurs vous-même. C'est juste demander des problèmes avec votre connexion à domicile (DDoS et bande passante/vitesse de connexion), mais c'est à vous de voir.

35
répondu Winter 2013-10-01 11:36:27

(ça fait longtemps que je n'ai pas fait ce truc. Merci de ne pas aveuglément supposons que les détails ci-dessous sont correctes. Mais j'espère que je ne suis pas trop trop de mal. :))


comme la réponse précédente l'indiquait, le client Minecraft ( à partir du 1.3.1) prend en charge enregistrement SRV recherche en utilisant le nom du service _minecraft et le nom de protocole _tcp, ce qui signifie que si votre fichier de zone ressemble ce...

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.

...ensuite, les clients Minecraft qui effectuent la recherche d'enregistrements SRV comme indiqué dans le journal des modifications utiliseront les ports 25566 et 25567 Avec préférence (40% du temps chacun) sur le port 25565 (20% du temps). Nous pouvons supposer que les clients de Minecraft qui font trouver et respecter ces notices SRV utiliseront le port 25565 comme d'habitude.


cependant, je dirais qu'il serait en fait plus "propre et professionnel" de le faire en utilisant une charge balancer comme Nginx. (Je choisis Nginx juste parce que je l'ai utilisé avant. Je ne dis pas qu'il est particulièrement bien adapté à cette tâche. Cela pourrait même être un mauvais choix pour une raison quelconque. Ensuite, vous n'avez pas à jouer avec votre DNS, et vous pouvez utiliser la même approche pour équilibrer la charge service, pas seulement ceux comme Minecraft qui se trouvent avoir fait le dur travail côté client pour chercher et respecter les dossiers SRV. Pour le faire à la manière de Nginx, vous lancez Nginx sur le arboristal.com machine avec quelque chose comme ce qui suit dans /etc/nginx/sites-enabled/arboristal.com:

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;
}

ici, nous contrôlons l'équilibrage de la charge nous-mêmes du côté du serveur (via Nginx), donc nous n'avons plus à nous inquiéter que des clients mal comportés puissent préférer le port 25565 aux deux autres ports. En fait, maintenant les clients vont parler à arboristal.com:25565! Mais l'écouteur sur ce port n'est plus un serveur Minecraft; c'est Nginx, secrètement proxying tout le trafic sur trois autres ports sur le même machine.

Nous équilibrage de charge basé sur un hash de l'adresse IP du client (ip_hash), de sorte que si un client se déconnecte et se reconnecte plus tard, il y a de bonnes chances qu'il soit reconnecté au même serveur Minecraft qu'avant. (Je ne sais pas combien cela compte pour Minecraft, ou comment les clients compatibles SRV sont programmés pour traiter cet aspect.)

notez que nous avions l'habitude d'exécuter un serveur Minecraft sur le port 25565; Je l'ai déplacé sur le port 25568 pour que nous puissions utiliser port 25565 pour le Load-balancer.

Un inconvénient de la Nginx méthode est qu'elle fait de Nginx un goulot d'étranglement dans votre système. Si Nginx tombe, alors les trois serveurs deviennent inaccessibles. Si une partie de votre système ne peut pas suivre le volume de trafic sur ce port unique, 25565, les trois serveurs deviennent flous. Et pour ne pas mentionner, Nginx est une nouvelle grande dépendance dans votre écosystème. Peut-être que vous ne voulez pas présenter encore un autre énorme morceau de logiciel avec un langage de configuration compliqué et surface d'attaque énorme. Je peux respecter ça.

possible avantage de la méthode Nginx est... qu'il fait Nginx un goulot d'étranglement dans votre système! Vous pouvez appliquer des politiques globales via Nginx, comme rejeter des paquets d'une certaine taille, ou répondre avec une page Web statique à des connexions HTTP sur le port 80. Vous pouvez aussi désactiver les ports 25566, 25567 et 25568 à partir D'Internet, puisque maintenant ils devraient être consultés par Nginx sur l'interface de loopback. Cela réduit quelque peu votre Surface d'attaque.

Nginx rend également plus facile d'ajouter de nouveaux serveurs Minecraft à votre backend; maintenant, vous pouvez simplement ajouter un server ligne de votre config et service nginx reload. En utilisant l'ancienne approche basée sur les ports, vous devrez ajouter un nouvel enregistrement SRV avec votre fournisseur DNS (et cela pourrait prendre jusqu'à 86400 secondes pour les clients de remarquer le changement), puis n'oubliez pas d'éditer votre pare-feu (par exemple,/etc/iptables.rules) permettre le trafic externe sur ce nouveau port.

Nginx vous évite également d'avoir à penser aux TTL DNS lors de modifications ops. Supposons que vous décidiez de diviser vos trois serveurs Minecraft sur trois machines physiques différentes avec des adresses IP différentes. En utilisant Nginx, vous pouvez faire cela complètement via les changements de configuration de votre server et vous pouvez garder ces nouvelles machines à l'intérieur de votre pare-feu (connecté uniquement à Nginx via une interface privée), et les changements prendront effet immédiatement, par définition. Alors que, en utilisant les enregistrements SRV, vous devrez réécrire votre fichier de zone à quelque chose comme ça...

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.

...et vous devrez laisser les trois nouvelles machines poking dehors votre pare-feu pour qu'ils puissent recevoir des connexions à partir d'Internet. Et vous aurez à attendre jusqu'à 86400 secondes pour que vos clients remarqué le changement, ce qui pourrait affecter la complexité de votre plan de déploiement. Et si vous avez été exécuter tout autre service (tel QU'un serveur HTTP) sur arboristal.com, maintenant vous devez les déplacer vers le mc1.arboristal.com machine en raison de la façon dont j'ai fait ce CNAME. J'ai fait cela seulement pour le bénéfice de ces clients Minecraft hypothétiques qui ne respectent pas les enregistrements SRV et vont toujours essayer de se connecter à arboristal.com:25565.


donc, je pense que les deux façons (SRV records et Nginx load-balancing) sont raisonnables, et votre choix dépendra de vos préférences personnelles. Je caricature les options comme:

  • enregistrements SRV: "j'ai juste besoin de travailler. Je ne veux pas de complexité. Et je connais et je fais confiance à mon fournisseur de DNS."
  • Nginx: "je prévois arboristal.com prendre le contrôle du monde, ou au moins passer à une plus grande machine un jour. Je n'ai pas peur d'apprendre un nouvel outil. C'est quoi un fichier de zone?"
5
répondu Quuxplusone 2017-12-28 19:28:51