DNS: Resolución de nombres de dominio

En este artículo hablaremos sobre el sistema de nombres de dominio, o DNS (Domain Name System), y su funcionamiento en Internet.


Siempre que nos conectamos a un servicio en Internet, ya sea un sitio web, un servidor de correos, un servidor de terminal remota, o cualquier otro servicio, por lo general, lo hacemos invocando un nombre de dominio. En este artículo hablaremos sobre el sistema de nombres de dominio, o DNS (Domain Name System), y su funcionamiento.

Ahora bien, toda conexión entre nosotros y cualquier servicio en la red se lleva a cabo mediante un tipo especial de socket llamado INET, o de Internet. Estos sockets se componen de una 5-upla que identifica cada una de las conexiones entre clientes y servidores. Los elementos son los siguientes:dns

  • Dirección ip de origen
  • Dirección ip de destino
  • Puerto de origen
  • Puerto de destino
  • Protocolo de transporte

Como verán, los nombres de dominio no aparecen en la definición de una conexión entre nuestro cliente, por ejemplo, un navegador, o un cliente de correo electrónico, y el servidor web o un servidor de casilla de correos de usuario, respectivamente.

¿Cómo se realiza la conexión cuando invocamos un nombre y no una ip? La conexión siempre se lleva a cabo mediante las ip’s de origen y destino, y de alguna forma, cuando invocamos un nombre de dominio, debemos “traducirlo”, técnicamente, “resolverlo” a una dirección ip.

Uno de los mecanismos más utilizados, y el principal modo de traducción de nombres en Internet, es la resolución de nombres de dominio mediante el Sistema de Nombres de Dominio, o DNS (Domain Name System).

Domain Name System (DNS)

El sistema de nombres de dominio se compone de una base de datos jerárquica distribuida en varios servidores a lo largo y ancho de Internet, o incluso, dentro de las redes empresariales.

Decimos que la base de datos es jerárquica porque posee un directorio raiz, también conocido como directorio “.”, o directorio “punto”.

Debajo del directorio “.” se encuentran los dominios de nivel superior, o Top Level Domain (TLD), que a su vez pueden ser dominios de nivel superior geográfico (ccTLD – Country Code TLD) o genérico (gTLD – Generic TLD).

Un dominio de nivel superior geográfico es una palabra de dos letras asignado a cada pais para su administración. Entre ellos encontraremos, por ejemplo, .ar, .br, .uk, .tk, y un largo etcétera.

Debajo de cada uno de estos dominios se encuentran los dominios genéricos del país, como por ejemplo, .com.ar, .com.br, .edu.ar, .org.ar, etc., y debajo, los de las organizaciones y empresas, por ejemplo, lpi.org.br o caceriadespammers.com.ar.

Un dominio de nivel superior genérico hace referencia a un dominio .com, .edu, .mil, .org, .net, etc.

Debajo de cada uno de estos dominios se encuentran los dominios de las organizaciones, por ejemplo, juncotic.com 🙂

Y por último, los subdominios y hosts de cada dominio, como por ejemplo, www.juncotic.com o campus.juncotic.com.

DNS, una base de datos distribuida

Ha hemos hablado de la jerarquía de la base de datos de nombres en Internet, ahora veamos por qué decimos que también es distribuida.2000px-DNS_arbol.svg

Que una base de datos sea distribuida implica que no está almacenada en un solo servidor, sino que está, como su nombre lo indica, distribuida en muchísimos servidores a lo largo y ancho de la Internet.

Por ejemplo, los servidores raíz, aquellos que resuelven el dominio “.”, o dominio raíz, solo suelen resolver ese dominio, mientras que, por ejemplo, el dominio .ar. será resuelto por un servidor de otra entidad, en nuestro caso, dependiente del NIC Argentina.

Cuando un cliente intente resolver un dominio .ar, primero obtendrá una respuesta de un servidor raíz “diciendo” que el dominio .ar lo administra un servidor XX ubicado en cierta dirección ip. Dicho servidor DNS entonces será el encargado de resolver todo lo que dependa de .ar, y podrá recibir y responder consultas sobre cualquier dominio que dependa de .ar, como .com.ar, por ejemplo. Estas respuestas, a su vez, indicarán la dirección ip de un servidor dns que se encargue de resolver los dominios inferiores a .ar. Por ejemplo, el servidor dns de .ar podrá responder a un cliente sobre la dirección ip del servidor que administra la zona de dominios .com.ar.

Que un servidor raíz responda a un cliente sobre la ip de un servidor de dominio superior (TLD), y a su vez, que un servidor de dominio superior devuelva ip’s de servidores de subdominios, forma parte de un mecanismo denominado delegación de dominio.

Se dice, entonces, que un servidor raíz delega la administración de la zona TLD, por ejemplo, .ar, a un servidor determinado, y a su vez, dicho servidor dns delega la administración del dominio .com.ar a otro servidor.

Y la cadena continúa, por ejemplo, los servidores de la zona .com.ar a su vez delegarán la administración del dominio ejemplo.com.ar a otro servidor de nombres, que estará configurado para responder por sus hosts y subdominios, y que a su vez, podría delegar ciertos subdominios a otros servidores.

En la siguiente imagen (gentileza de wikipedia) podemos ver un esquema gráfico de la base de datos DNS distribuida. Cada rectángulo amarillo hace referencia a un servidor de nombres de dominio. Estos servidores resuelven una zona de dominio determinada, encerrada con lineas de puntos en el esquema.

También pueden observarse delegaciones de zonas, es decir, zonas de dominio que dependen de un dominio de nivel superior, o simplemente de un dominio de mayor jerarquía en el árbol.

dns

Los servidores de nombres y los clientes.

Prácticamente todos los equipos actuales conectados a una red TCP/IP poseen su propio cliente dns que deberemos configurar para su uso, ya sea en forma estática o dinámica.

Por otro lado, también podremos configurar nuestro propio servidor de nombres de dominio, y registrar un dominio en algún “registrar” de nivel superior para poder delegar toda la zona de nuestro dominio a nuestro propio servidor. Implementaciones comunes de servidores DNS en Linux incluyen a Bind9 en la mayor parte de los casos, o a PowerDNS por sus ventajas relativas a su soporte de varios back-end’s para almacenar zonas, tales como mysql, ldap o archivos de texto.

Para configurar un cliente con un DNS óptimo podemos recurrir a Namebench: Encontrando el mejor DNS

Espero les sea de utilidad!!