¿Cómo hago para que el protocolo tenga en cuenta el nombre de host?

10

Esta es una pregunta canónica sobre la conciencia del nombre de host y la representación.

Sé que algunos protocolos reconocen el nombre de host; es decir, cuando me conecto al servidor HTTP www.example.com, sabe que quiero www.example.comel servicio HTTP, no www.example.netel suyo, aunque estén en la misma dirección IP. ¿Cómo puedo hacer esto para el protocolo foo ?

(Nota temporal: esta pregunta aparece de conformidad con esta meta discusión ).

MadHatter
fuente

Respuestas:

14

Para comprender lo que está sucediendo, necesita saber un poco sobre DNS.

Cuando un cliente desea conectarse a un servicio en un host determinado, busca el nombre del host a través de su infraestructura de DNS local y recibe una dirección IP en respuesta. Luego se conecta a esa dirección IP y solicita el servicio de la manera prescrita por el protocolo para el que está diseñado.

En algunos casos, parte de ese protocolo implica un segundo envío del nombre de host buscado originalmente, que en este caso se envía al servidor en lugar de a la infraestructura de DNS. En el caso de HTTP, esto se agregó como parte de HTTP / 1.1, en RFC 2616 ; en el caso de HTTPS, esto se implementó como Indicación de nombre de servidor (SNI) en RFC 4366 ; y en el caso de FTP, esto fue agregado por el HOSTcomando, en RFC 7151 (pero ver advertencia posterior). Si no se produce dicho segundo envío, el servidor no tiene forma de saber qué nombre de host alimentó el cliente a su DNS local para obtener la dirección IP del servidor.

Tenga en cuenta que en todos los casos se requirió un cambio en el protocolo para realizar este segundo envío y, por lo tanto, hacer que la interacción cliente-servidor sea consciente del nombre de host. Después de que se cambió el protocolo, el código del servidor tuvo que actualizarse para implementarlo. Y finalmente, los clientes tuvieron que actualizarse para hablar del nuevo protocolo a los servidores. Ese último paso puede ser particularmente lento; en el caso de SNI, Internet Explorer en Windows XP nunca lo implementó, por lo que no se pudo confiar en el protocolo mientras todavía existía un número significativo de usuarios de IE-on-XP, y se han necesitado cerca de diez años para que sea suficiente. muere y / u obtén actualizaciones que SNI es confiablemente implementable.

Entonces, eso es lo que se necesita para que un protocolo que no sea compatible con el nombre de host sea compatible con el nombre de host. Es no un simple ajuste de bandera o cambiar la configuración. Tenemos algunas respuestas específicas del protocolo que se ocupan del estado de cosas y posibles medidas de mitigación, en particular para ese protocolo: para SSH (y, por lo tanto, también para SFTP) y para FTP (que señala que el HOSTsoporte para FTP está actualmente en la parcela -Fase de soporte, por lo que aún no se puede confiar en él).

La respuesta breve es que si su protocolo no implementa actualmente el reconocimiento de nombres de host, con un buen soporte entre clientes y servidores, olvídelo: no es algo que pueda hacer.

MadHatter
fuente
66
Creo que atenuaría esta respuesta con el hecho de que algunos protocolos son para productos nuevos o son lo suficientemente locales como para que una compañía controle todas las instancias de servidores y clientes. En esos casos, simplemente agregar comandos o paquetes de nombre de host es muy simple y muy fácil de implementar. Describe la dificultad de agregar cualquier característica nueva a un protocolo existente que ya está siendo utilizado por muchos proveedores.
JPhi1618
44
@ JPhi1618 Te escucho, pero en mi opinión, cualquier "protocolo" creado e implementado por una sola compañía, y que no está integrado en un RFC, no es un protocolo en absoluto; es solo una decisión de ingeniería interna, y no tengo ningún interés en estos productos patentados. Como usted señala, el proveedor puede cambiar instantáneamente las cosas para implementar el reconocimiento del nombre de host si así lo desea; pero dado que nadie más que el proveedor puede hacer eso, no veo cómo es de gran interés para el OP.
MadHatter
Creo que la pregunta relevante es si está diseñando un nuevo protocolo o preguntando cómo cambiar un protocolo existente.
Barmar
Un protocolo propietario sigue siendo un protocolo.
Barmar
@Barmar probablemente no sea una buena discusión para entrar aquí. Esta pregunta se trata de cambiar los protocolos existentes y, como señalé anteriormente, si la decisión de ingeniería de propiedad / protocolo bazsolo puede ser cambiado por su propietario y su único implementador, entonces la única forma de que sea consciente del nombre de host es apelar al propietario. Eso no hace una respuesta SF interesante, y además no está (en mi opinión) sobre el tema. " Cómo diseñar un protocolo compatible con el nombre de host " es otra pregunta completamente distinta, y no me interesa preguntar.
MadHatter