web-dev-qa-db-fra.com

Comment utiliser DNS / Hostnames ou Autres façons de résoudre une adresse IP spécifique: Port

Ceci est une question canonique sur la résolution DNS/Hostnames vers IPs/Ports

Exemple 1

J'exécute un serveur Web sur le port 80 et un autre sur le port 87. Je voudrais utiliser DNS pour que www.example.com passe au port 87. Comment puis-je accomplir cela en utilisant DNS uniquement?

Exemple 2

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

Exemple 3

Certains protocoles d'application prennent-ils spécifiquement en charge la reconnaissance du nom d'hôte et autorisent-ils des actions spéciales en fonction de ces informations? Y a-t-il d'autres questions sur la défaillance du serveur qui couvrent certaines d'entre elles?

Commandeering: Cette question demandait à l'origine d'exécuter IIS et 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 solutions d'utilisation du DNS et de la prise en charge du protocole d'application pour attribuer un numéro de port à un client pour se connecter.

51
Tomasz Smykowski

Vous ne pouvez pas utiliser le DNS pour pointer vers un port (sauf si le client prend en charge les enregistrements SRV, la plupart ne le font pas).

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

Vous devrez mettre en place une méthode frontale pour ce faire. En règle générale, vous utilisez 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 Host.

Enregistrements SRV

Certains clients prennent en charge les recherches d'enregistrements SRV qui indiquent 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 "example.com", le client recherche un enregistrement SRV et obtient "server101.example.com" sur le port "255 "; puis se connecte à cela). Certains clients l'implémentent également là où cela n'est pas nécessaire (mon dernier smartphone rechercherait les enregistrements SRV lors de la configuration d'un nouveau compte de messagerie par exemple).

Malheureusement, la prise en charge des enregistrements SRV est très rare. Seuls quelques protocoles notables exigent sa prise en charge (Jabber/XMPP, Kerberos, LDAP, SIP) et tous les clients ne la prennent pas en charge même lorsqu'ils sont mandatés.

34
user9517

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 pointer www.domain.com vers le port 87 si vous disposez déjà d'un service exécuté sur ce port dans IIS.

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

  • Utilisez simplement http://www.domain.com:87/ - cela se connectera au port 87 (Apache) sur votre serveur.
  • Vous pouvez configurer une redirection, de sorte que http://www.domain.com/Apache transfère (ou un proxy, si vous voulez vous faire plaisir) à www.domain.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, le DNS est agnostique en ce qui concerne les 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 contourné votre situation en utilisant mod_proxy sur Apache, je ne sais pas s'il existe un moyen de le faire avec IIS.

15
Dave Drager

J'ai 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 permet d'avoir deux domaines hébergés sur la même adresse IP en utilisant le fait que les requêtes 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 indiquer la documentation appropriée pour configurer votre serveur comme vous le souhaitez

12
Phil

Techniquement, vous pouvez utiliser enregistrements SRV sur les serveurs DNS tels que définis dans 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-les-navigateurs-n'utilisent-pas-les enregistrements srv .

L'accord est fondamentalement que SRV n'est pas inclus dans le protocole http comme un must, donc chaque navigateur qui l'implémente résout les URL différemment des navigateurs qui ne le font pas.

Vous ne devez donc l'utiliser que comme un équilibrage de charge facultatif, où il n'est pas pertinent de choisir le serveur en termes de contenu. "Facultatif" car il n'équilibrera pas une grande partie de la charge si seulement quelques clients l'implémentent.

12
JonnyJD

Pour utiliser le service any (TBT) sur un port non standard et n'écrivez pas le port en URI, tout le monde peut utiliser des 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 dans la zone seront toujours servis sur le port par défaut 80

6
Lazy Badger

DNS n'a pas la capacité de rediriger vers un port spécifique, tout le DNS se soucie de la résolution d'adresse IP d'un nom, et vice versa.

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

6
Sam Cogan

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

J'utilise ceci et fonctionne comme un charme :)

2
Cristian Oliveira

Une approche pour déployer deux serveurs Web sur le même hôte consiste à les é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 il y a suffisamment d'adresses IPv6 pour que vous puissiez le faire sans manquer d'adresses.

Ceci est à l'épreuve du temps, et vos deux domaines peuvent chacun avoir des enregistrements AAAA pointant vers les différentes adresses IP, de sorte que les domaines se retrouvent sur des serveurs Web différents.

Si vous avez également une seule adresse IPv4, vous pouvez utiliser le port 80 sur l'adresse IPv4 pour exécuter un proxy inverse. De cette façon, les clients IPv4 uniquement peuvent accéder à vos deux serveurs Web. L'approche du proxy inverse fonctionne même si certains des serveurs Web se trouvent 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.org pourrait avoir des adresses 192.0.2.1 et 2001:db8::1 tandis que example.net a des adresses 192.0.2.1 et 2001:db8::2.

0
kasperd