| « BIND, DNS Server | Conectarse a un movil GSM en Linux » |
Aprovecho la oportunidad para tocar el tema de BIND, el cual es el daemon que nos sirve como DNS Server.
Como no me había visto con la necesidad de configurar uno, solo hasta recientemente fue que hice una investigacion al respecto, sin embargo, creo que ya es hora; para esto me estaré apoyando de varias fuentes de documentación que mencionaré al final.
Entre los servicios más fundamentales en las redes TCP/IP tenemos el servicio de nombres, el cual es el servicio que traduce hostnames a direcciónes IP’s.
Los sistemas Linux usan básicamente dos técnicas para convertir hostnames a direcciónes:
a) La tabla de ‘host’ (/etc/hosts)
b) DNS (Domain Name System)
En el primer caso, el archivo /etc/hosts, es una tabla que traduce nombres a direcciónes. Es un archivo de texto simple en el cual se busca secuencialmente para aparear hostnames con direcciónes IP.
El sistema de Nombres de Dominio (DNS) es una base de datos jerárquica, distribuida por toda la internet a travez de miles de servidores.
Nota: Una Base de datos jerárquica es un tipo de Sistema Gestor de Bases de Datos que, como su nombre indica, almacenan la información en una estructura jerárquica que enlaza los registros en forma de estructura de árbol (similar a un árbol visto al revés), en donde un nodo padre de información puede tener varios nodos hijo.
El Archivo Hosts
Por ejemplo, el archivo hosts podría contener las siguientes entradas:
127.0.0.1 localhost 10.0.0.202 slackbox.localdomain slackbox 10.0.0.44 agonzalez.localdomain agonzalez 10.0.0.111 ylaborda.localdomain ylaborda 10.0.0.76 jrobinsonc.localdomain jrobinsonc
Cada entrada en el archivo /etc/hosts contiene una dirección IP y los nombres asociados con esa dirección.
La primera entrada en está tabla asigna el nombre ‘localhost’ a la dirección 127.0.0.1. (Cada computador corriendo TCP/IP asigna la dirección de loopback al nombre de host ‘localhost’). La red 127 es una red especial reservada para la red de loopback, y el host 127.0.0.1 es la dirección de loopback reservada para la maquina local.
La dirección de loopback es una convención (es decir, un estandard asumido por acuerdo general) que permite a la PC local referirse a sí misma de forma semejante a como lo hace con otros computadores en la red. Esto simplifica la programación de softwares ya que el mismo código puede ser usado para referirse a cualquier sistema, y ya que la dirección es asignada a la interfaz (lo), ningún tráfico es enviado a la red física.
La segunda entrada en el archivo es para el mismo ’slackbox.localdomain’. La entrada hace referencia al IP 10.0.0.202 y al alias slackbox. Los nombres de alias son usados generalmente para proveer un nombre mas corto, tambien para proveer nombres genericos como mailhost, news, www. Cada computador conectado a la red, que tiene un IP fijo tiene su propio hostname y dirección en la tabla de /etc/hosts.
Cada sistema Linux tiene una tabla ‘hosts’ con las dos entradas discutidas previamente.
Entendiendo DNS
Las limitaciones de la tabla de ‘hosts’ resulta obvia cuando es usada con un gran número de hosts. La tabla de hosts requiere que cada computador tenga una copia local de la tabla, y cada copia debe ser completa porque sólo las computadoras listads en la tabla de hosts local son accesibles por el nombre.
Si tomamos en consideración el Internet como lo conocemos hoy día: Tiene millones de hosts. Una tabla de ‘hosts’ con millones de entradas es muy ineficiente y, lo que es más importante, imposible de mantener. Los hosts son agregados y quitados del internet cada segundo. Ningún sistema podría mantener una tabla tan grande y variante, mucho menos si es distribuida en todos los computadores de la red.
El sistema de DNS rompe con esta problemática eliminando la necesidad de una fuente centralizada para mantener estas tablas, e introduce el concepto de tablas distribuidas de manera jerárquica. Actualmente la información acerca de DNS esta distribuida en decenas de miles de servidores.
Adicionalmente, El sistema de DNS usa una cache local para migrar información a aquellos que la necesiten, sin enviar información innecesaria. Un server de cache empieza con la información necesaria requerida unicamente para alcanzar la raíz de la base de datos jerárquica. Luego guarda todas las respuestas a queries de usuarios que recibe y toda la información adicional requerida para obtener dichas respuestas. De esta forma, construye una base de datos interna de la información que necesita proveer a sus usuarios.
La jerarquía DNS
La jerárquia de DNS puede ser comparada a la jerarquía del sistema de archivos en Linux. Nombres de host en dominios independientes, nombres de archivos paralelo en directorios individuales, y, al igual que el directorio raíz (root) del sistema de archivos, DNS tiene un dominio raíz.
En ambos, el sistema de archivos, y el sistema DNS, los nombres de los objetos revelan la estructura jerarquica arraigada. Los nombres de archivos van desde lo más general, la raíz (/), a lo mas específico, el fichero individual.
Los nombres de dominio comienzan con lo más específico, el host, y van hasta lo mas general, la raíz (.).
Un nombre de dominio que empiece por un host y vaya hasta la raíz se llama nombre de dominio completamente calificado (FQDN -Fully Qualified Domain Name-). Por ejemplo, packages.eSlackware.com es el FQDN de uno de los sistemas en mi red (asumiendo que hubiese tenido uno, llamado ‘packages’).
Los dominios de nivel superior (top-level, TLDs), tales como .org, .edu, .jp y .com son servidos por los servidores raíz. Los dominios de segundo nivel (second-level domain), eSlackware en nuestro ejemplo, es el dominio que ha sido oficialmente asignado a nuestra organizacion. Cuando se te ha asignado oficialmente un dominio por tu dominio padre, un se~nalador es puesto en el dominio padre el cual apunta hacia tu servidor como el servidor responsable por tu dominio. Es esta delegacion de autoridad lo que hace a tu dominio parte del conglomerado de sistema de dominios. La forma de delegar autoridad para subdominios es discutida más adelante.
La analogía del sistema de archivos va mas alla que solo la estructura de los nombres. Los archivos son encontrados al seguir una ruta desde la raíz hasta los directorios subordinados, hasta el directorio destino. La informacion de DNS es encontrada de una manera semejante. Linux aprende la ubicacion del directorio raíz en el proceso de booteo tomandola de lilo.conf (o grub.conf , para quienes usen eso). De manera similar, tu server de DNS localiza los servidores raíz durante el arranque al leer un archivo, llamado ‘hints file’ (archivo de pistas, en espa~nol), el cual contiene los nombres y direcciónes de los servidores raíz. (Vas a crear ese archivo mas adelante). A travez de consultaes, el server puede encontrar cualquier host en el sistema de dominios al empezar en la raíz y siguiendo se~naladores a travez de los dominios hasta que llegue al dominio destino.
Respondiendo Consultas
Para responder una consulta con respecto a la informacion de DNS, el servidor local debe:
a. Tener la respueta a la consulta o
b. Saber cual servidor de dominio la sabe.
Ningun sistema puede tener un completo conocimiento por si solo acerca de todos los nombres en la internet; los servidores saben acerca de sus dominios locales y construyen una cache acerca de otros dominios tomando una consulta a la vez.
Ok, veamos como funciona. Asumiendo que quieres acceder a la dirección http://www.eslackware.com. En efecto, estas pidiendo por el record de dirección para ‘www’ de la base de datos eslackware.com. Una consulta para el record de esa dirección viene al servidor de nombres local. Si el servidor se sabe la dirección de http://www.eslackware.com, respondera la consulta directamente. Si no se sabe la respueta, pero sabe cual servidor maneja eslackware.com, hara la consulta a ese servidor. Si no tiene informacion del todo, hara la consulta a los servidores raíz.
El servidor raíz no responde la consulta directamente. En cambio, le indica al server local cual servidor puede responder las consultaes para eslackware.com. Hace esto enviandole al servidor local un record nombre de dominio que dice el nombre del servidor para eslackware.com y el record de dirección que dice la dirección de ese servidor. El servidor local podra entonces hacer consultaes a eslackware.com y recibe la dirección para http://www.eslackware.com/.
De esta manera, el servidor local se entera de la dirección del host, así como el nombre y la dirección de los servidores para el dominio. Estas respuestas y los cachés se utilizan para responder directamente a consultas sobre el dominio www.eslackware.com sin molestar de nuevo los servidores raíz.
En el próximo artículo estaremos hablando acerca de BIND, y la resolución de dominios.
Todo esto antes de entrar en materia con lo más pesado (la configuración de named) en si mismo.
Cualquier comentario, sugerencia o duda, recuerden escribirme.
–
Jose P. Espinal
http://eslackware.com