Servicios de DNS en FreeBSD

Alejandro Acosta

acosta@freebsd.org.mx

2002/10/07



1. Introducción

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.


2. Funcionamiento

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.


3. Requerimientos

Se espera contar con lo siguiente:


4. Configuración

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:

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:

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"

5. Conclusiones

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