Configuración del servidor DNS en Debian

Inicio
Última actualización: 16 de diciembre, 2008

Tabla de Contenido

Introducción

Berkeley Internet Name Domain (BIND) es una implementación del protocolo Domain Name System (DNS), ampliamente usado para resolver nombres y números IP en Internet.

Si el computador está permanentemente conectado a Internet, puede resultar ventajoso instalar BIND para mantener una tabla local con todos los nombres que resuelve el DNS autoritativo de la red.

Ingresa a root, por ejemplo, corriendo un "Terminal de <Root>" en el menú "Aplicaciones/Accesorios" o, en el mismo menú, un "Terminal" y luego el comando su (super user).

Configuración de un DNS local

Instala el paquete bind9,

# apt-get install bind9

Edita el archivo /etc/bind/named.conf.options,

# nano /etc/bind/named.conf.options

para que lea,

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you might need to uncomment the query-source
        // directive below.  Previous versions of BIND always asked
        // questions using port 53, but BIND 8.1 and later use an unprivileged
        // port by default.

        query-source address * port 53;

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        forwarders {
                200.89.70.3;
                200.89.70.70;
        };

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

En forwarders, reemplaza los números IP de los servidores de nombres de la red. Estos deberían ser los mismos del archivo /etc/resolv.conf indicados en el instructivo nameserver.

Edita /etc/resolv.conf y modifícalo para que lea,

search ciencias.uchile.cl
nameserver 127.0.0.1

En donde search indica el dominio de la red. Reemplaza ciencias.uchile.cl por el dominio correspondiente.

Reinicia el daemon de BIND (named) con,

# /etc/init.d/bind9 restart

y luego reinicia la red,

# /etc/init.d/networking restart

Lo que hemos hecho es transformar a localhost (127.0.0.1) en el servidor de nombres, que a través de BIND hace requerimientos a los DNS de la red.

Para ver el servidor DNS local en acción da el comando,

$ dig ftp.cl.debian.org

Retornará a la pantalla la consulta al DNS autoritativo,

$ dig ftp.cl.debian.org

; <<>> DiG 9.3.4 <<>> ftp.cl.debian.org
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30162
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;ftp.cl.debian.org.             IN      A

;; ANSWER SECTION:
ftp.cl.debian.org.      3600    IN      CNAME   
debian.ciencias.uchile.cl.
debian.ciencias.uchile.cl. 43200 IN     A       200.89.74.17

;; AUTHORITY SECTION:
ciencias.uchile.cl.     43200   IN      NS      ns1.uchile.cl.
ciencias.uchile.cl.     43200   IN      NS      ns2.uchile.cl.

;; ADDITIONAL SECTION:
ns1.uchile.cl.          4246    IN      A       200.89.70.3
ns2.uchile.cl.          4246    IN      A       200.89.70.70

;; Query time: 804 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Apr 27 09:43:31 2007
;; MSG SIZE  rcvd: 158

La primera consulta tardó 804 milisegundos (Query time). Repetir el mismo requerimiento será prácticamente instantáneo. El servidor ahora consulta su propia tabla, en dónde existe guardada una entrada con la información sobre ftp.cl.debian.org,

$ dig ftp.cl.debian.org

; <<>> DiG 9.3.4 <<>> ftp.cl.debian.org
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31974
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;ftp.cl.debian.org.             IN      A

;; ANSWER SECTION:
ftp.cl.debian.org.      3566    IN      CNAME   
debian.ciencias.uchile.cl.
debian.ciencias.uchile.cl. 43166 IN     A       200.89.74.17

;; AUTHORITY SECTION:
ciencias.uchile.cl.     43166   IN      NS      ns1.uchile.cl.
ciencias.uchile.cl.     43166   IN      NS      ns2.uchile.cl.

;; ADDITIONAL SECTION:
ns1.uchile.cl.          4212    IN      A       200.89.70.3
ns2.uchile.cl.          4212    IN      A       200.89.70.70

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Apr 27 09:44:05 2007
;; MSG SIZE  rcvd: 158

Configuración de un DNS primario

La configuración avanzada de BIND aquí presentada es apta para un servidor Debian con número IP estático y conectadot permanentemente a Internet.

Para definir un nuevo dominio y hacer que el servidor actúe como su DNS autoritativo, necesitas primero haber comprado un dominio en un registro de nombres de dominio (NIC), por ejemplo en NIC Chile 1, y definir el servidor de nombres primario del nuevo dominio con el número IP y FQDN del servidor BIND.

Vamos a usar de ejemplo el dominio ficticio.cl.

Edita /etc/bind/named.conf.local y agrega al final del archivo,

zone "ficticio.cl" {
        type master;
        file "/etc/bind/db.ficticio.cl";
        allow-query { any; };
};

Crea el archivo /etc/bind/db.ficticio.cl y agrega,

;
; archivo BIND para zona ficticio.cl
;
$TTL    604800
@       IN      SOA     ficticio.cl. hostmaster.ficticio.cl. (
                1       ; Serial
                          86400         ; Refresh
                           7200         ; Retry
                        1209600         ; Expire
                          10800 )       ; Negative Cache TTL

ficticio.cl.    IN      NS      ns1.ficticio.cl.
ficticio.cl.    IN      NS      ns2.ficticio.cl.
ficticio.cl.    IN      MX      1 ns1.ficticio.cl.
ficticio.cl.    IN      MX      2 ns2.ficticio.cl.

localhost       IN      A       127.0.0.1
ficticio.cl.    IN      A       100.10.10.10

ns1             IN      A       100.10.10.10
ns2             IN      A       100.10.20.20

www             IN      A       100.10.10.10
smtp            IN      A       100.10.10.11

El instructivo TTL (Time To Live) indica la validez (en segundos) de la consulta, tras la cual deberá ejecutarse una actualización. 604800 segundos equivalen a una semana.

El número Serial debería incrementarse cada vez que se modifica la zona. El campo Refresh indica el intervalo de tiempo que los DNS secundarios deben refrescar la información del archivo de zona si han habido cambios (1 día). Retry indica el intervalo de tiempo que los DNS secundarios deben reintentar actualizar la información si el DNS primario no responde (2 horas). Expire indica el tiempo que el DNS secundario expira como servidor de nombres de la zona en caso el DNS primario no responda a requerimiento de actualización (2 semanas). Negative Cache TTL indica el TTL en caso de una consulta con respuesta negativa (3 horas).

Modifica todas las ocurrencias de ficticio.cl por el dominio pertinente. Todas ellas deben terminar con un punto. ns1 debe llevar el número IP del DNS primario, es decir, el servidor BIND. ns2 define el DNS secundario. Puede ser el mismo servidor BIND, otro, o el que habilita el registro de nombres de dominio, generalmente en forma gratuita, por ejemplo, secundario.nic.cl.

En este ejemplo, ficticio.cl y www.ficticio.cl apuntan al mismo número IP. Esto no debe necesariamente ser así.

Si tienes un cortafuego, habilita el puerto 53 UDP y TCP hacia requerimientos por la interfase que va a servir BIND.

Reinicia named con,

# /etc/init.d/bind9 restart

Configuración de un DNS secundario

El DNS primario debe apuntar ns2 al servidor BIND que va a actuar de DNS secundario.

Edita named.conf.local en el DNS primario y agrega a la zona el instructivo allow-transfer,

zone "ficticio.cl" {
        type master;
        file "/etc/bind/db.ficticio.cl";
        allow-query { any; };
        allow-transfer { 100.10.20.20; };
};

en donde allow-transfer debe llevar el número IP del servidor DNS secundario indicado en el archivo de zona.

Edita named.conf.local en el DNS secundario y agrega al final del archivo,

zone "ficticio.cl" {
        type slave;
        file "/etc/bind/db.ficticio.cl";
        allow-query { any; };
        masters { 100.10.10.10; };
};

en donde masters debe llevar el número IP del servidor DNS primario indicado en el archivo de zona.

Si tienes un cortafuego, habilita el puerto 53 UDP y TCP hacia requerimientos por la interfase que va a servir BIND.

El usuario de sistema bind en el DNS secundario necesita permisos para modificar archivos en el directorio /etc/bind,

# chmod g+ws /etc/bind

Reinicia named con,

# /etc/init.d/bind9 restart

Reinicia named en el servidor DNS primario también. El DNS primario enviará un requerimiento de actualización al DNS secundario y éste creará una copia exacta del archivo de zona /etc/bind/db.ficticio.cl.

Copyright © 2002-2008 Ricardo Yanez

  [1] - http://www.nic.cl

This document was generated using AFT v5.096