miércoles, 10 de enero de 2007

DNS - Linux

DOMAIN NAME SYSTEM (DNS)


1. HISTORIA
En la década de los 70, la red Arpanet, antecesora de Internet, estaba formada por un número pequeño de servidores. En un sencillo archivo HOST.TXT figuraban los pocos centenares de servidores que la componían. Para realizar cambios en este fichero, los administradores de los diferentes servidores enviaban las modificaciones por correo electrónico y recibían el nuevo fichero HOST.TXT actualizado por FTP. El organismo encargado de mantener el fichero era SRINIC.
El crecimiento explosivo de la red causó que el sistema de nombres centralizado en el archivo HOSTS no resultara práctico y en 1983, Paul Mockapetris publicó los RFCs 882 y 883.
En 1984 se creó el sistema de nombres de dominio DNS (Domain Name System), documentado en las RFC 882 y 883. (Estos RFCs han quedado obsoletos por la publicación en 1987 de los RFCs 1034 y 1035).

2. ASPECTO DESCRIPTIVO

El DNS ( Domain Name Service) es un sistema de nombres que permite traducir de nombre de dominio a dirección IP y viceversa. Aunque Internet sólo funciona en base a direcciones IP, el DNS permite que los humanos usemos nombres de dominio que son bastante más simples de recordar (pero que también pueden causar muchos conflictos, puesto que los nombres son activos valiosos en algunos casos).
El sistema de nombres de dominios en Internet es un sistema distribuido, jerárquico, replicado y tolerante a fallas. Aunque parece muy difícil lograr todos esos objetivos, la solución no es tan compleja en realidad. El punto central se basa en un árbol que define la jerarquía entre los dominios y los sub-dominios. En un nombre de dominio, la jerarquía se lee de derecha a izquierda.
Cada componente del dominio (y también la raíz) tiene un servidor primario y varios servidores secundarios. Todos estos servidores tienen la misma autoridad para responder por ese dominio, pero el primario es el único con derecho para hacer modificaciones en él. Por ello, el primario tiene la copia maestra y los secundarios copian la información desde él.
La raíz del sistema de dominios es servida por algunos servidores ``bien conocidos''. Todo servidor de nombres debe ser configurado con la lista de los servidores raíz bien conocidos (en general lo vienen de fábrica). Estos servidores dicen qué dominios de primer nivel existen y cuales son sus servidores de nombres. Recursivamente, los servidores de esos dominios dicen qué sub-dominios existen y cuales son sus servidores.



Existe un conflicto de competencia entre el servidor de un dominio y el de un sub-dominio: ambos deben saber cuales son los servidores de nombres del sub-dominio. En un inicio, estarán de acuerdo, pero con el tiempo los servidores pueden ir cambiando, y las versiones de ambos pueden ser inconsistentes. Actualmente, el que manda es el servidor del sub-dominio, y su información es la más importante.
El sistema DNS
El sistema DNS es en esencia una base de datos distribuida. Esta base de datos es jerárquica, al estilo de como lo son los sistemas de ficheros de UNIX. La raíz de la base de datos está representada por el nodo "." y cada uno de los nodos que descienden de ella reciben el nombre de dominios. En el sistema DNS cada dominio se hace cargo de la base de datos que depende de él.
En cada dominio puede haber a su vez servidores y otros dominios. Cada nombre de dominio se construye escribiendo los sucesivos nombres de dominio a los que pertenece el dominio hasta llegar al dominio raíz. Cada nombre se separa del siguiente mediante un punto y se escriben colocando a la izquierda los nodos inferiores. Por ejemplo el departamento imasd de la compañía acme, que operase en España recibiría el nombre: imasd.acme.es
El punto raíz no se pone. A un nombre de dominio que incluye todos los nodos hasta el raíz se le denomina nombre de dominio completamente cualificado (FQDN Full Cuallified Domain Name). En Internet por debajo del raíz los primeros nodos corresponden normalmente a países u organizaciones internacionales. Cada país tiene su propio dominio, y además existen otros para otro tipo de organizaciones. En el caso de Estados Unidos, la mayoría de los dominios pertenecen por razones históricas a los dominios edu, com, mil y gov.



3. ASPECTOS TÉCNICO

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 fichero hospedado 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.
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 forma confiable hacia los Clientes DNS a través de Internet cuando un servidor DNS de dicha zona falle, no esté disponible 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, no será necesario copiarlos a cada Servidor Esclavo o Secundario, pues éste se encargará de transferir los datos de manera automática cuando sea necesario.
Los Servidores DNS responden dos tipos de consultas:
• Consultas Iterativas (no recursivas): El cliente hace una consulta al Servidor DNS y este le responde con la mejor respuesta que pueda darse basada sobre su caché o en las zonas locales. Si no es posible 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.

Un servidor de DNS sirve para:
(1) traducir su nombre de dominio en una dirección IP.
(2) asignar nombres a todas las máquinas de una red y trabajar con nombres de dominio en lugar de IPs.

Desde un punto de vista técnico, un nombre de dominio es más fácil de recordar, además cuando una empresa tiene un servidor DNS (y su propio nombre de dominio) se le puede localizar más fácilmente por Internet.
Funcionamiento:
El sistema DNS es una base de datos distribuida mantenida por miles de servidores DNS, cada uno de los cuales es responsable de una "zona" de internet.
Cuando un programa cliente (por ejemplo, el navegador) hace una petición de una dirección internet, el servidor DNS del proveedor de acceso procesa la consulta, intentando buscar el dominio en su tabla de registros. Si no lo encuentra envía la petición a otro servidor DNS situado en un nivel superior de la jerarquía de nombres de dominios. Esta secuencia de peticiones se repite hasta que se obtiene la dirección IP del ordenador que corresponde al dominio consultado.
El servicio que registra tu dominio es el responsable de asociar tu nombre de dominio con el servidor DNS correspondiente, de manera que siempre queda asegurada su "visibilidad".
Beneficios:
• Conveniencia
Nombres conocidos por el usuario son más fácil de recordar que sus respectivas direcciones IP.
• Consistencia
Las direcciones IP pueden cambiar pero los nombres permanecen constantes.
• Simplicidad
Usuarios necesitan aprender solo un nombre para encontrar recursos ya sea en internet o en una Intranet.
Software Requerido:
Paquete. Descripción.
• bind Incluye el Servidor DNS y herramientas para verificar su funcionamiento.
• bind-libs Biblioteca compartida que consiste en rutinas para aplicaciones para utilizarse cuando se interactúe con Servidores DNS.
• bind-chroot Contiene un árbol de ficheros que puede ser utilizado como una jaula chroot añadiendo seguridad adicional al servicio.
• bind-utils Colección de herramientas para consultar Servidores DNS.
• caching-nameserver Ficheros de configuración que harán que el Servidor DNS actúe como un caché para el servidor de nombres.


Hardware Requerido:
• Requerimientos mínimos:
Servidor a 250 Mhz, 256 MB RAM, 8 GB disco duro
El proceso de resolución normal se da de la siguiente manera:
1. El servidor A recibe una consulta recursiva desde el resolver.
2. El servidor A envía una consulta iterativa a B.
3. El servidor B refiere a A otro servidor de nombres, incluyendo a C.
4. El servidor A envía una consulta iterativa a C.
5. El servidor C refiere a A otro servidor de nombres, incluyendo a D.
6. El servidor A envía una consulta iterativa a D.
7. El servidor D responde.
8. El servidor A regresa la respuesta al resolver.
9. El resolver entrega la respuesta al programa que solicitó la información.
Herramientas de búsqueda y consulta:
Mandato host
El mandato host una herramienta simple para hacer búsquedas en Servidores DNS. Es utilizada para convertir nombres en direcciones IP y viceversa.
De modo predefinido realiza las búsquedas en las Servidores DNS definidos en el fichero /etc/resolv.conf, pudiendo definirse opcionalmente el Servidor DNS a consultar.
host www.linuxparatodos.net
Lo anterior realiza una búsqueda en los Servidores DNS definidos en el fichero /etc/resolv.conf del sistema, devolviendo como resultado una dirección IP.
host www.linuxparatodos.net 200.33.146.217
Lo anterior realiza una búsqueda en los Servidor DNS en la dirección IP 200.33.146.217, devolviendo una dirección IP como resultado.
Mandato dig
El mandato 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 predefinido realiza las búsquedas en las Servidores DNS definidos en el fichero /etc/resolv.conf, pudiendo definirse opcionalmente el Servidor DNS a consultar. La sintaxis básica sería:
dig @servidor nombre TIPO
Donde servidor corresponde al nombre o dirección IP del Servidor DNS a consultar, nombre 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:
X dig @200.33.146.209 linuxparatodos.net M
Lo anterior realiza una búsqueda en el Servidor DNS en la dirección IP 200.33.146.209 para los registros MX para el dominio linuxparatodos.net.
dig linuxparatodos.net NS
Lo anterior realiza una búsqueda en los Servidores DNS definidos en el fichero /etc/resolv.conf del sistema para los registros NS para el dominio linuxparatodos.net.
dig @200.33.146.217 linuxparatodos.net NS
Lo anterior realiza una búsqueda en los Servidor DNS en la dirección IP 200.33.146.217 para los registros NS para el dominio linuxparatodos.net.

4. ANÁLOGOS

Servidores DNS incluidos en S.O. Windows 2000 Server, Windows 2003 Server y NT Server.

5. STANDARES

1. BIND (Berkeley Internet Name Domain) es el servidor de DNS más popular de Internet, y el más utilizado en entornos Unix/Linux. Hoy por hoy, sería imposible concebir Internet tal como es sin Bind, acaparando según diversas fuentes hasta el 90% de los servidores DNS de toda Internet.

Hay que tener en cuenta que la mayoría de la gente no necesita tener BIND instalado en su sistema. De hecho solo los servidores lo necesitan realmente. De vez en cuando surgen ataques ("exploits"), desde los típicos de denegación de servicio a verdaderas situaciones comprometedoras para el root. La mayoría de los servidores DNS están incorrectamente configurados y acaban en estas situaciones. Si se trabaja con un sistema doméstico, no se necesitará tener instalado BIND aunque por otro lado, si quiere acelerar la navegación por Internet, colocar un servidor de DNS como BIND permite colocar en cache las resoluciones de nombres, lo que es muy recomendable, sobretodo en servidores proxy.

Es muy importante tener siempre BIND bien actualizado, sobretodo en servidores Linux, pues en este servicio aparecen frecuentemente vulnerabilidades importantes.




2. MyDNS es un servidor DNS que se abastece de un soporte SQL donde van consignados los datos del servicio, en vez de ir en ficheros de texto plano como sucede en BIND. La ventaja que promulgan sus autores es obvia, la posibilidad de invocación de la SQL mediante interfaz web, lo que simplificaría la administración del servidor DNS. La replicación de servicios se hace mediante replicación SQL.


3. PowerDNS, que sólo responderá las consultas sobre la zona de la que es responsable, sin intentar encontrar información sobre otras. Fue liberado recientemente, y ahora están disponibles fuentes y binarios precompilados, igualmente bueno es el hecho de que la migración desde BIND no parece muy complicada.

4. MaraDNS es un sofisticado servidor de DNS pensado para responder a recurrentes problemas de seguridad creando un entorno totalmente seguro, basado en una librería muy eficaz ante posibles ataques de tipo “buffer overflow”. Además, no se ejecuta en root, sino como usuario distinto en entorno chroot.

5. Pdnsd es un servidor que hace de caché de DNS, única y exclusivamente, guardando en disco (lo que Bind perdería a la hora de reiniciar la máquina)

2 comentarios:

NellyVi dijo...
Este comentario ha sido eliminado por el autor.
Tim dijo...

I did a small writeup on how to use DiG. You can see how to use the tool at:
http://timarcher.com/?q=node/38