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.