DNS

¿Qué significa DNS?
Cada equipo conectado directamente a Internet tiene al menos una dirección IP específica. Sin embargo, los usuarios no desean trabajar con direcciones numéricas, como por ejemplo //194.153.205.26//, sino con un nombre de dominio o más específicamente, con direcciones (llamadas direcciones FQDN) como por ejemplo es.kioskea.net. Es posible asociar nombres en lenguaje normal con direcciones numéricas gracias a un sistema llamado **DNS** (//Sistema de Nombres de Dominio//). Esta correlación entre las direcciones IP y el nombre de dominio asociado se llama //resolución de nombres de dominio// (o //resolución de direcciones//).

Nombres del ordenador
Al comienzo de TCP/IP, puesto que las redes no eran muy extensas, o en otras palabras que el número de equipos conectados a la misma red era bajo, los administradores de red crearon archivos llamados //tablas de conversión manual//. Estas tablas de conversión manual eran archivos secuenciales, por lo general llamados //hosts// o //hosts.txt//, y asociaban en cada línea la dirección IP del equipo con el nombre literal relacionado, denominado //nombre del ordenador//.

Introducción al Sistema de Nombres de Dominio
Sin embargo, el anterior sistema de tablas de conversión exigía una actualización manual de las tablas para la totalidad de los equipos en caso de incluir o modificar el nombre de una máquina. Por lo tanto, con el aumento en tamaño de las redes y sus interconexiones, fue necesario implementar un sistema de gestión para los nombres que fuese jerárquico y fácil de administrar. El sistema llamado **Sistema de Nombres de Dominio** (**DNS**) fue desarrollado en noviembre de 1983 por Paul Mockapetris (RFC 882 y RFC 883) y luego revisado en 1987 en las RFC 1034 y 1035. El DNS ha sido sometido a varias RFC. Este sistema ofrece:
 * un **espacio de nombre** jerárquico que permite garantizar la singularidad de un nombre en una estructura arbórea, como por ejemplo sistemas de archivo Unix.
 * un sistema de **servidores de distribución** que permite que el espacio de nombre esté disponible.
 * un sistema de **cliente** que permite "resolver" nombres de dominio, es decir, interrogar a los servidores para encontrar la dirección IP que corresponde a un nombre.

Espacio de nombre
La estructura del sistema DNS se basa en una estructura de arbórea en donde se definen los dominios de nivel superior (llamados **TLD**, //Dominios de Nivel Superior//); esta estructura está conectada a un nodo raíz representado por un punto.

Cada nodo del árbol se llama **nombre de dominio** y tiene una //etiqueta// con una longitud máxima de 63 caracteres. Por lo tanto, todos los nombres de dominio conforman una estructura arbórea inversa en donde cada nodo está separado del siguiente nodo por un punto ("."). El extremo de la bifurcación se denomina **host**, y corresponde a un equipo o entidad en la red. El nombre del ordenador que se provee debe ser único en el dominio respectivo, o de ser necesario, en el sub-dominio. Por ejemplo, el dominio del servidor Web por lo general lleva el nombre //www//. La palabra "**dominio**" corresponde formalmente al sufijo de un nombre de dominio, es decir, la recopilación de las etiquetas de nodo de la estructura arbórea, con excepción del ordenador. El nombre absoluto está relacionado con todas las etiquetas de nodo de una estructura arbórea, separadas por puntos y que termina con un punto final que se denomina la **dirección FQDN** (//Nombre de Dominio totalmente calificado//). La profundidad máxima de una estructura arbórea es 127 niveles y la longitud máxima para un nombre FQDN es 255 caracteres. La dirección FQDN permite ubicar de manera única un equipo en la red de redes. Por lo tanto, //es.kioskea.net.// es una dirección FQDN.

Servidores de nombres de dominio
Los equipos llamados //servidores de nombres de dominio// permiten establecer la relación entre los nombres de dominio y las direcciones IP de los equipos de una red. Cada dominio cuenta con un servidor de nombre de dominio, llamado //servidor de nombre de dominio principal//, así como también un //servidor de nombre de dominio secundario//, que puede encargarse del servidor de nombre de dominio principal en caso de falta de disponibilidad. Cada servidor de nombre de dominio está especificado en el servidor de nombre de dominio en el nivel superior inmediato, lo que significa que la autoridad sobre los dominios puede delegarse implícitamente. El sistema de nombre es una arquitectura distribuida, en donde cada entidad es responsable de la administración de su nombre de dominio. Por lo tanto, no existe organización alguna que sea responsable de la administración de todos los nombres de dominio. Los servidores relacionados con los dominios de nivel superior (TLD) se llaman "**servidores de dominio de nivel superior**". Son 13, están distribuidos por todo el mundo y sus nombres van desde "a.root-servers.net" hasta "m.root-servers.net". El servidor de nombre de dominio define una zona, es decir, una recopilación de dominios sobre la cual tiene autoridad. Si bien el sistema de //nombres de dominio// es transparente para el usuario, se deben tener en cuenta los siguientes puntos: El servidor que se utiliza con más frecuencia se llama **BIND** (//Berkeley Internet Name Domain//). Es un software gratuito para sistemas UNIX, fue desarrollado inicialmente por la Universidad de Berkeley en California y en la actualidad está mantenido por //ISC// (//Internet Systems Consortium//).
 * Cada equipo debe configurarse con la dirección de un equipo que sea capaz de transformar cualquier nombre en una dirección IP. Este equipo se llama Servidor de nombres de dominio. No se alarme: cuando se conecta a Internet, el proveedor de servicios automáticamente modificará los parámetros de su red para hacer que estos servidores de nombres de dominio estén disponibles.
 * También debe definirse la dirección IP de un segundo //Servidor de nombres de dominio// (Servidor de nombres de dominio secundario): el servidor de nombres de dominio secundario puede encargarse del servidor de nombres de dominio principal en caso de fallas en el sistema.

Resolución de nombres de dominio
El mecanismo que consiste en encontrar la dirección IP relacionada al nombre de un ordenador se conoce como "**resolución del nombre de dominio**". La aplicación que permite realizar esta operación (por lo general, integrada en el sistema operativo se llama "**resolución**". Cuando una aplicación desea conectarse con un host conocido a través de su nombre de dominio (por ejemplo, "es.kioskea.net"), ésta interroga al servidor de nombre de dominio definido en la configuración de su red. De hecho, todos los equipos conectados a la red tienen en su configuración las direcciones IP de ambos servidores de nombre de dominio del proveedor de servicios. Entonces se envía una solicitud al primer servidor de nombre de dominio (llamado el "servidor de nombre de dominio principal"). Si este servidor de nombre de dominio tiene el registro en su caché, lo envía a la aplicación; de lo contrario, interroga a un servidor de nivel superior (en nuestro caso un servidor relacionado con el TLD ".net"). El servidor de nombre de nivel superior envía una lista de servidores de nombres de dominio con autoridad sobre el dominio (en este caso, las direcciones IP de los servidores de nombres de dominio principal y secundario para //cómofunciona.net//). Entonces el servidor de nombres de dominio principal con autoridad sobre el dominio será interrogado y devolverá el registro correspondiente al dominio del servidor (en nuestro caso //www//).



Tipos de registros
Un DNS es una base de datos distribuida que contiene registros que se conocen como **RR** (//Registros de Recursos//), relacionados con nombres de dominio. La siguiente información sólo es útil para las personas responsables de la administración de un dominio, dado que el funcionamiento de los servidores de nombre de dominio es completamente transparente para los usuarios. Ya que el sistema de memoria caché permite que el sistema DNS sea distribuido, los registros para cada dominio tienen una duración de vida que se conoce como **TTL** (//Tiempo de vida//). Esto permite que los servidores intermediarios conozcan la fecha de caducidad de la información y por lo tanto que sepan si es necesario verificarla o no. Por lo general, un registro de DNS contiene la siguiente información:
 * ** Nombre de dominio (FQDN) ** || ** TTL ** || ** Tipo ** || ** Clase ** || ** RData ** ||
 * es.kioskea.net || 3600 || A || IN || 163.5.255.85 ||
 * **Nombre de dominio**: el nombre de dominio debe ser un nombre FQDN, es decir, debe terminar con un punto. En caso de que falte el punto, el nombre de dominio es relativo, es decir, el nombre de dominio principal incluirá un sufijo en el dominio introducido;
 * **Tipo**: un valor sobre 16 bits que define el tipo de recurso descrito por el registro. El tipo de recurso puede ser uno de los siguientes:
 * **A**: este es un tipo de base que hace coincidir el nombre canónico con la dirección IP. Además, pueden existir varios registros A relacionados con diferentes equipos de la red (servidores).
 * **CNAME** (//Nombre Canónico//): Permite definir un alias para el nombre canónico. Es particularmente útil para suministrar nombres alternativos relacionados con diferentes servicios en el mismo equipo.
 * **HINFO**: éste es un campo solamente descriptivo que permite la descripción en particular del hardware del ordenador (CPU) y del sistema operativo (OS). Generalmente se recomienda no completarlo para evitar suministrar información que pueda ser útil a piratas informáticos.
 * **MX** (//Mail eXchange//): es el servidor de correo electrónico. Cuando un usuario envía un correo electrónico a una dirección (user@domain), el servidor de correo saliente interroga al servidor de nombre de dominio con autoridad sobre el dominio para obtener el registro MX. Pueden existir varios registros MX por dominio, para así suministrar una repetición en caso de fallas en el servidor principal de correo electrónico. De este modo, el registro MX permite definir una prioridad con un valor entre 0 y 65,535.
 * **NS**: es el servidor de nombres de dominio con autoridad sobre el dominio.
 * **PTR**: es un puntero hacia otra parte del espacio de nombres del dominios.
 * **SOA** (//Start Of Authority (Inicio de autoridad)//): el campo SOA permite la descripción del servidor de nombre de dominio con autoridad en la zona, así como la dirección de correo electrónico del contacto técnico (en donde el carácter "@" es reemplazado por un punto).
 * **Clase**: la clase puede ser **IN** (relacionada a protocolos de Internet, y por lo tanto, éste es el sistema que utilizaremos en nuestro caso), o **CH** (para el sistema caótico);
 * **RDATA**: estos son los datos relacionados con el registro. Aquí se encuentra la información esperada según el tipo de registro:
 * A: la dirección IP de 32 bits:
 * CNAME: el nombre de dominio;
 * MX: la prioridad de 16 bits, seguida del nombre del ordenador;
 * NS: el nombre del ordenador; PTR: el nombre de dominio
 * PTR: el nombre de dominio;
 * SOA: varios campos.

Dominios de nivel superior
Existen dos categorías de **TLD** (//Dominios de Nivel Superior//):
 * Los dominios que se conocen como "genéricos", llamados **gTLD** (//TLD genérico//). Los gTLD son nombres de dominio de nivel superior genéricos que ofrecen una clasificación de acuerdo con el sector de la actividad. Entonces cada gTLD tiene sus propias reglas de acceso:
 * gTLD historial:
 * **.arpa** relacionado con equipos pertenecientes a la red original;
 * **.com** inicialmente relacionado con empresas con fines comerciales. Sin embargo, este TLD se convirtió en el "TLD predeterminado" y hasta personas reales pueden adquirir dominios con esta extensión.
 * **.edu** relacionado con las organizaciones educativas;
 * **.gov** relacionado con las organizaciones gubernamentales;
 * **.int** relacionado con las organizaciones internacionales;
 * **.edu** relacionado con las organizaciones militares;
 * **.net** inicialmente relacionado con las organizaciones que administran redes. Con el transcurso de los años este TLD se ha convertido en un TLD común, y hasta personas reales pueden adquirir dominios con esta extensión.
 * **.org** está normalmente relacionado con organizaciones sin fines de lucro.
 * nuevos gTLD presentado en noviembre de 2000 por ICANN:
 * **.aero** relacionado con la industria aeronáutica;
 * **.biz** (//negocios//) relacionado con empresas comerciales;
 * **.museum** relacionada con los museos;
 * **.name** relacionada con el nombre de personas reales o imaginarias;
 * **.info** relacionado con organizaciones que manejan información;
 * **.coop** relacionado con cooperativas;
 * **.pro** relacionado con profesiones liberales.
 * gTLD especial:
 * **.arpa** relacionado con las infraestructuras para la administración de redes. El arpa gTLD también sirve para la resolución inversa de equipos en red y permite hallar el nombre relacionado con una dirección IP.
 * Los dominios que se conocen como "nacionales", se llaman **ccTLD** (código de país TLD). El ccTLD está relacionado con los diferentes países y sus nombres refieren a las abreviaturas del nombre del país definidas en la norma ISO 3166.