Uso de múltiples registros A para mi dominio: ¿los navegadores web prueban alguna vez más de uno?

94

Si agrego varios registros A para mi dominio, los servidores DNS los devuelven en orden de ida y vuelta.

Ejemplo:

192.0.2.1 A example.com
192.0.2.2 A example.com
192.0.2.3 A example.com

Pero, ¿cómo reaccionan los navegadores web si el primer host ( 192.0.2.1) está inactivo (inalcanzable)? ¿Intentan con el segundo host ( 192.0.2.2) o devuelven un mensaje de error al usuario? ¿Hay alguna diferencia entre los navegadores más populares?

Si implemento mi propia aplicación, puedo implementar para que la segunda se use en caso de que la primera esté inactiva, por lo que es posible. Y esto sería muy útil para crear un sitio web tolerante a fallas.

Jonas
fuente

Respuestas:

87

Sí, la mayoría de los navegadores de los últimos 5-10 años probarán los otros registros A si uno no responde. Esto a veces se denomina "reintento del navegador" o "reintento del cliente" aparentemente. Prácticamente solo encontrará cosas al respecto en el contexto de las diversas vulnerabilidades del navegador que esta característica permite contra los sitios que no lo usan (consulte Reenlazado de DNS y fijación de DNS , fijación de anti-dns, fijación de anti-anti-dns, anti-anti -anti-dns pinning , y así sucesivamente). Es una mala reputación, pero prueba que existe.

Casi todos los navegadores sí reciben la lista completa de registros A, y sí comprueban otros si falla el que está usando. Puede esperar que cada cliente tenga una espera de 30 segundos cuando intente acceder por primera vez a un sitio cuando un servidor está inactivo, hasta que se conecte a una dirección de trabajo. El navegador almacenará en caché qué dirección funciona y continuará usando esa para futuras solicitudes a menos que también falle, luego tendrá que buscar en la lista nuevamente. Entonces 30 segundos de espera en la primera solicitud, bien después.

Pero no es algo que necesariamente desee usar, tendrá muchas advertencias sobre la compatibilidad del navegador, la compatibilidad del sistema operativo, la compatibilidad del proxy, los encabezados de control de caché tendrán efectos extraños sobre si recuerda qué IP están caídas o si comienza a tener esa espera de 30 segundos en cada solicitud, las personas que escriben clientes personalizados para su sitio terminarán usando gethostbyname en lugar de getaddrinfo y no podrán manejar la conmutación por error, todo tipo de problemas potenciales.

Tampoco puede confiar en múltiples registros A para permitir servidores "maestros" y "esclavos", porque nunca sabrá qué dirección va a elegir un navegador de la lista. Todos deben ser tan capaces de manejar visitantes si se ejecutan, porque cualquiera podría obtener tráfico si está activo. Un navegador podría pensar que su tercer servidor fuera de la lista es el más atractivo, tal vez parece el más cercano, y elegirá ese a pesar de que los tres todavía están activos.

Pero si puede vivir con las limitaciones y tener un sistema HTTP razonablemente simple con el que pueda predecir la interacción del navegador, funcionará.

Oh, también tendrás que lidiar con muchas personas que te dicen que esto no existe (ya que eso era cierto hace 15 años). Pero puede intentar hacer telnet a un nombre de dominio con varios registros A, algunos con direcciones IP muertas y algunos buenos, si necesita probarlo (sí, incluso el telnet viejo y bueno ahora usa getaddrinfo y maneja múltiples registros A con gracia en estos días) - imprimirá una buena lista de las IP que está intentando hasta que finalmente tenga éxito.

Joff
fuente
12
Aquí hay un informe de la Oficina Nacional de Investigación Económica que respalda la respuesta de Joff.
Marco
3
Curiosamente, mientras stackexchange.com apunta a una IP, Google devuelve varios: $ dig google.com @ ns1.google.com ;; SECCIÓN DE RESPUESTA: google.com. 300 EN UN 74.125.226.6 google.com. 300 EN UN 74.125.226.7 google.com. 300 EN UN 74.125.226.0 google.com. 300 EN UN 74.125.226.4 google.com. 300 EN UN 74.125.226.8 google.com. 300 EN UN 74.125.226.2 google.com. 300 EN UN 74.125.226.1 google.com. 300 EN UN 74.125.226.3 google.com. 300 EN UN 74.125.226.5 google.com. 300 IN A 74.125.226.14 google.com. 300 IN A 74.125.226.9
Louis St-Amour
1
Lo siento, pero no creo que sea así. Los navegadores no tienen nada que ver con la resolución de direcciones IP, eso sucede en el software del sistema. Si proporciona varios registros A, debe asumir que cualquier cliente recibirá uno aleatorio de la lista.
Jan Steinman
19
Así es como funciona en los navegadores contemporáneos. Todos eligen usar llamadas al sistema como getaddrinfo () para obtener múltiples direcciones IP y manejar la conmutación por error internamente, en lugar de obtener una sola dirección IP del sistema. Otros comentaristas y respondedores aquí son parte de la "gran cantidad de personas que te dicen que esto no existe" del último párrafo de Joff. Supongo que tienen buenas intenciones, pero están difundiendo información errónea.
Robert Tupelo-Schneck
1
Para respaldar la declaración de Joff de "navegadores hace 5-10 años", aquí hay una prueba realizada por la Oficina Nacional de Investigación Económica que establece que este tipo de sistema funciona hasta IE 8. Me parece justo. :)
Jomar Sevillejo
5

Tenga en cuenta que Windows Vista implementa las partes estúpidas de RFC3484 (es decir, el backporting de IPV6 a IPV4) y preferirá la dirección IP que comparte la mayoría de los bits de prefijo con la dirección IP del usuario en lugar de elegir uno al azar. Dado que la mayoría de los usuarios tienen direcciones IP que comienzan con 192.168, eso significa que cualquiera de sus direcciones IP comparte la mayoría de los bits de prefijo con los que obtendrá la mayor parte del tráfico de Vista. Microsoft solucionó este bit particular de idiotez en Windows 7 y versiones posteriores, por lo que ya no es un problema tan grande como solía ser.

Mike Scott
fuente
Vista, esa es buena!
the0ther
3

Esta es una técnica básica de distribución de equilibrio de carga de DNS: DNS Round Robin. Esto no tiene nada que ver con el navegador, depende de la implementación del solucionador y del caché local / remoto de la dirección DNS. Los cambios son que si un servidor falla, debido al almacenamiento en caché en la capa DNS, su sitio web puede ser inaccesible.

Consulte aquí para obtener una explicación básica sobre Round Robin DNS en WikiPedia.

keatch
fuente
1
Bueno, dado que el navegador es el solucionador, depende de la implementación del navegador, como lo sé.
Jonas
2
No, hay una biblioteca del sistema que resuelve el DNS usando, por supuesto, el Servidor de Nombres DNS que configuró en el sistema. La función es parte de la biblioteca estándar del sistema operativo.
keatch
Pero tanto nslookup cnn.comen Windows como host cnn.comen Linux devuelve una lista de direcciones IP, por lo que definitivamente depende de la implementación del navegador .
Jonas
55
@iivel: No, eso no es cierto. Si escribo un programa Java y resuelvo un nombre con InetAddress.getAllByName ("example.com") obtengo una lista con todas las direcciones IP, por lo que puedo elegir iniciar una conexión TCP a todas si lo deseo. Y es lo mismo si usa getaddrinfo () en C. Por lo tanto, definitivamente es una elección que hacen los desarrolladores y no el sistema operativo.
Jonas
1
@ J.Money Esta pregunta está pidiendo exactamente acerca de la aplicación, no la forma en que podemos hacerlo.
Franklin Yu
0

El sistema operativo determina qué IP usar, no el navegador. Windows redondea la lista devuelta (en la lista pasada de DNS), aunque continuará utilizando la misma dirección hasta que DNS se vacíe o se agote el tiempo de espera. * Las implementaciones de ix dependen en parte de la implementación de la pila tcp incluida, pero generalmente también siguen un método round robin.

iivel
fuente
2
No, esto está mal. Si escribo un programa Java y resuelvo un nombre con InetAddress.getAllByName("example.com"), obtengo una lista con todas las direcciones IP, por lo que puedo elegir iniciar una conexión TCP a todas ellas si lo deseo. Y es lo mismo si lo usa getaddrinfo()en C. Por lo tanto, definitivamente es una elección que hacen los desarrolladores y no el sistema operativo. El servidor DNS solo decide en qué orden se devuelve la lista de direcciones IP.
Jonas
De acuerdo, puedes hacer manualmente lo que quieras con la pila, incluso puedes tirar la tuya y olvidarte de winsock. Sin embargo, si escribe una aplicación y deja que el sistema operativo haga lo suyo (resumen), entonces el comportamiento es el indicado. Su pregunta era específicamente sobre el comportamiento tradicional de las aplicaciones, no sobre lo que es posible. La mayoría de los desarrolladores manejan el uso del nombre no resuelto y dejan que el sistema operativo haga lo que hace, en lugar de unir estrechamente los comportamientos.
iivel
1
No estoy seguro de por qué la respuesta fue rechazada, pero la pregunta es sobre qué hacen los navegadores. Actualmente, todos los navegadores permiten que el sistema operativo haga la resolución (menos algunos complementos para Firefox y Chrome). Si desea obtener detalles sobre cómo garantizar la disponibilidad en caso de que un proveedor deje de funcionar, consulte los equilibradores de carga o la agrupación.
iivel
Los navegadores probablemente hagan lo que usted dice: deje que el sistema operativo realice la búsqueda de DNS, pero devuelve una lista con direcciones IP al navegador. Y la pregunta es: ¿qué hacen los navegadores más populares si no se puede acceder a la primera dirección? ¿prueban el segundo?
Jonas
2
Se sabe que el artículo que citó Pete Tenereillo está desactualizado (en su mayoría incorrecto hoy en día). Con Chrome, chrome: // net-internals / # dns muestra el caché DNS actual. No creo que el sistema operativo siempre determine qué IP usar. Al menos con Chrome, puedes elegir usar AAAA si está disponible o solo A. OP habla de cómo los navegadores seleccionan de DNS depende, no de cómo la computadora encuentra su servidor DNS ...
sdaffa23fdsf