Propagación de DNS

Valoración del Usuario:  / 0
MaloBueno 

Recientemente linuxito fue migrado a un nuevo servidor (del mismo proveedor hacemosweb.com) y necesitó un cambio de dirección IP. Esto implica un cambio DNS, es decir la dirección linuxito.com ahora resuelve a una nueva dirección IP.

Este artículo describe la propagación de cambios en el servicio DNS y presenta algunas herramientas que pueden ayudar a determinar si existe un problema o si la paciencia es realmente una virtud.



¿Qué es DNS?

DNS (Domain Name System) es el servicio que traduce el nombre de dominio que ingresamos en la barra de direcciones de un navegador a direcciones IP (direcciones únicas en la red). De esta forma el navegador sabe a qué servidor necesita conectarse para cargar el sitio que deseamos visitar. Gracias a este servicio, de vital importancia para el funcionamiento de Internet, no es necesario que recordemos la dirección IP de cada servidor que visitamos, lo cual haría de la navegación algo imposible. Dado que, para un ser humano, es más fácil recordar www.google.com que 173.194.42.48.

Un nombre de dominio usualmente consiste en dos o más partes (técnicamente etiquetas), separadas por puntos. A la etiqueta ubicada más a la derecha se la llama dominio de nivel superior (top level domain). Como "org" en www.pepe.org o "ar" en www.linuxito.com. Cada etiqueta a la izquierda especifica una subdivisión o subdominio. Finalmente, la parte más a la izquierda del dominio suele expresar el nombre de la máquina (hostname).

El servicio DNS consiste en un conjunto jerárquico de servidores DNS. Cada dominio o subdominio tiene una o más zonas de autoridad que publican la información acerca del dominio y los nombres de servicios de cualquier dominio incluido. Para crear un nuevo dominio, por ejemplo "pepe.org" es necesario disponer de un servidor DNS que se encargue de "recordar" en qué dirección IP están alojados los diferentes servicios del dominio, en general se utiliza "www.pepe.org" para resolver al servicio Web, "smtp.pepe.org" o "mail.pepe.org" para resolver al servicio de correo, etc. Este servidor DNS se denomina autoridad para la zona.

Los servidores de DNS que administran los dominios de nivel superior se denominan "domain name registrar". Suelen ser propiedad de empresas proveedoras de Internet (ISP) u organizaciones gubernamentales. Por ejemplo en Argentina, los dominios de nivel superior ".com.ar", ".gob.ar", ".int.ar", ".mil.ar", ".net.ar", ".org.ar" y ".tur.ar" son administrados por la Dirección Nacional del Registro de Dominios de Internet perteneciente a la Secretaría Legal y Técnica de la Presidencia de la Nación a través de su sitio nic.ar. Estos servidores de dominios de nivel superior son quienes se encargan de determinar qué servidores DNS son la autoridad para cada zona. Además desde el sitio es posible dar de alta nuevos dominios .ar de forma gratuita.

Desde el punto de vista de los clientes/usuarios de Internet, cuando alguien contrata un servicio de acceso a Internet, además de recibir una dirección IP (que en IPv4 puede pertenecer a una red privada o pública) para asignar a su computadora o router, recibe una o más direcciones IP (generalmente dos) de servidores DNS a los cuales hacer las consultas de nombres. Para acelerar la navegación, cada vez que se necesita resolver (traducir un nombre) una dirección IP, se hace consultando a los servidores DNS proporcionados por el proveedor de servicios de Internet (a los cuales presumiblemente se tiene un menor tiempo de acceso).

Aunque también existen servidores de DNS públicos y gratuitos. Por ejemplo si los servidores DNS provistos por nuestro ISP tienen tiempos de accesso muy altos, es posible utilizar cualquiera servidor DNS público. Los servidores DNS públicos más reconocidos y con menor tiempo de acceso son Google y OpenDNS. Las direcciones IP de los servidores DNS de Google son 8.8.8.8 y 8.8.4.4. Las direcciones IP de los servidores DNS de OpenDNS son 208.67.222.222 y 208.67.220.220.

¿Por qué los cambios en el servicio DNS tardan tanto en propagarse?

Has registrado tu nombre de dominio en un domain name registrar (por ejemplo nic.ar), contratado un servicio de hosting (el cual incluye el servicio de hospedaje de un sitio más el servicio DNS autoridad de zona) y subido el contenido de tu sitio "pepe.org". Una vez que has hecho todo esto, ¿qué es lo que falta para que cuando alguien ponga "www.pepe.org" en su navegador acceda al sitio recién subido?

Cuando la dirección de tu sitio www.pepe.org es ingresada en un navegador, la computadora cliente solicita la dirección IP del servidor que hospeda tu sitio a los servidores DNS de su proveedor de servicios de Internet (ISP). Si el sitio no está listado en los registros, el servidor DNS consulta al registrar para determinar el DNS start of authority (SOA) para la zona "pepe.org". Una vez que obtiene el SOA, el servidor DNS del ISP consulta al servidor DNS SOA por el registro "A" (address) correspondiente a "www.pepe.org". Una vez que obtiene la respuesta, el servidor DNS del ISP retorna la dirección IP del servidor que hospeda a "www.pepe.org" al navegador cliente para que pueda cargar el sitio. Este tipo de consultas se denomina "recursiva" ya que es el servidor DNS del ISP quien se encarga del proceso completo de resolución. Si fuera una consulta "iterativa", el servidor DNS del ISP simplemente retorna al navegador cliente la mejor respuesta que conoce, puede ser la dirección IP del host en cuestión, del SOA, o del registrar. Luego es el cliente quien debe continuar el proceso de resolución.

Para acelerar la navegación, cada ISP guarda una copia (caché) de los registros DNS por un período de tiempo, a veces hasta 48 hs. Esto significa que construyen su propia copia de los registros DNS de Internet a medida que los van resolviendo y los leen localmente en lugar de hacer el pedido al registrar o SOA cada vez que se hace accede a un sitio. Esto mejora la performance de dos formas: 1- Reducir el tiempo de retorno desde que un navegador solicita resolver un dominio hasta que obtiene la respuesta; y 2- Reducir la cantidad de tráfico en Internet.

La desventaja es que debido a que cada compañía o ISP sólo actualiza sus registros DNS en caché cada 'x' cantidad de días, cualquier cambio hecho en los registros DNS de un dominio no se ve reflejado hasta que todos los ISP actualicen sus copias. Este proceso de actualización se llama "propagación" debido a que la información DNS de un sitio es propagada a medida que todos los servidores DNS de Internet van actualizando sus copias locales. Como no existe una regla estándar y cada servidor DNS actualiza en diferentes tiempos, no se puede asegurar un período a partir del cual se garantiza que un cambio ha sido propagado por todos los servidores DNS de Internet, aunque generalmente se habla de un mínimo de 48 hs.

Existen algunos sitios útiles que pueden ayudar a ver el proceso de propagación y determinar cuándo tu sitio debería ser visible. El sitio What's my DNS? muestra una lista de servidores DNS conocidos alrededor del mundo e indica cuándo ciertos registros relacionados a un sitio han sido propagados o no:

El sitio intoDNS provee una lista completa de los registros DNS de un dominio, si están disponibles. Si no están disponibles significa que la propagación de DNS aún no se ha completado.

Si la propagación ha completado pero tu sistema aún no resuelve bien un sitio es necesario verificar varias cosas:

Primero hay que vaciar la caché del navegador, por ejemplo en Chrome se hace desde:

History > Clear browsing data...

Se debe seleccionar "the beginning of time" y "Empty the cache".

El sitio www.linuxito.com debe resolver a la dirección IP 184.154.109.210 correspondiente a la dirección del servidor donde actualmente está hospedado. Si luego de vaciar la caché del navegador aún no funciona, es posible revisar la caché DNS del navegador, en Chrome acceder a la URL:

chrome://net-internals/#dns

En la captura se observa que la dirección IP para linuxito.com es incorrecta. Presionando el botón "Clear host cache" es posible vaciar la caché DNS del navegador. Si luego de vaciar la caché el navegador resuelve a la misma IP anterior entonces hay que hacer un poco de "troubleshooting" (expresión americana para "resolver problemas", ya que ellos disparan a todo pues adoran las armas de fuego jeje).

Desde la consola, verificar si los servidores DNS de nuestro ISP resuelven correctamente (por privacidad decidí reemplazar la dirección IP de mi servidor DNS por "w.x.y.z"):

# nslookup linuxito.com
Server:         w.x.y.z
Address:        w.x.y.z#53

Non-authoritative answer:
Name:   linuxito.com
Address: 184.154.109.210

Se observa que la respuesta es correcta, entonces habiendo vaciado la caché DNS del navegador ¿cómo puede ser que siga resolviendo a una IP incorrecta? El problema debe ser en el sistema operativo, verificar qué responde el comando getent:

# getent hosts linuxito.com
184.154.30.166  linuxito.com

La dirección IP es incorrecta. Por ende el sistema operativo tiene en caché una entrada DNS incorrecta. Si el sistema utiliza el demonio nscd (name service cache daemon) es necesario reiniciar el servicio nscd. Pero mi sistema no posee el servicio nscd entonces el problema tiene que estar en el archivo /etc/hosts:

# cat /etc/hosts
#
# hosts         This file describes a number of hostname-to-address
#               mappings for the TCP/IP subsystem.  It is mostly
#               used at boot time, when no name servers are running.
#               On small systems, this file can be used instead of a
#               "named" name server.  Just add the names, addresses
#               and any aliases to this file...
#
# By the way, Arnt Gulbrandsen <agulbra@nvg.unit.no> says that 127.0.0.1
# should NEVER be named with the name of the machine.  It causes problems
# for some (stupid) programs, irc and reputedly talk. :^)
#

# For loopbacking.
127.0.0.1               localhost
127.0.0.1               box.. box

# End of hosts.

184.154.30.166          linuxito.com
184.154.30.166          www.linuxito.com

Ups! Parece que la culpa es mía. La dirección IP para www.linuxito.com está "clavada" en el archivo de mapeo de hosts estático. Luego de comentar las últimas dos líneas:

# getent hosts linuxito.com
184.154.109.210 linuxito.com

La dirección resuelve correctamente y ahora el navegador es capaz de cargar el sitio.

¿Por qué había agregado esa entrada en el archivo /etc/hosts? Cuando migré linuxito desde 000webhost.com a hacemoswebs.com, mi paciencia no fue suficiente para esperar que mi ISP propague el cambio DNS, entonces decidí hacer el mapeo estático para poder acceder al sitio. Luego me olvidé y quedó mapeado por siempre. Por lo tanto cuando mi proveedor migró el sitio a un servidor nuevo (con diferente dirección IP) hubiera esperado infinitamente una propagación DNS cuando en realidad se trataba de una configuración errónea en mi computadora.

Espero que ésta experiencia les sirva para diagnosticar problemas de DNS.



Suscribirse

    Registrate para recibir las novedades y artículos por correo electrónico.

Linuxito en G+