Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Año 2010
Pablo Volpe
Nombre de Archivos:
Dossier_DNS.doc
Presentacion_DNS.ppt
Protocolo DNS
(Domain Name Service / System)
(Servicio / Sistema de Nombre de Dominio)
Introducción
Es un protocolo de la pila de protocolos TCP/IP, ubicado en la capa de aplicación del Modelo OSI
Su función principal es la de Resolver de nombres de dominio. Está definido en el RFC 1034 y RFC 1035
desde 1987.
Utiliza los puertos 53 UDP y 53 TCP.
Reseña histórica
DNS fue diseñado inicialmente, ante necesidad de recordar fácilmente los nombres de todos los
servidores conectados a Internet. Antes de la implementación de DNS, Stanford Research Institute,
utilizaba un archivo HOSTS para referenciar todos los nombres de dominios conocidos. Ante esto, en
1983 Paul Mockapetris desarrolló una primera versión de DNS (Definido en los RFCs 822 y 833),
evolucionando en 1987 hacia el DNS actual. En 1984 se desarrolló la primera versión de un DNS bajo
UNIX, al que se le denominó BIND.
El servicio de nombres de dominio, es una base de datos distribuida, con información que se usa para
traducir los nombres de dominio, fáciles de recordar y usar por las personas, en direcciones IP que es la
forma en la que las máquinas pueden encontrarse en Internet. Dicha información se almacena en forma de
Registros (RR)
Nombres de dominio
El DNS basa su funcionamiento en un espacio de nombres que responde a una arquitectura jerárquica que
se asemeja a la estructura jerárquica de los sistemas de archivos de UNIX, la cual se representa con un
árbol invertido. El tope de esta jerarquía se representa por un punto “.” y cada nodo del árbol, en general,
representa una partición de la base de datos. Cada una de estas particiones es llamada dominio, los cuales
pueden a su vez ser divididos en subdomains subdominios.
Un nombre de dominio consiste en dos o mas etiquetas separadas por puntos cuando se las escribe en
forma de texto. Por ejemplo, www.google.com.uy o maps.google.com
A la etiqueta ubicada más a la derecha se donomina Dominio de Nivel Superior (TLD). Ej.: .uy en
www.google.com.uy o .com en maps.google.com
Existen TLD de dos tipos:
Territoriales (ccTLD - Country Code Top Level Domain): .uy - .ar - .br
Globales ( gTLD - Global Top Leve Domain): .com - .net - .tv - .org - .gub - .mil
Fully Qualified Host Name (FQHN): Es el “nombre completo” de un host. Está formado por el hostname,
seguido de un punto y su correspondiente nombre de dominio. Por ejemplo, “maps.google.com“
En teoría, esta subdivisión puede tener hasta 127 niveles, y cada etiqueta contener hasta 63 caracteres,
pero restringido a que la longitud total del nombre del dominio no exceda los 255 caracteres, aunque en la
práctica los dominios son casi siempre mucho más cortos.
En el DNS no existe una base de datos central con toda la información de los hosts de Internet. Por el
contrario la información es distribuida entre cientos de servidores de nombres (name servers). Esto
permite controlar por segmentos toda la base de datos en general, logrando que la información de cada
uno de estos segmentos este disponible a través de toda la red utilizando un esquema cliente - servidor.
Los programas llamados Name Servers (servidores de nombres) forma la parte del servidor en el
mecanismo cliente - servidor de DNS. Los name servers contienen la información de un segmento de la
base de datos y la ponen a disposición de los clientes.
Los clientes son llamados Resolvers, los cuales son rutinas de librería que crean preguntas y las envían a
través de la red a los servidores.
Tipos de servidores.
Existen cuatro tipos diferentes de servidores de resolución de nombres:
Máster (maestro). Aloja los registros autoritarios de una zona, responde las peticiones de resolución de
nombres como servidor de autoridad y delega copias a los servidores esclavo.
Slave (esclavo). Responde a las peticiones de resolución de nombres como servidor de autoridad, pero la
información es distribuida por los servidores primarios. Se considera que como medida de seguridad, se
requiere al menos uno de estos, preferentemente independiente de la infraestructura del primario (red,
energia eléctrica y ubicación geográfica).
Caching-only (sólo de cache). Responde a las peticiones de resolución de nombres pero no es servidor de
autoridad, las respuestas las guarda en memoria por un período determinado.
Forwarding (de reenvío). Reenvia las peticiones a una lista de servidores de nombres.
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 y se encuentran distribuidos en
229 sitios en todo el mundo.
A continuación se detallan cada uno de los Root Servers:
Root Server A Root Server B Root Server C
IPv4: 198.41.0.4 IPv4: 192.228.79.201 IPv4: 192.33.4.12
IPv6: 2001:503:ba3e::2:30 IPv6: 2001:478:65::53 Nombre: c.psi.net
Nombre: ns.internic.net Nombre: ns1.isi.edu Empresa: Cogent
Empresa: VeriSign Empresa: USC-ISI Communications
Ubicación: Distrbuido en 6 Ubicación: Marina Del Rey, Ubicación: Distrbuido en 6
localidades (uso de unicast) Los California, U.S. localidades (uso de unicast):
Angeles, New York, Frankfurt, Software: BIND Herndon, Los Angeles, New
Hong Kong, Palo Alto, Ashburn York, Chicago, Frankfurt,
Software: BIND Madrid.
Software: BIND
Las únicas respuestas posibles son el nombre completo o que no se ha podido encontrar. Para que suceda
esto último tiene que darse que esa dirección IP no está en la base de datos DNS y por tanto devuelve que
no la ha encontrado. Una consulta recursiva nunca se redirecciona a otro servidor DNS.
Consulta Iterativa
En las consultas (o resoluciones) iterativas, el servidor no tiene la información en sus datos locales, por lo
que busca un servidor raiz y repite el mismo proceso básico (consultar a un servidor remoto y seguir a la
siguiente referencia) hasta que obtiene la respuesta a la pregunta.
El proceso de resolución normal se da de la siguiente manera:
El servidor DNS A recibe una consulta recursiva desde el cliente.
El servidor DNS A envía una consulta iterativa al DNS B (Root Server).
El DNS B refiere a DNS A otro servidor de nombres, incluyendo al DNS C.
El servidor DNS A envía una consulta iterativa a DNS C.
El servidor DNS C refiere a DNS A otro servidor de nombres, incluyendo a DNS D.
El servidor DNS A envía una consulta iterativa a DNS D.
El servidor DNS D responde.
El servidor A regresa la respuesta al Cliente
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.
Tipos de registro en un servidor de nombres
Un 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:
A (Address): Este registro se utiliza para traducir nombres de hosts del dominio en cuestión a direcciones
IP.
CNAME (Canonical Name): El nombre canónico es un alias para un host determinado. (No define una
dirección IP, sino un nuevo nombre.)
NS (Name Server): Especifica el servidor (o servidores) de nombres para un dominio.
MX (Mail Exchange): Define el servidor encargado de recibir el correo electrónico para el dominio.
PTR (Pointer): Especifica un "registro inverso", a la inversa del registro A, permitiendo la traducción de
direcciones IP a nombres.
TXT (Text): Permite asociar información adicional a un dominio. Esto se utiliza para otros fines, como el
almacenamiento de claves de cifrado, "DomainKeys" o "Sender Policy Framework".
Mensajes DNS
Un formato de mensaje DNS se utiliza para las consultas y respuestas de este protocolo. Este formato de
mensaje contiene cinco campos que ofrecen un lugar para la consulta planteada por el cliente, la respuesta
o respuestas proporcionadas por el servidor, y la información del encabezado que controla todo el
proceso. La tabla a continuación describe el formato DNS mensaje general, proporcionando un breve
resumen de cada una de sus campos y cómo se utilizan.
Header (Cabecera)
Contiene campos que describen el tipo de mensaje y aportan información importante al respecto.También
contiene los campos que indican el número de entradas en las otras secciones del mensaje.
Identificador:
Es un campo de 16 bits de identificación, generados por el dispositivo que crea el DNS. Este
identificador se copia en la respuesta correspondiente del servidor de nombres y se puede usar
para diferenciar respuestas cuando concurren múltiples consultas. Esto se utiliza en una forma
similar a cómo el identificador de campo se utiliza en muchos de los tipos de mensajes ICMP.
Banderas
Question (Pregunta)
Lleva uno o más "preguntas", es decir, las consultas de información que se envía a un servidor de
nombres DNS.
Las consultas DNS siempre contienen al menos una entrada en el campo “Question” que especifica lo que
el cliente en está tratando de averiguar.
Nombre de la pregunta (QNAME) (Tamaño variable):
Contiene el objeto, dominio o nombre de la zona que es objeto de la consulta, codificados usando la
notación estándar de nombre DNS.
Clase de pregunta
1 - IN - Internet
Answer (Respuesta)
Campo lleva uno o varios registros que responden a la pregunta del campo “Question”
Authority (Autoridad)
Contiene uno o más registros que apunten a los servidores de nombres autorizados que se pueden utilizar
para continuar con el proceso de resolución.
Additional (Adicional)
Transmite uno o más registros que contienen información adicional relacionada con la consulta que no es
estrictamente necesario para responder a las preguntas (preguntas) en el mensaje.
Los campos Answer, Authority y Additional son los lugares en el mensaje, donde los servidores DNS
colocan los registros (RR) para ser enviado de vuelta a un cliente que haya realizado una solicitud. Cada
campo consta de cero o más registros, y en teoría, cualquier registro se puede colocar en cualquier
sección.
Archivos involucrados
Es el archivo de arranque, que es leído por el demonio named cuando arranca para saber a qué dominios
va a servir y dónde encuentra las tablas de máquinas y direcciones IP.
Ubicación:
En RedHat
/etc/named.conf
En Debian
/etc/bind/named.conf
Archivos de zona
Los archivos de zona se suelen almacenar en el directorio /etc/bind/zones
(aunque no es obligatorio). Su escritura se realiza siguiendo la sintaxis adecuada
para los registros de recursos que se deseen incluir.
Si el archivo de zona es un archivo de zona directo, el nombre de dicho archivo
suele ser dominio.zone donde dominio es el nombre de la zona que se está
definiendo sin el punto final; si es un archivo de resolución inversa, el nombre del
archivo será direcciondered.in-addr.arpa donde direcciondered serán los octetos
de la Direccion de Red de las direcciones IP del dominio de manera invertida.
Directivas
Los archivos de configuración de Bind contienen además una serie de líneas o
directivas (a veces comentadas e ignoradas por el servidor, a veces
descomentadas y efectivas) donde se indican los parámetros de funcionamiento
del mismo. Las más importantes son:
directory
Con esta directiva se indica el directorio de trabajo de named. En él es donde
se almacena, entre otras cosas, los archivos de zona que copia del servidor
DNS primario (en el caso de que el servidor esté funcionando como servidor
secundario).
forwarders
En esta directiva se indican las direcciones IP de los servidores DNS a quien
consultará nuestro servidor en caso de no saber dar respuesta a una consulta.
zone
Estas directivas permiten declarar las zonas que tiene almacenadas el servidor.
Por defecto, el servidor cuenta con una serie de zonas que no se deben
modificar. En caso de querer añadir nuestras propias zonas, debemos hacerlo
manualmente al final del archivo. Se declaran de la siguiente forma:
zone "DOMINIO" {
type TIPO;
file "RUTA_ARCHIVO_ZONA";
masters { IP };
};
donde:
DOMINIO: se especifica el nombre de la zona que estemos definiendo. Se
escribe sin el punto final y entre comillas.
TIPO: se especifica master si es una zona de un servidor primario o slave si es
un servidor secundario.
RUTA_ARCHIVO_ZONA: indica la ruta completa hasta el archivo de zona que
contiene los datos relativos a la zona indicada en DOMINIO. Se escribe entre
comillas y solo se utiliza si el servidor es un servidor primario.
IP: especifica la dirección IP del servidor DNS primario del que solicitar una
transferencia de zona. Sólo se utiliza si el servidor es una servidor DNS
secundario.
Comandos utilizados
DIG
dig es una herramienta de linea de comandos disponible en prácticamente
cualquier distribución Linux (aunque también hay alguna versión para Windows)
que permite hacer consultas a un servidor DNS.
Permite comprobar tanto el mapeo de nombres a IPs como el mapeo inverso de
IPs a nombres, pero sólo sirve para Internet, ya que no mira en /etc/hosts (sólo
utiliza /etc/resolv.conf).
Su uso es:
dig opciones nombre tipo @servidor_dns
donde:
servidor_dns: nombre o IP del servidor DNS al que queremos dirigir nuestra
consulta, por ejemplo @dns1.nrc.ca. Si no especificamos este parámetro, dig
utilizará los servidores DNS listados en /etc/resolv.conf.
opciones: no es obligatorio utilizarlas. La más utilizada es +short que devuelve
una respuesta más corta o no devuelve nada si no encuentra respuesta. La
opción -x se utiliza para indicar a dig que queremos hacer una resolución
inversa.
nombre: es el nombre de dominio que se quiere resolver.
tipo: especifica el tipo de consulta. Valores posibles serían A (IP del servidor que
aloja al dominio; es la usada si no se especifica nada), NS (servidores DNS) o
MX (servidores de correo).
NSLOOKUP