Cada vez que nos comunicamos a través de algun servidor de red, ya sea para visitar una página web, para mandar un correo o descargar algun archivo, estamos haciendo uso de uno de los servicios más importantes de Internet: DNS, cuya función principal es la de convertir los nombres simbólicos a direcciones IP.
Si no existiera este servicio tendríamos que recordar todas las direcciones IP a las que quisieramos conectarnos en lugar de utilizar una descripción en letras mucho más fácil de recordar para los humanos habiendo varios millones de hosts en la red e incrementandose diariamente.
Aunque existen varias implementaciones para la resolución de nombres de dominio, en este documento nos centraremos en la versión del Internet Software Consortium BIND (Berkeley Internet Name Domain) desarrollado para varias plataformas Unix like, entre ellas FreeBSD, pero antes vamos a entender un poco como funciona el servicio de nombres.
Basicamente el sistema de nombres de dominio es una gran Base de datos que contiene información de hosts, esto es, el nombre de cada host asociado a su correspondiente dirección física en la red. Este nombre asignado al host junto con el nombre del dominio al que pertenece forma su nombre de dominio entero o FQDN (fully qualified domain name), utilizando este nombre el host puede ser contactado desde cualquier lugar. Cada nombre de dominio es una ruta dentro de un árbol de dominios, a la estructura jerárquica de este árbol se le conoce como espacio de nombres de dominio y es similar a un árbol de directorios de un sistema de archivos Unix.
La raíz del árbol es única y es representada por el DNS simplemente como "root" (en un sistema de archivos el equivalente sería la diagonal invertida "/"), y debajo de ella ramificaciones sucesivas de nodos, cada nodo puede llegar a tener hasta 127 subniveles y es representado por medio de un campo de tipo texto de hasta 63 caracteres de longitud.
No pueden existir dos nombres iguales de hosts en un dominio, pero si pueden dase esta situación si se encuentran ubicados en dominios diferentes, asi como podemos tener un /usr/bin y un /bin en un mismo sistema de archivos podemos tener un host1.freebsd.org.mx y un host1.freebsd.net.mx .
Para resolver un nombre, el servidor de DNS realiza una serie de consultas hacia otros servidores que son autoritarios dependiendo del nombre a buscar hasta llegar al servidor que le brinde una respuesta directa a su petición de resolución, supongamos que el servidor trata de encontrar a www.freebsd.org.mx, lo primero que hace es consultar al servidor raíz del árbol este no puede darle una respuesta directa pero lo referencía al servidor autoritario del dominio mx , este a su vez lo redirige al registro que tiene como servidor autoritario de DNS del dominio en cuestión y finalmente cuando se consulta a este último se puede tener una respuesta directa de la dirección que tiene www.freebsd.org.mx, entonces el servidor puede retornar la respuesta al programa que originó la petición y guarda en cache los datos para una solicitud posterior, en caso de existir.
Se espera contar con lo siguiente:
Una dirección IP real en caso de que el servicio de nombres sea para el exterior
Los datos del dominio a configurar y la lista de hosts incluidos en él
Una configuración de red existente y funcional en el equipo a utilizar
FreeBSD viene preparado desde la instalación del sistema para empezar a funcionar inmediatamente como un servidor de nombres, es recomendable realizar una actualización del sistema base mediante cvsup antes de pasar a la configuración del dominio.
Vamos a definir los datos para un dominio interno sobre el que basaremos la configuración:
Dominio freebsd.org.mx
Hosts y direcciones IP
fbsd-mx-dns.freebsd.org.mx 10.2.77.38
infiernos.freebsd.org.mx 10.2.77.47
huapango.freebsd.org.mx 10.2.77.48
fbsd-mx-mail.freebsd.org.mx 10.2.77.50
Lo primero que necesitamos hacer es crear los archivos de registros para la resolución en el directorio /etc/namedb ingresando los datos que definimos:
fbsd-mx-dns# cd /etc/namedb
fbsd-mx-dns# ee freebsd.org.mx
Donde ingresaríamos lo siguiente:
$TTL 3600
@ IN SOA fbsd-mx-dns.freebsd.org.mx. root.freebsd.org.mx. (
20011024 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS freebsd.org.mx.
IN A 10.2.77.38
IN NS fbsd-mx-dns.freebsd.org.mx.
IN A 10.2.77.38
freebsd.org.mx. IN MX 10 fbsd-mx-mail.freebsd.org.mx.
localhost IN A 127.0.0.1
fbsd-mx-dns IN A 10.2.77.38
www IN A 10.2.77.38
fbsd-mx-mail IN A 10.2.77.50
infiernos IN A 10.2.77.47
huapango IN A 10.2.77.48
;
; Aliases
;
ftp IN CNAME huapango
Salvamos y procedemos a crear el archivo de resolución inversa para el dominio conteniendo lo siguiente:
$TTL 3600
@ IN SOA fbsd-mx-dns.freebsd.org.mx. root.freebsd.org.mx. (
20011024 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS fbsd-mx1.freebsd.org.mx.
38 IN PTR fbsd-mx-dns.freebsd.org.mx.
38 IN PTR www.freebsd.org.mx.
47 IN PTR infiernos.freebsd.org.mx.
48 IN PTR huapango.freebsd.org.mx.
50 IN PTR fbsd-mx-mail.freebsd.org.mx
48 IN PTR ftp.freebsd.org.mx.
Vamos a explicar un poco los registros contenidos en estos archivos:
TTL se refiere al tiempo de vida por omisión
SOA, Autoridad para esta zona (Start of authority)
NS, lista un servidor de nombres para la zona
A, mapeo de nombre a dirección IP
MX, intercambiador de correo para la zona (Mail exchanger)
CNAME, nombre canónico para alias
PTR, mapeo de dirección IP a nombre
También necesitamos un archivo localhost.rev:
$TTL 3600
@ IN SOA fbsd-mx-dns. root.fbsd-mx-dns.freebsd.org.mx. (
20011024 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS fbsd-mx-dns.freebsd.org.mx.
1 IN PTR localhost.freebsd.org.mx.
Ahora podemos pasar a editar el archivo de configuración principal named.conf para definir nuestro dominio y en donde va a encontrar la información para la resolución de nombres.
// $FreeBSD: src/etc/namedb/named.conf,v 1.6.2.5 2002/02/04 18:24:21 ume Exp $
//
options {
directory "/etc/namedb";
zone "." {
type hint;
file "named.root";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
};
zone "freebsd.org.mx" {
type master;
file "freebsd.org.mx";
};
zone "77.2.10.IN-ADDR.ARPA" {
type master;
file "freebsd.org.mx-rev";
};
Aquí estamos definiendo que el directorio en donde estarán alojados los archivos de configuración de las zonas es /etc/namedb, y definimos 2 zonas, una que es nuestra zona raíz y la zona freebsd.org.mx que será un servidor DNS maestro y su respectivo reverse.
Editamos el archivo /etc/resolv.conf para que utilice el servidor de nombres que acabamos de definir.
domain freebsd.org.mx
nameserver 127.0.0.1
nameserver 10.2.77.38
Y ahora ya podemos iniciar el servidor DNS desde la consola para revisar si hay algún error en la configuración:
fbsd-mx-dns# ndc start
En el archivo /var/log/messages debemos ver algo como esto confirmando que el servidor inició correctamente:
Oct 7 06:04:25 fbsd-mx-dns named[8999]: starting (/etc/namedb/named.conf).
named 8.3.2-T1B Fri Jun 21 07:03:03 CDT 2002 root@fbsd-mx-dns.freebsd.org.mx:/usr/obj/usr/src/usr.sbin/named
Oct 7 06:04:25 fbsd-mx-dns named[8999]: limit files set to fdlimit (1024)
Oct 7 06:04:25 fbsd-mx-dns named[9000]: Ready to answer queries.
El servidor ya se encuentra en pleno funcionamiento y listo para la acción, solo nos resta modificar el archivo /etc/rc.conf para que el servicio se inicie automáticamente agregando la siguiente directiva.
named_enable="YES"
Como se puede apreciar, la configuración de servicios de resolución de nombres es un poco elaborada pero no dificil de realizar y se recomienda mantener al día la seguridad del software que utilicemos aplicando los parches tan pronto estén disponibles en la red. En la sección de administración de red avanzada del Handbook de FreeBSD pueden encontrar más información acerca de servicios DNS y como ejecutarlos en forma enjaulada.
acosta@freebsd.org.mx