Je suis relativement nouveau dans l'administration de réseau et je suis donc déjà ravi d'avoir réussi à configurer un enregistrement DNS.
Maintenant, je suis un peu confus, car je voudrais avoir cette URL:
http://www.example.org:8080/fetch/characters/
être effectivement atteint par cette
http://www.example.org/fetch/characters/
Ainsi, les utilisateurs peuvent accéder au service sur le port 8080 sans avoir à définir explicitement le port.
Comment puis-je faire ceci? Ai-je besoin d'une application spéciale sur mon serveur? Ou tout élément de redirection à appliquer aux demandes?
networking
domain-name-system
http
request
xetra11
la source
la source
Réponses:
Les enregistrements DNS ne peuvent pas pointer vers des ports (à quelques exceptions près, qui ne s'appliquent pas ici).
Si vous disposez d'un service Web en écoute sur le port 8080 et que vous souhaitez l'atteindre sans spécifier ce port, vous avez 3 options:
:8080
partie dans leurs barres d'adresse après la redirection.la source
Les serveurs Web écoutent le port TCP 80 par défaut. Si vous ne voulez pas taper explicitement le numéro de port dans l'URL, vous avez quelques options:
Vous pouvez reconfigurer votre serveur Web pour utiliser le port 80 au lieu du port 8080. Ceci est recommandé pour les serveurs Web comme nginx ou Apache mais pas pour les serveurs Web comme Gunicorn. Cette option n'est également pas toujours possible car ce port peut déjà être utilisé par un autre serveur Web.
De plus, lorsque votre serveur se trouve derrière une passerelle NAT, il ne possède pas l'adresse IP publique et la combinaison de cette adresse NAT publique et du port 80 peut déjà être transmise à un autre serveur Web.
Vous pouvez placer un serveur proxy inverse devant votre serveur Web qui accepte le trafic sur le port TCP 80 et l'envoie à votre serveur Web sur le port TCP 8080. Cela fonctionnera également si le port 80 est déjà utilisé. Placez simplement le serveur proxy inverse devant les deux serveurs Web, en les faisant tous deux écouter des ports autres que 80.
Afin de fournir une aide meilleure et plus détaillée sur l'option qui pourrait être la meilleure et les limitations, etc., nous devons en savoir plus sur votre configuration. Espérons que cette explication ait déjà un peu clarifié les choses.
la source
Réponse simple, liée au niveau de la question
Ignorant les utilisations exotiques du DNS et inversant également la recherche DNS (non pertinent pour la question), presque toute utilisation du DNS est de la forme:
Une fois que le client a contacté le serveur, le serveur lui-même prendra le relais et le système DNS disparaîtra de l'image.
Cela signifie que le système DNS n'a pas besoin de fournir des informations sur les ports, et il ne le fait presque jamais. Ainsi, bien que l'objectif de la question soit valide, et souvent fait, ce n'est pas réellement le système DNS qui le fait. C'est pourquoi vous ne pouvez pas vous en sortir :)
L'idée est qu'une fois que votre client peut localiser la machine ou le serveur spécifique qu'il recherche, il appartient à cette machine d'écouter sur tous les ports qu'il choisit et d'accepter / refuser / répondre à tous les protocoles sur tous les ports configurés.
Par exemple, les services Web HTTP sont généralement fournis sur le port 80. Cela signifie qu'une fois que le client connaît l'IP d'une machine, il peut supposer que l'envoi d'un message au port 80 entraînera la lecture / la réponse de ce message par le service Web de cette machine. Mais il ne doit pas en être ainsi. Si le serveur est configuré pour écouter les demandes Web entrantes sur le port 9000, tout client capable d'accéder au port 9000 pourra accéder à son service Web. Si le serveur se trouve derrière un proxy / NAT / routeur qui redirige le port 10000 vers le port 9000 et que le client envoie une demande Web sur le port 10000, le serveur la recevra sur le port 9000 et répondra également.
Redirection / mappage au sein du serveur Web
Vous avez posé des questions sur le mappage de redirection ou la réécriture dans un commentaire. Ce sont des fonctions qu'un serveur Web peut effectuer. Fondamentalement, vous pouvez configurer le serveur Web (ou la plupart / plusieurs serveurs Web) pour gérer la façon dont il gère l'URL qu'il reçoit dans une demande. Ainsi, il peut modifier en interne l'URL à la réception pour que les différentes URL soient traitées de la même manière, ou corriger les fautes de frappe courantes (mappage), ou il peut en fait répondre pour dire au client lui-même de demander une deuxième fois, en utilisant une URL de remplacement différente (réorienter).
Celles-ci ont leurs utilisations et pourraient en principe gérer votre cas d'utilisation, mais elles ne semblent pas être la "bonne" solution pour vous, pour ces raisons:
Cependant, si vous voulez une redirection "intelligente", où seules certaines requêtes sont redirigées vers 8080, cela pourrait être la voie à suivre, car la redirection peut inclure une logique pour décider quelles URL doivent être redirigées, tandis que le mappage de port (ci-dessous) mapperait tout .
Comment le faire correctement
La réponse à votre question est que vous souhaitez que le serveur Web réponde aux demandes Web que le client envoie au port par défaut (80/443), mais que le serveur reçoit réellement sur le port 8080.
Cela signifie que, comme vous pouvez le voir, vous avez besoin de quelque chose entre les deux qui mappe les ports entre le client et le serveur . De cette façon, le client envoie sur le port 80 (port par défaut utilisé par les navigateurs Web), mais il est en réalité reçu sur le port 8080 par le serveur Web. Bien sûr, vous devrez configurer le serveur Web pour écouter sur le port 8080, car ce n'est pas standard, mais c'est facile et tout serveur Web devrait pouvoir spécifier ses ports d'écoute.
La façon la plus courante de le faire serait dans le routeur / pare-feu, via le mappage de port.
En termes simples, pour ce faire, le routeur se voit imposer une règle selon laquelle tout ce qui a reçu une adresse IP de destination et un port de destination = 80 doit être transmis au LAN avec le port de destination changé à 8080 à la place. Ni le serveur Web ni le client ne seront au courant du changement (il est géré à 100% par le routeur), il sera donc 100% transparent pour les deux. Le client n'aura pas ": 8080" dans son URL et n'aura pas besoin de rediriger quoi que ce soit, car il interroge le port 80, et le serveur Web peut ignorer le port 80 et écouter uniquement sur 8080, car il n'obtient jamais de requêtes sur le port 80 .
Si vous voulez une méthode simple et directe, semblable à ce que ferait un "DNS pour les ports", c'est probablement l'équivalent le plus proche de ce que vous demandez dans votre question.
la source
Tu ne peux pas.
Je veux dire, techniquement, cela pourrait être fait. DNS est célèbre pour pouvoir soumettre un nom de domaine et obtenir une adresse IP. Cependant, j'ai étudié un peu le protocole DNS, et vraiment DNS est techniquement capable d'agir comme un mécanisme de requête / réponse pour bien plus que des noms de domaine et des adresses IP. Une approche possible serait d'utiliser un enregistrement de ressource DNS qui n'est pas du type A ou AAAA typique, tel qu'un enregistrement TXT (qui est techniquement juste du texte et pourrait être utilisé pour n'importe quoi) ou peut-être un enregistrement SRV ou tout autre type d'enregistrement de ressource plus récent que vous choisissez.
Si vous créez votre propre logiciel (client et serveur), il peut n'y avoir aucune raison technique de ne pas faire une telle chose, sauf que vous savez que certaines personnes utilisent des sociétés d'hébergement DNS et les limitent à utiliser uniquement certains types d'enregistrement. C'est regrettable, car les personnes qui gèrent leurs propres serveurs DNS ont certainement assez de flexibilité pour de telles choses.
Cependant, si vous ne créez pas votre propre protocole réseau (par exemple, si vous souhaitez utiliser HTTP), vous risquez de rencontrer un problème majeur, à savoir que les logiciels existants n'utiliseront pas votre solution personnalisée, sauf si vous utilisez solutions déjà établies. Ce sera la barrière. Pas une impossibilité technique. Une barrière sociale: pouvez-vous convaincre tout le monde de faire les choses à votre façon?
Maintenant que j'ai expliqué pourquoi vous ne pouvez pas faire cela, cependant, j'ai peut-être une solution pour ce que vous recherchez. Tout d'abord, examinons pourquoi nous avons même des adresses IP et des ports.
Les adresses IP et les ports font des choses différentes. L'adresse IP a pour but de répondre aux objectifs des couches 2 et 3 du modèle OSI de communications réseau. Le but de l'adresse IP est d'identifier à quel ordinateur le trafic est censé aller. Le fait que nous puissions utiliser un numéro de port à cette fin, en demandant aux pare-feu / routeurs d'enquêter sur les numéros de port afin d'effectuer NAPT (Network Address Port-based Translation, également parfois appelé PNAT ou simplement NAT), est une technique plus récente qui utilise un ressource (information), mais ne faisait pas partie de la conception originale. Si nous nous éloignons de cet "abus" des numéros de port pendant une minute et considérons la conception originale, nous pourrons peut-être trouver une solution plus simple. De par la conception d'Internet, les machines devaient être trouvées à l'aide d'adresses IP.
Le but d'un "numéro de port", utilisé par TCP et UDP et certaines alternatives, est de pouvoir suivre les conversations individuelles. Cela permet d'aligner la communication avec les programmes en cours d'exécution. Ainsi, si une machine reçoit du trafic sur le port TCP 80, la machine saura que le trafic réseau est destiné à être utilisé par le programme qui est le serveur Web. Si un navigateur Web télécharge plusieurs graphiques simultanément, des combinaisons de numéros de "port source" et de "port de destination" peuvent garder une trace des données destinées à quel graphique, afin que ces conversations simultanées puissent se produire sans mélanger les données.
Maintenant, je pense que vous avez accès à un serveur DNS, et il vous semble que vous pensez que l'administration DNS serait pratique pour pouvoir gérer un peu plus le routage du trafic. Mais DNS ne semble pas pouvoir vous aider à obtenir un numéro de port. Que pouvez-vous faire?
Considérez IPv6. IPv6 vous permet d'avoir beaucoup plus d'adresses IP. De plus, contrairement à certaines implémentations d'IPv4, les appareils qui utilisent IPv6 peuvent généralement facilement prendre en charge plusieurs adresses IPv6 actives en même temps. Donc, si vous souhaitez avoir trois protocoles réseau différents sur un même ordinateur, vous pouvez attribuer au moins trois adresses IPv6 différentes au même ordinateur. Et puis, vous pouvez faire les manigances de routage que vous aimez avec ces adresses IPv6.
Ensuite, vous pouvez utiliser le type d'enregistrement de ressource AAAA pour attribuer un nom à cette adresse IPv6, que votre conception de réseau peut traiter comme étant effectivement dédiée au service spécifique sur l'ordinateur spécifique que vous souhaitez.
Wallah, vous avez maintenant DNS pointant efficacement sur le logiciel, et vous avez atteint cet objectif sans avoir besoin d'essayer de faire en sorte que DNS pointe vers un numéro de port, ce qui ne fonctionne pas bien simplement parce que cette fonctionnalité se trouve ne pas être courante prise en charge.
Objection possible:
Et si vous vous sentez coincé avec IPv4 et pensez que IPv6 n'est pas pris en charge, je vous encourage à essayer de résoudre ce problème. Ce problème sera probablement plus facile à résoudre (peut-être en utilisant une sorte de tunneling), et finira probablement par être un correctif plus gratifiant une fois que vous l'avez implémenté.
la source