En esta oportunidad veremos como instalar y configurar un servidor DNS con Bind9 en Debian 4.0 Etch. El protocolo de DNS (Domain Name System) es el que básicamente permite realizar la traducción entre un nombre de una página Web como lo entendemos nosotros (por ejemplo www.vensign.com) a una dirección IP (172.30.30.1) que es lo que realmente entienden los servidores en Internet. Es un servicio fundamental y sin el simplemente no existiría Internet como la conocemos hoy en día.

BIND9 es un servidor de DNS de código abierto, gratis y que es utilizado por la gran mayoría de los servidores DNS que existen en Internet.

Voy a suponer que tienes un cierto nivel de conocimientos de Linux (no mucho se requiere realmente) solo que sepas abrir un terminal y escribir comandos eso es todo. Te aconsejo que sigas esta guía paso a paso para que le saques el mayor provecho.

Esta instalación fue probada en servidores Debian Etch 4.0. Funciona bien en servidores basados en Debian y en versiones de Ubuntu previas a 8.04.

Vamos a comenzar…

En este caso vamos a hacer la configuración típica de servidores DNS con un servidor primario o maestro con dirección IP 192.168.249.1 y un servidor secundario con dirección IP 192.168.249.2 en caso de que falle el primero. Se utilizará como dominio ejemplo ejemplo.lan

Instalando BIND 9.5

Esta parte aplica tanto para instalar el servidor maestro como el secundario, para esto ejecutamos los siguientes comandos como root:

apt-get update && apt-get upgrade

Para asegurarnos de tener actualizados nuestros repositorios:

apt-get bind9 dnsutils

Con esto se instala el servidor Bind9 y los dnsutils son varias utilidades de DNS que nos serviran más adelante para comprobar nuestro servidor.

Chroot Bind

Cuando se habla de realizar un Chroot a un servicio en Linux se refiere que se va a crear una jaula a su alrededor, esto se hace para medidas de seguridad sobre todo en servidores que están expuestos a Internet como es el caso de nuestros servidores DNS. Esto hace que el servicio se ejecute con su propio usuario dentro de directorios que no tienen privilegios de root para que si llegan a quedar comprometidos el atacante no pueda accesar a otros recursos del sistema.

Para hacer el Chroot de Bind ejecutamos los siguientes pasos:

/etc/init.d/bind9 stop

Para detener el bind

Luego apuntamos el archivo de configuración al directorio que vamos a crear para el Chroot:

vim /etc/default/bind9

Puedes utilizar el editor de tu preferencia en cambio de vim (puede ser nano, emacs, etc)

Y modificamos la línea que dice OPTIONS=”-u bind” por:

OPTIONS="-u bind -t /var/lib/named"

Luego creamos los directorios necesarios para el Chroot

mkdir -p /var/lib/named/etc
mkdir /var/lib/named/dev
mkdir -p /var/lib/named/var/cache/bind
mkdir -p /var/lib/named/var/run/bind/run

Ahora movemos la configuración del Bind de /etc a /var/named/etc:

mv /etc/bind /var/lib/named/etc

Creamos un link simbólico entre la configuración vieja y la nueva para no tener problemas cuando se actualice el Bind:

ln -s /var/lib/named/etc/bind /etc/bind

Luego creamos los dispositivos necesarios para la jaula:

mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8

Y por último modificamos los permisos necesarios:

chmod 666 /var/lib/named/dev/*
chown -R bind:bind /var/lib/named/var/*
chown -R bind:bind /var/lib/named/etc/bind

Con esto ya creamos la Jaula y Bind tiene su propio espacio de directorios para sus procesos.

Ahora debemos modificar sysklogd para que se registren (log) los eventos del Bind:

vim /etc/default/syslogd

Puedes utilizar el editor de tu preferencia en cambio de vim (puede ser nano, emacs, etc)

Y modificamos la línea que dice SYSLOGD=”" por:

SYSLOGD="-a /var/lib/named/dev/log"

Ahora debemos modificar el archivo resolv.conf de nuestro servidor:

vim /etc/resolv.conf

Y agregamos la siguientes líneas (recuerda cambiar ejemplo.lan por tu nombre de dominio):

search ejemplo.lan
nameserver 127.0.0.1

Reiniciamos el sysklogd:

/etc/init.d/sysklogd restart

E iniciamos el Bind:

/etc/init.d/bind9 start

Este procedimiento lo tenemos que repetir para el servidor secundario.

Ahora vamos a configurar nuestros servidores.

Configurar Servidor Maestro

Ahora que tenemos el Bind9 instalado vamos a proceder a configurarlo, lo primero que vamos a hacer es decirle que envie las peticiones externas hacia el servidor DNS de nuestro ISP o hacia cualquiera que queramos, yo en lo personal utilizo OpenDNS. Para esto modificamos el archivo /etc/bind/named.conf.options:

vim /etc/bind/named.conf.options

Y descomentamos las líneas que dicen forwarders para que quede de la siguiente forma:

forwarders { 208.67.222.222 };

Recuerda utilizar la IP del DNS de tu ISP, también puedes utilizar la que está en el ejemplo ya que es la de OpenDNS.

Luego vamos a crear nuestra zona que no es más que lo que va a manejar nuestro dominio de ejemplo.lan para esto seguimos los siguientes puntos:

mkdir /etc/bind/zones/
vim /etc/bind/zones/master_ejemplo.lan

Luego dentro de este archivo colocamos la siguiente configuración:

$TTL 3D

@       IN      SOA     ns1.ejemplo.lan. hostmaster.ejemplo.lan. (
                        200808161       ; serial, fecha AAAA-MM-DD + serial
                        8H              ; refrescamiento, en segundos
                        2H              ; reentrar, segundos
                        4W              ; expira, segundos
                        1D )            ; minimo, segundos
;
                TXT     "Ejemplo.LAN, servicio de DNS"
                NS      ns1             ; Direccion Inet del servidor de dominio
                NS      ns2
                MX      10 mail        ; Exchanger de Mail primario
localhost    A    127.0.0.1
ns1          A    192.168.249.1
ns2          A    192.168.249.2
www          CNAME    ns1

Este es un archivo de Zona básico donde declaramos el dominio de ejemplo.lan, los servidores de dominio ns1 y ns2, además declaramos como servidor www (servidor web) a ns1 pero podría ser cualquier otro servidor donde tengas instalado Apache o algún otro servidor Web.

Ahora editamos el archivo /etc/bind/named.conf.local:

vim /etc/bind/named.conf.local

Y escribimos las siguientes líneas:

zone "ejemplo.lan" {
        type master;
        file "/etc/bind/zones/master_ejemplo.lan";
};

Ya con esto podemos probar nuestro servidor master a ver si funciona:

/etc/init.d/bind9 restart

ping ns1.ejemplo.lan

Deberia responder nuestro servidor ns1, recuerda que el servidor debe tener una dirección IP fija y que no debe estar corriendo ningún cliente dhcp.

Tambien podemos probar ejecutando:

host ns1.ejemplo.lan

Debería responder con la dirección de nuestro servidor.

Por útilmo para configurar nuestro servidor master modificamos el archivo /etc/bind/named.conf.options y agregamos la siguiente línea:

dnssec-enable yes;

Creamos una llave segura esto es para que la comunicación entre el servidor master y el secundario sea encriptada.

dnssec-keygen -a hmac-md5 -b 128 -n host ejemplo.lan

Anota el resultado ya que lo utilizaremos tanto en el servidor MASTER como en el SECUNDARIO.

Modificamos el archivo /etc/bind/named.conf y agregamos las siguientes líneas:

include "/etc/bind/rndc.key";

key "TRANSFER" {
        algorithm hmac-md5;
        secret "---HASHKEY---";
};

server 192.168.249.2 {
        keys {
        TRANSFER;
    };
};

Donde dice HASHKEY colocas la clave que generamos anteriormente. Y luego reiniciamos el servidor Bind:
/etc/init.d/bind9 restart

Con esto ya tenemos configurado nuestro servidor master vayamos ahora con nuestro servidor secundario.

Configurar Servidor Secundario o Esclavo DNS

La instalación del servidor Bind en el Secundario es exactamente igual que la del servidor Maestro, voy a mostrar sólo los archivos de configuración que necesitan modificación:

mkdir /etc/bind/zones/
vim /etc/bind/zones/slave_ejemplo.lan

Luego dentro de este archivo colocamos la siguiente configuración:

$TTL 3D

@       IN      SOA     ns1.ejemplo.lan. hostmaster.ejemplo.lan. (
                        200808161       ; serial, fecha AAAA-MM-DD + serial
                        8H              ; refrescamiento, en segundos
                        2H              ; reentrar, segundos
                        4W              ; expira, segundos
                        1D )            ; minimo, segundos
;
                TXT     "Ejemplo.LAN, servicio de DNS"
                NS      ns1             ; Direccion Inet del servidor de dominio
                NS      ns2
                MX      10 mail        ; Exchanger de Mail primario
localhost    A    127.0.0.1
ns1          A    192.168.249.1
ns2          A    192.168.249.2
www          CNAME    ns1

Esto es idéntico al master solo que identificamos como slave al archivo. Luego modificamos el archivo:

vim /etc/bind/named.conf.local

Y escribimos:

zone "ejemplo.lan" {
        type slave;
        file "/etc/bind/zones/slave_ejemplo.lan";
        masters { 192.168.249.1; };
        allow-notify { 192.168.249.1; };
};

Luego modificamos:

vim /etc/bind/named.conf

Y agregamos las siguientes líneas

server 192.168.249.1 {
        keys {
        TRANSFER;
    };
};

Y repetimos lo que hicimos de último con el servidor Maestro.

Modificamos el archivo /etc/bind/named.conf y agregamos las siguientes líneas:

include “/etc/bind/rndc.key”;

key “TRANSFER” {
algorithm hmac-md5;
secret “—HASHKEY—”;
};

server 192.168.249.1 {
keys {
TRANSFER;
};
};

Donde dice HASHKEY colocas la clave que generamos anteriormente. Y luego reiniciamos el servidor Bind:

/etc/init.d/bind9 restart

Ya con esto tenemos configurado el servidor Esclavo o Secundario, ahora debes indicarle a tus PC que que estan son las direcciones de servidores DNS primario y secundario que deben utilizar y si quieres probar que uno funciona cuando el otro se cae puedes detener el bind en cualquiera de los dos.

Espero que les haya servido este tutorial, cualquier duda, pregunta o sugerencia puedes dejar tu comentario y lo responderé a la brevedad posible.

Saludos

Olivers

Si quieres recibir notificaciones de cuando se publican nuevos artículos y tutoriales en Vensign por favor subscribete a nuestro boletín RSS.