Introducción al protocolo DNS.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Equipamiento lógico necesario.

Para poder comenzar a estudiar los conceptos básicos del protocolo DNS, es necesario instalar algunas herramientas que serán utilizadas para realizar demostraciones.

Instale los paquetes bind-utils y whois.

yum -y install bind-utils whois

El paquete bind-utils incluye las herramientas dig y host, que son utilizadas para realizar distintos tipos de consultas de DNS. El paquete whois es la herramienta de consulta para información pública de dominios y direcciones IP.

Conceptos.

Acerca del protocolo DNS (Domain Name System).

DNS (acrónimo de Domain Name System) es una base de datos distribuida y jerárquica, que almacena la información necesaria para los nombres de dominio. Sus usos principales son la asignación de nombres de dominio a direcciones IP y la localización de los servidores de correo electrónico correspondientes para cada dominio. El DNS nació de la necesidad de facilitar a los seres humanos el acceso hacia los servidores disponibles a través de Internet permitiendo hacerlo por un nombre, algo más fácil de recordar que una dirección IP.

Los Servidores DNS utilizan TCP y UDP, en el puerto 53 para responder las consultas. Casi todas las consultas consisten de una sola solicitud UDP desde un Cliente DNS, seguida por una sola respuesta UDP del servidor. Se realiza una conexión TCP cuando el tamaño de los datos de la respuesta exceden los 512 bytes, tal como ocurre con tareas como transferencia de zonas.

¿Qué es un NIC (Network Information Center)?

NIC (acrónimo de Network Information Center o Centro de Información sobre la Red) es una institución encargada de asignar los nombres de dominio en Internet ya sean nombres de dominio genéricos o por países, permitiendo personas o empresas, montar sitios de Internet a través de un ISP, mediante un DNS. Técnicamente existe un NIC por cada país en el mundo y cada uno de éstos es responsable por todos los dominios con la terminación correspondiente a su país. Por ejemplo: NIC México es la entidad encargada de gestionar todos los dominios con terminación .mx, la cual es la terminación correspondiente asignada a los dominios de México.

La información publicada por los NIC es consultada con la herramienta whois.

¿Qué es un FQDN (Fully Qualified Domain Name)?

FQDN (acrónimo de Fully Qualified Domain Name o Nombre de Dominio Plenamente Calificado) es un Nombre de Dominio ambiguo que especifica la posición absoluta del nodo en el árbol jerárquico del DNS. Se distingue de un nombre regular porque lleva un punto al final.

Como ejemplo: suponiendo que se tiene un dispositivo cuyo nombre de anfitrión es «maquina1» y un dominio llamado «dominio.com», el FQDN sería «maquina1.dominio.com.», así es que se define de forma única al dispositivo mientras que pudieran existir muchos anfitriones llamados «maquina1», solamente puede haber uno llamado «maquina1.dominio.com.». La ausencia del punto al final definiría que se pudiera tratar solamente de un prefijo, es decir «maquina1.dominio.com» pudiera ser un dominio de otro más largo como «maquina1.dominio.com.mx».

La longitud máxima de un FQDN es de 255 bytes, con una restricción adicional de 63 bytes para cada etiqueta dentro del nombre del dominio. Solamente se permiten los caracteres A-Z de ASCII, dígitos y el carácter «-» (guión medio). Sin distinción de mayúsculas y minúsculas.

Desde 2004, a solicitud de varios países de Europa, existe el estándar IDN (acrónimo de Internationalized Domain Name) que permite caracteres no-ASCII, codificando caracteres Unicode dentro de cadenas de bytes dentro del conjunto normal de caracteres de FQDN. Como resultado, los limites de longitud de los nombres de dominio IDN dependen directamente del contenido mismo del nombre.

Para resumir: un FQDN es un nombre de anfitrión único con un punto al final.

Componentes de DNS.

El protocolo DNS opera a través de tres componentes: Clientes DNS, Servidores DNS y Zonas de Autoridad.

Clientes DNS.

Son todos aquellos programas que ejecuta un usuario y que generan peticiones de consulta para resolver nombres y direcciones IP. Básicamente preguntan por la dirección IP que corresponde a un nombre determinado. Prácticamente todas las aplicaciones que requieren definir un nombre de anfitrión entre sus argumentos se consideran clientes DNS.

Por ejemplo: un cliente SSH —aún siendo cliente de otro protocolo— realiza una consulta de DNS para determinar la dirección IP de un servidor al cual se va a conectar.

Servidores DNS.

Son servicios que contestan las consultas realizadas por los Clientes DNS. Hay dos tipos de servidores de nombres:

Servidor Maestro: También denominado Primario. Obtiene los datos del dominio a partir de un archivo alojado en el mismo servidor.
Servidor Esclavo: También denominado Secundario. Al iniciar obtiene los datos del dominio a través de un Servidor Maestro (o primario), realizando un proceso denominado transferencia de zona.

¿Cuántos servidores DNS debe haber para resolver un dominio?

Un gran número de problemas de operación de servidores DNS se atribuyen a las pobres opciones de servidores secundarios para las zona de DNS. De acuerdo al RFC 2182, el DNS requiere que al menos tres servidores existan para todos los dominios delegados (o zonas).

Una de las principales razones para tener al menos tres servidores para cada zona, es permitir que la información de la zona misma esté disponible siempre y de forma confiable, hacia los Clientes DNS, a través de Internet cuando un servidor DNS de dicha zona falle, esté fuera de servicio y/o esté inalcanzable.

Contar con múltiples servidores también facilita la propagación de la zona y mejoran la eficiencia del sistema en general al brindar opciones a los Clientes DNS si acaso encontraran dificultades para realizar una consulta en un Servidor DNS. En otras palabras: tener múltiples servidores para una zona permite contar con redundancia y respaldo, del servicio.

Con múltiples servidores, por lo general uno actúa como Servidor Maestro o Primario y los demás como Servidores Esclavos o Secundarios. Correctamente configurados y una vez creados los datos para una zona, es innecesario copiarlos a cada Servidor Esclavo o Secundario, pues éste se encargará de transferir los datos de manera automática cada vez que sea necesario.

Tipos de consultas hacia un servidor DNS.

Los Servidores DNS responden dos tipos de consultas:

Consultas Iterativas (no recursivas): El cliente hace una consulta al Servidor DNS y éste le responde con la mejor respuesta que pueda darse basada sobre su caché o en las zonas locales. Si es imposible dar una respuesta, la consulta se reenvía hacia otro Servidor DNS repitiéndose este proceso hasta encontrar al Servidor DNS que tiene la Zona de Autoridad capaz de resolver la consulta.
Consultas Recursivas: El Servidor DNS asume toda la carga de proporcionar una respuesta completa para la consulta realizada por el Cliente DNS. El Servidor DNS desarrolla entonces Consultas Iterativas separadas hacia otros Servidores DNS (en lugar de hacerlo el Cliente DNS) para obtener la respuesta solicitada.

Zonas de Autoridad.

Éstas permiten al Servidor Maestro o Primario cargar la información de una zona. Cada Zona de Autoridad abarca al menos un dominio y —posiblemente— sus sub-dominios, cuando estos últimos son imposibles de delegar a otras zonas de autoridad.

Las zonas de autoridad se crean en archivos de texto simple o registros de una base de datos. Deben incluir el tiempo total de vida (TTL) predeterminado, la información del servidor DNS principal y los registros que componen la zona. El contenido mínimo de éstos archivos debe ser el siguiente:

$TTL 3600
@    IN    SOA   dns1.dominio.com.    usuario.gmail.com. (
     2016091901; número de serie. Se recomienda sea en formato de fecha.
     7200; tiempo de refresco del registro SOA.
     900; tiempo a esperar entre un intento de consulta fallido y otro.
     1209600; caducidad del registro SOA en otros servidores DNS.
     3600; tiempo total de vida del registro SOA en otros servidores DNS.
     )
@    IN    NS    NS    dns.dominio.com.

A continuación se explican los registros usado arriba y el resto de los tipos de registro que se pueden utilizar.

Tipos de registros en la zonas de autoridad.

La información de cada Zona de Autoridad es almacenada de forma local en un archivo en el Servidor DNS. Este archivo puede incluir varios tipos de registros:

Tipo de Registro. Descripción.
A (Address) Registro de dirección que resuelve un nombre de un anfitrión hacia una dirección IPv4 de 32 bits.
AAAA Registro de dirección que resuelve un nombre de un anfitrión hacia una dirección IPv6 de 128 bits.
CNAME (Canonical Name) Registro de nombre canónico que hace que un nombre sea alias de otro. Los dominios con alias obtienen los sub-dominios y registros DNS del dominio original.
MX (Mail Exchanger) Registro de servidor de correo que sirve para definir una lista de servidores de correo para un dominio, así como la prioridad entre éstos.
PTR (Pointer) Registro de apuntador que resuelve direcciones IPv4 hacia los nombres anfitriones. Es decir, hace lo contrario al registro A. Se utiliza en zonas de Resolución Inversa.
NS (Name Server) Registro de servidor de nombres, que sirve para definir una lista de servidores de nombres con autoridad para un dominio.
SOA (Start of Authority) Registro de inicio de autoridad, encargado de especificar el Servidor DNS Maestro (o Primario) que proporcionará la información con autoridad acerca de un dominio de Internet, dirección de correo electrónico del administrador, número de serie del dominio y parámetros de tiempo para la zona.
SRV (Service) Registros de servicios, encargados de especificar información acerca de servicios disponibles a través del dominio. Protocolos como SIP (Session Initiation Protocol) y XMPP (Extensible Messaging and Presence Protocol) suelen requerir registros SRV en la zona para proporcionar información a los clientes.
TXT (Text) Registros de texto, encargados de permitir al administrador insertar texto arbitrariamente en un registro DNS. Este tipo de registro es muy utilizado por los servidores de listas negras DNSBL (DNS-based Blackhole List) para la filtración de Spam. Otro ejemplo de uso sería el caso de las VPN, donde suele requerirse un registro TXT, para definir una firma digital que será utilizada por los clientes.

Tipos de zonas de autoridad.

Las zonas que se pueden resolver son:

Zonas de Reenvío.

Devuelven direcciones IP para las búsquedas hechas para nombres FQDN (Fully Qualified Domain Name).

En el caso de dominios públicos, la responsabilidad de que exista una Zona de Autoridad para cada Zona de Reenvío, corresponde a la autoridad misma del dominio, es decir quien esté registrado como autoridad del dominio la base de datos WHOIS donde esté registrado el dominio. Quienes adquieren dominios a través de un NIC (por ejemplo: www.nic.mx), son quienes deben hacerse cargo de las Zonas de Reenvío ya sea a través de su propio Servidor DNS o bien a través de los Servidores DNS de su ISP.

Salvo que se trate de un dominio para uso en una red local, todo dominio debe ser primero tramitado con un NIC, como requisito para tener derecho legal a utilizarlo y poder propagarlo a través de Internet.

Zonas de Resolución Inversa.

Devuelven nombres FQDN (Fully Qualified Domain Name) para las búsquedas hechas para direcciones IP.

En el caso de segmentos de red públicos, la responsabilidad de que exista una Zona de Autoridad para cada Zona de Resolución Inversa, corresponde a la autoridad misma del segmento, es decir, corresponde a quien esté registrado como autoridad del bloque de direcciones IP, información que puede ser obtenida al consultar una base de datos WHOIS.

Los grandes ISP y algunas empresas son quienes se hacen cargo de las Zonas de Resolución Inversa.

Herramientas de búsqueda y consulta.

Uso de host.

Host es una herramienta simple para hacer consultas en Servidores DNS. Es utilizado para obtener las direcciones IP de los nombres de anfitrión y viceversa.

De modo predeterminado, realiza las consultas en los Servidores DNS que estén definidos en el archivo /etc/resolv.conf del anfitrión local, pudiendo definirse de manera opcional cualquier otro Servidor DNS.

host www.alcancelibre.org

Lo anterior realiza una búsqueda en los Servidores DNS definidos en el archivo /etc/resolv.conf del sistema, devolviendo como resultado una dirección IP.

host www.alcancelibre.org 8.8.8.8

Lo anterior realiza una búsqueda en los Servidor DNS en la dirección IP 8.8.8.8, devolviendo una dirección IP como resultado.

Uso de dig.

Dig (domain information groper) es una herramienta flexible para realizar consultas en Servidores DNS. Realiza búsquedas y muestra las respuestas que son regresadas por los servidores que fueron consultados. Debido a su flexibilidad y claridad en la salida, es que la mayoría de los administradores utilizan dig para diagnosticar problemas de DNS.

De modo predeterminado, realiza las búsquedas en los Servidores DNS definidos en el archivo /etc/resolv.conf, pudiendo definirse de manera opcional cualquier otro Servidor DNS. La sintaxis básica sería:

dig @servidor dominio.tld TIPO

Donde servidor corresponde al nombre o dirección IP del Servidor DNS a consultar, dominio.tld corresponde al nombre del registro del recurso que se está buscando y TIPO corresponde al tipo de consulta requerido (ANY, A, MX, SOA, NS, etc.)

Ejemplo:

dig @8.8.8.8 alcancelibre.org MX

Lo anterior realiza una búsqueda en el Servidor DNS en la dirección IP 8.8.8.8 para los registros MX para el dominio alcancelibre.org.

dig alcancelibre.org NS

Lo anterior realiza una búsqueda en los Servidores DNS definidos en el archivo /etc/resolv.conf del sistema para los registros NS para el dominio alcancelibre.org.

dig @8.8.8.8 alcancelibre.org NS

Lo anterior realiza una búsqueda en los Servidor DNS en la dirección IP 8.8.8.8 para los registros NS para el dominio alcancelibre.org.

Uso de whois.

Es una herramienta de consulta a través de servidores WHOIS. La sintaxis básica es:

whois dominio.tld

Ejemplo:

whois alcancelibre.org

Lo anterior regresa la información correspondiente al dominio alcancelibre.org.

Modificaciones necesarias en el muro cortafuegos.

Es necesario abrir en el muro cortafuegos el puerto 53 (dns), tanto por TCP como UDP.

System-config-firewall.

Ejecute lo siguiente:

system-config-firewall

Y habilite DNS y aplique los cambios.

Habilitando el puerto 53 TCP/UDP en system-config-firewall
Herramienta system-config-firewall habilitando el puerto 53 por TCP y UDP.

Servicio iptables.

Ejecute lo siguiente:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

Ejecute lo siguiente para guardar los cambios:

service iptables save

O bien edite el archivo /etc/sysconfig/iptables:

vim /etc/sysconfig/iptables

Y añada el siguiente contenido:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

Para aplicar los cambios, reinicie el servicio iptables:

service iptables restart

Firewalld.

Si utiliza Firewalld —asumiendo que la red pública está en la zona public y que la red de área local está en la zona home— sólo ejecute lo siguiente:

firewall-cmd --zone=public --add-service=dns
firewall-cmd --zone=home --add-service=dns

Y haga las reglas permanentes:

firewall-cmd --permanent --zone=public --add-service=dns
firewall-cmd --permanent --zone=home --add-service=dns

Shorewall.

Edite el archivo /etc/shorewall/rules:

vim /etc/shorewall/rules

Las reglas para permitir el acceso al servidor DNS en el anfitrión local corresponderían a algo similar a lo siguiente:

#ACTION	SOURCE	DEST	PROTO 	DEST		SOURCE
#				PORT		PORT(S)1
ACCEPT	all	fw	tcp	53
ACCEPT	all	fw	udp	53

Para permitir a los clientes de una red de área local puedan hacer uso de servidores DNS en Internet, es necesario abrir la salida para el puerto 53 (dns), por TCP y UDP.

Las reglas correspondería a algo similar a lo siguiente:

#ACTION	SOURCE	DEST	PROTO 	DEST		SOURCE
#				PORT		PORT(S)1
ACCEPT	all	fw	tcp	53
ACCEPT	all	fw	udp	53
ACCEPT	loc	net	tcp	53
ACCEPT	loc	net	udp	53

Lo anterior permite acceder hacia cualquier dirección IP que responda por los puertos 53/TCP y 53/UDP permitiendo acceder hacia cualquier servidor DNS que los usuarios de la red de área local prefieran, lo cual puede ser aprovechado por programas como Your Freedom o Ultrasurf para brincar las restricciones de un servidor proxy. Por tal motivo es que conviene ajustar las reglas mencionadas arriba para que sólo permitan el acceso hacia las direcciones IP de los DNS del proveedor de servicio de acceso hacia Internet. El siguiente ejemplo restringe el acceso hacia Internet permitiendo utilizar sólo los servidores DNS de Google:

#ACTION	SOURCE	DEST	PROTO 	DEST		SOURCE
#				PORT		PORT(S)1
ACCEPT	all	fw	tcp	53
ACCEPT	all	fw	udp	53
ACCEPT	loc	net:8.8.8.8	tcp	53
ACCEPT	loc	net:8.8.4.4	udp	53

Reinicie el servicio para aplicar los cambios:

service shorewall restart