Cómo funciona el DNSSiguiendo con la serie de artículos sobre redes y TCP/IP hoy realizaremos una breve introducción al “Sistema de Nombres de Dominio” (DNS, por “Domain Name System“). El DNS se utiliza principalmente para la resolución de nombres, esto es, decidir qué dirección IP pertenece a determinado nombre completo de host.
También puede descargar este tutorial en otros formatos (HTML sin decoraciones y PDF). Usos del DNSEl DNS se utiliza para distintos propósitos. Los más comunes son:
Por tratarse de un sistema muy flexible, es utilizado también para muchas otras funciones, tales como la obtención de claves públicas de cifrado asimétrico y la validación de envío de e-mails (a través de mecanismos como SPF). Terminología básicaAntes de proseguir, es necesario introducir algunos términos básicos para evitar confusiones y ambigüedades. Otros términos más complejos serán tratados más adelante.
Arquitectura del DNSEl sistema DNS funciona principalmente en base al protocolo UDP. Los requerimientos se realizan a través del puerto 53. El sistema está estructurado en forma de “árbol“. Cada nodo del árbol está compuesto por un grupo de servidores que se encargan de resolver un conjunto de dominios (zona de autoridad). Un servidor puede delegar en otro (u otros) la autoridad sobre alguna de sus sub-zonas (esto es, algún subdominio de la zona sobre la que él tiene autoridad). Un subdominio puede verse como una especialización de un dominio de nivel anterior. Por ejemplo, “smaldone.com.ar” es un subdominio de “com.ar“, que a su vez lo es del TLD “ar“. El siguiente diagrama ilustra esto a través de un ejemplo: ![]() Los servidores con autoridad sobre los TLD son los llamados “root servers” (o “servidores raíz“) del sistema. Estos son fijos, ya que rara vez cambian, siendo actualmente 13. Tomemos como ejemplo el dominio “com.ar“. Este dominio pertenece al TLD “ar“. Los servidores con autoridad sobre el dominio “ar” son:
En tanto que los servidores con autoridad sobre “com.ar” son:
Podemos ver que ns.uu.net, ns1.retina.ar, athea.ar y ctina.ar tienen autoridad tanto sobre “com.ar” como sobre “ar“. El proceso de resolución de nombresCuando una aplicación (cliente) necesita resolver un FQHN envía un requerimiento al servidor de nombres configurado en el sistema (normalmente, el provisto por el ISP). A partir de entonces se desencadena el proceso de resolución del nombre:
Ilustremos esto con un ejemplo concreto. Supongamos que el navegador necesita resolver el nombre “blog.smaldone.com.ar“.
Mecanismos de cachéCada vez que un servidor de nombres envía una respuesta, lo hace adjuntando el tiempo de validez de la misma (TTL o “tiempo de vida“). Esto posibilita que el receptor, antes la necesidad de volver a resolver la misma consulta, pueda utilizar la información previamente obtenida en vez de realizar un nuevo requerimiento. Esta es la razón por la cual los cambios realizados en el DNS no se propagan instantáneamente a través del sistema. Dependiendo de la naturaleza de los mismos (y de la configuración de cada servidor), la propagación puede tardar desde algunos minutos hasta varios días. Correo electrónico y resolución de nombresNormalmente los usuarios de correo electrónico redactan su mensajes usando un cliente de correo y enviándolo a través de un servidor SMTP provisto por su ISP o a través de un sistema de correo vía web (webmail). En cualquier caso, una vez que el mensaje es recibido por el servidor, debe ser entregado al destinatario. Aquí interviene el sistema DNS:
Tipos de registro en un servidor de nombresUn servidor de nombres puede almacenar distinta información. Para ello, en cada zona de autoridad dispondrá de entradas de distinto tipo. Entre los más importantes se encuentran:
Bind, “el” servidor de nombresPrácticamente el único software utilizado en los servidores de nombres de Internet es bind (“Berkeley Internet Name Domain“), creado originalmente en la Universidad de California, y actualmente propiedad del Internet Systems Consortium. Este programa, distribuido bajo una licencia libre, es utilizado en prácticamente todos los sistemas Unix del mundo. Esto ha sido considerado un problema de seguridad, al punto que se ha propuesto la migración de algunos root servers a otro sistema, ya que la aparición de algún problema de seguridad en bind podría implicar la caída de todo el DNS de Internet. Uso del DNS en una red localYa en redes de tamaño medio (quizás más de 5 equipos) es conveniente la utilización de DNS. Esto nada tiene que ver con el DNS de Internet (aunque el servidor local puede estar vinculado a este sistema). Básicamente, es conveniente montar un servidor local de DNS por los siguientes motivos:
Problemas del DNSEl principal problema que presenta el DNS es que, al estar basado en UDP (protocolo de transporte que no garantiza la recepción de la información enviada), tanto las consultas como las respuestas pueden “perderse” (por ejemplo, a causa de congestionamiento en algún enlace de la red). Es común apreciar cómo, en el caso de servidores y redes no muy bien configuradas, la resolución de nombres se resiente sensiblemente ante cualquier anomalía (saturación de tráfico o del servidor de nombres local). Otro inconveniente, que ya hemos hecho notar, es la lentitud de la propagación de las modificaciones en el sistema, producto de la propia arquitectura del mismo. Pero quizás el mayor problema no sea inherente al sistema mismo, sino a la pésima configuración de los servidores de muchos ISP. Fibertel, el proveedor que utilizo, es un notable ejemplo de esta falencia. Una buena solución a esta situación es ejecutar un servidor de nombres en alguna PC de la red local, de forma tal que se comunique directamente con los root servers (evitando de esta forma pasar a través de los servidores de nombres de nuestro proveedor). Herramientas para aprender másEn sistemas Unix el comando dig (ver “man dig“) permite realizar requerimientos “a mano” para poder investigar un poco más sobre el funcionamiento del DNS y, cómo no, también para detectar y solucionar problemas en la red. Los usuarios de sistemas Windows disponen del comando nslookup (aunque no tan potente como dig), para el mismo propósito. Lectura adicional
|