Comment utiliser DNS / Noms d'hôte ou Autres moyens de résoudre un IP spécifique: Port

51

Il s'agit d'une question canonique sur la résolution DNS / noms d'hôtes en adresses IP / ports.

Exemple 1

J'utilise un serveur Web sur le port 80 et un autre sur le port 87. J'aimerais utiliser DNS pour que www.example.com accède au port 87. Comment puis-je accomplir cela à l'aide de DNS uniquement?

Exemple 2

J'exécute un service sur mon serveur sur un port non standard. Comment faire en sorte que les clients se connectent automatiquement à ce port non standard? Puis-je utiliser le DNS? Existe-t-il un support spécifique à une application où DNS pourrait indiquer l’IP et le port?

Exemple 3

Certains protocoles d’application prennent-ils spécifiquement en charge la détection du nom d’hôte et permettent-ils d’entreprendre des actions spéciales en fonction de ces informations? Existe-t-il d'autres questions sur Server Fault qui couvrent certaines d'entre elles?

Commandeering:Cette question concernait à l'origine l'exécution d'IIS et d'Apache sur le même serveur, mais les mêmes concepts peuvent être appliqués à tout logiciel serveur recevant des connexions de clients. Les réponses ci-dessous décrivent les problèmes techniques et les solutions liés à l’utilisation du support DNS et du protocole d’application pour attribuer un numéro de port à un client.

Tomasz Smykowski
la source
Concernant le troisième exemple, les lecteurs peuvent également souhaiter examiner notre question canonique sur la création de protocoles arbitraires tenant compte du nom d’hôte .
MadHatter soutient Monica

Réponses:

34

Vous ne pouvez pas utiliser le DNS pour pointer sur un port (à moins que le client ne prenne en charge les enregistrements SRV, la plupart ne le font pas).

Sites Web et protocoles avec en-têtes d'hôte

Pour ce faire, vous devrez mettre en place une méthode frontale. En règle générale, vous utiliserez un serveur Web frontal ou un logiciel proxy dédié pour transférer la connexion du port 80 au port! 80 en fonction du nom du serveur demandé dans l'en-tête. Certains pare-feu peuvent également transmettre en fonction de l'en-tête de l'hôte.

Enregistrements SRV

Certains clients prennent en charge la recherche des enregistrements SRV indiquant le nom d’hôte et le numéro de port du serveur pour le service spécifié (c’est-à-dire que l’utilisateur spécifie "exemple.com". Le client recherche un enregistrement SRV et obtient "serveur101.exemple.com" sur le port "255 "; puis se connecte à cela). Certains clients implémentent également cette fonctionnalité là où ce n’est pas nécessaire (mon dernier smartphone recherchait les enregistrements SRV lors de la configuration d’un nouveau compte de messagerie, par exemple).

Malheureusement, la prise en charge des enregistrements SRV est extrêmement rare. Seuls quelques protocoles notables exigent son support (Jabber / XMPP, Kerberos, LDAP, SIP) et tous les clients ne le prennent pas en charge même lorsqu'ils sont obligatoires.

Chris S
la source
15

Lorsque vous tapez http://www.domain.com dans votre navigateur, il est entendu que le port HTTP est sur 80. Par conséquent, il n'existe aucun moyen direct de faire pointer www.domain.com vers le port 87 si vous disposez déjà d'un service. en cours d'exécution sur ce port dans IIS.

Cela étant dit, il existe quelques "solutions de contournement".

  • Utilisez simplement http://www.domain.com:87/ pour vous connecter au port 87 (apache) sur votre serveur.
  • Vous pouvez configurer une redirection pour que http://www.domain.com/apache soit transféré (ou par procuration, si vous le souhaitez) vers www.domaine.com:87.
  • Vous pouvez configurer un "VirtualHost" pour que www.domain2.com soit toujours sur le port 80, partagé avec www.domain.com. Vous ne pouvez pas configurer cela sans modifier IIS.

Sam a raison, DNS est agnostique en matière de ports. Toute sorte de redirection de port se produit par le service qui s'exécute sur ce port. Par conséquent, vous devrez faire quelque chose avec IIS pour que cela se produise, si vous n'avez pas d'autre choix que de le laisser sur le port 80.

J'ai également résolu votre problème en utilisant mod_proxy sur Apache, sans savoir s'il existe un moyen de le faire avec IIS.

Dave Drager
la source
Ok, alors comment configurer le proxy sur IIS?
Tomasz Smykowski
2
S'il s'agit d'IIS7, vous pouvez utiliser le routage de demande d'application (ARR).
Scott Forsyth - MVP
1
Scott, avez-vous un bon lien pour la documentation sur ARR?
Jacques
12

J'ai bien peur que les noms de domaine ne puissent être associés qu'à une adresse IP et non à un port.

La plupart des serveurs Web, par exemple (Apache, IIS, etc.) vous permettent d’héberger deux domaines sur la même adresse IP en utilisant le fait que les demandes Web contiennent un champ d’en-tête d’hôte qui identifie le domaine dans la demande elle-même.

Si vous dites quel est le serveur Web que vous utilisez, je suis sûr que les gens peuvent vous diriger vers la documentation pertinente pour configurer votre serveur comme vous le souhaitez.

Phil
la source
C'est le but. J'utilise deux serveurs Web différents.
Omar Abid
12

Techniquement, vous pouvez utiliser des enregistrements SRV sur des serveurs DNS tels que définis dans la RFC 2782 pour indiquer aux navigateurs quels serveurs gèrent http sur quels ports pour un (sous) domaine:

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

Cela fonctionne bien pour de nombreux protocoles / services, en particulier lorsque l'utilisation des enregistrements SRV est déjà définie dans la spécification du protocole.

Cependant, comme l' indique ce " Hall of Shame ", la plupart des navigateurs / clients Web ne le prennent pas en charge (pour HTTP). Voir aussi pourquoi-ne-navigateurs-pas-utiliser-srv-records .

Le problème est essentiellement que SRV n’est pas inclus dans le protocole http comme une nécessité, ainsi chaque navigateur qui l’implémente résout les URL différemment des navigateurs qui ne le font pas.

Donc, vous ne devriez utiliser ceci que comme un équilibrage de charge optionnel, où il est indifférent de savoir quel serveur est choisi en termes de contenu. "Facultatif" car cela n'équilibrera pas une grande partie de la charge si seulement quelques clients l'implémentent.

JonnyJD
la source
6

Le DNS n’a pas la capacité de rediriger vers un port spécifique, tout ce qui importe au DNS est la résolution de l’adresse IP d’un nom, et inversement.

Certains services, tels que les fournisseurs DNS dynamiques IP, tels que NO-IP, fournissent un service qui peut vous aider à faire quelque chose de similaire pour contourner le blocage des adresses IP sur les services DNS domestiques.

Sam Cogan
la source
Certains bureaux d'enregistrement (GoDaddy) proposent le transfert de domaine via leurs serveurs parqués. Vous pouvez tenter le coup, mais c'est un peu ridicule. Alternativement, vous pouvez écrire votre propre navigateur Web qui recherche les enregistrements SRV, puis essayer de convaincre le monde entier de l'utiliser :)
Jason Antman
6

Pour pouvoir utiliser n'importe quel service (TBT) sur un port non standard et ne pas écrire de port dans l'URI, tout le monde peut utiliser les enregistrements SRV, définis dans la RFC 2782.

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

Tous les autres hôtes http de la zone seront toujours servis sur le port 80 par défaut

Badger paresseux
la source
3
+1 pour signaler que plusieurs des déclarations ci-dessous sont incorrectes, pour autant que la spécification le permette - le DNS peut absolument indiquer un port de service via des enregistrements SRV. Mais cela suppose également que le client sait qu'il doit d'abord demander l'enregistrement SRV.
mcauth
2

Le moyen le plus simple consiste à utiliser un proxy inverse et à le définir comme proxy Web. Vous pouvez configurer un nginxou apachepour cela. J'avais fondamentalement le même problème dans le passé et j'ai créé un outil permettant de réaliser une telle configuration de manière simple. Ergo: https://github.com/cristianoliveira/ergo

J'ai utilisé cela et fonctionne fondamentalement comme un charme :)

Cristian Oliveira
la source
0

Une approche permettant de déployer deux serveurs Web sur le même hôte consiste à les faire écouter tous les deux sur le port 80 sur deux adresses IPv6 différentes. IPv6 spécifie officiellement que vous pouvez attribuer deux adresses à une interface et qu'il existe suffisamment d'adresses IPv6 pour le faire sans manquer d'adresses.

Ceci est une preuve pour l'avenir, et vos deux domaines peuvent chacun avoir des enregistrements AAAA pointant vers les différentes adresses IP, ainsi les domaines se retrouvent sur des serveurs Web différents.

Si vous avez également une adresse IPv4 unique, vous pouvez utiliser le port 80 sur l'adresse IPv4 pour exécuter un proxy inverse. Ainsi, les clients IPv4 uniquement peuvent accéder à vos deux serveurs Web. L'approche de proxy inverse fonctionne même si certains des serveurs Web sont sur le même hôte que le proxy inverse et que certains des serveurs Web se trouvent sur d'autres hôtes.

Dans une telle configuration example.orgpourrait avoir des adresses 192.0.2.1et 2001:db8::1tout en example.neta des adresses 192.0.2.1et 2001:db8::2.

Kasperd
la source