Comment rendre le protocole foo compatible avec le nom d'hôte?

10

Il s'agit d'une question canonique sur la connaissance du nom d'hôte et le proxy.

Je sais que certains protocoles sont compatibles avec le nom d'hôte; c'est-à-dire que lorsque je me connecte au serveur HTTP, www.example.comil sait que je veux www.example.comle service HTTP, pas celui www.example.net, même s'ils sont sur la même adresse IP. Comment puis-je faire cela pour le protocole foo ?

(Note temporaire: cette question apparaît à la suite de cette méta-discussion .)

Chapelier Fou
la source

Réponses:

14

Pour comprendre ce qui se passe, vous devez en savoir un peu plus sur le DNS.

Lorsqu'un client souhaite se connecter à un service sur un hôte donné, il recherche le nom d'hôte via son infrastructure DNS locale et reçoit une adresse IP en réponse. Il se connecte ensuite à cette adresse IP et demande le service de la manière prescrite par le procotol qu'il est conçu pour implémenter.

Dans certains cas, une partie de ce procotol implique un deuxième envoi du nom d'hôte recherché à l'origine, qui dans ce cas est envoyé au serveur plutôt qu'à l'infrastructure DNS. Dans le cas de HTTP, cela a été ajouté dans le cadre de HTTP / 1.1, dans la RFC 2616 ; dans le cas de HTTPS, cela a été implémenté en tant qu'indication de nom de serveur (SNI) dans la RFC 4366 ; et dans le cas de FTP, cela a été ajouté par la HOSTcommande, dans la RFC 7151 (mais voir la mise en garde plus tard). Si un tel deuxième envoi ne se produit pas, le serveur n'a aucun moyen de savoir quel nom d'hôte le client a envoyé à son DNS local afin d'obtenir l'adresse IP du serveur.

Notez que dans tous les cas, une modification du protocole était nécessaire pour effectuer ce deuxième envoi, et ainsi rendre l'interaction client-serveur sensible au nom d'hôte. Une fois le protocole modifié, le code du serveur a dû être mis à jour pour l'implémenter. Et enfin, les clients devaient être mis à jour pour parler du nouveau protocole aux serveurs. Cette dernière étape peut être particulièrement lente; dans le cas de SNI, Internet Explorer sur Windows XP ne l'a jamais implémenté, donc le protocole ne pouvait pas être utilisé tant qu'il y avait encore un nombre important d'utilisateurs IE-on-XP, et il a fallu environ dix ans pour en avoir assez mourir et / ou obtenir des mises à niveau que SNI est déployable de manière fiable.

Voilà donc ce qu'il faut pour rendre un protocole non sensible au nom d'hôte sensible au nom d'hôte. Il ne s'agit pas d' un simple paramètre d'indicateur ou d'un changement de configuration. Nous avons des réponses spécifiques au protocole qui traitent de la situation et des mesures d'atténuation possibles, pour ce protocole en particulier: pour SSH (et donc aussi SFTP) et pour FTP (ce qui souligne que le HOSTsupport de FTP est actuellement dans le patchy -support phase, et ne peut donc pas encore être invoqué).

La réponse courte est que si votre protocole n'implémente pas actuellement la reconnaissance du nom d'hôte, avec une bonne prise en charge parmi les clients et les serveurs, oubliez-le: ce n'est pas quelque chose que vous pouvez faire.

Chapelier Fou
la source
6
Je pense que je tempérerais cette réponse par le fait que certains protocoles sont pour des produits flambant neufs ou sont suffisamment locaux pour qu'une seule entreprise contrôle toutes les instances de serveurs et de clients. Dans ces cas, l'ajout de commandes ou de paquets de nom d'hôte est très simple et très facile à implémenter. Vous décrivez la difficulté d'ajouter une nouvelle fonctionnalité à un protocole existant qui est déjà largement utilisé par de nombreux fournisseurs.
JPhi1618
4
@ JPhi1618 Je vous entends, mais à mon avis, tout "protocole" créé et mis en œuvre par une seule entreprise, et non intégré dans un RFC, n'est pas du tout un protocole; c'est juste une décision d'ingénierie interne, et je n'ai aucun intérêt pour ces produits propriétaires. Comme vous le faites remarquer, le fournisseur peut changer instantanément les choses pour implémenter la reconnaissance du nom d'hôte s'il le souhaite; mais comme personne d' autre que le fournisseur ne peut le faire, je ne vois pas en quoi cela intéresse beaucoup le PO.
MadHatter
Je pense que la question pertinente est de savoir si vous concevez un nouveau protocole ou si vous souhaitez modifier un protocole existant.
Barmar
Un protocole propriétaire est toujours un protocole.
Barmar
@Barmar, ce n'est probablement pas une bonne discussion pour entrer ici. Cette question concerne la modification des protocoles existants et, comme je l'ai indiqué précédemment, si la décision / le protocole d'ingénierie propriétaire bazne peut être modifié que par son propriétaire et son exécuteur unique, la seule façon de le rendre sensible au nom d'hôte est de faire appel au propriétaire. Cela ne fait pas une réponse SF intéressante, et d'ailleurs n'est pas (à mon avis) sur le sujet. « Comment puis-je concevoir un protocole compatible avec le nom d'hôte » est une autre question, et ce n'est pas celle que je souhaite poser.
MadHatter