Creación de un entorno de simulación de redes locales mediante VirtualBox

Instalación y configuración del servidor DNS

1. Instalar y configurar el servidor

# yum install bind

La instalación por defecto del servidor BIND viene configurado para hacer de caché a la máquina local. Editamos el fichero de configuración, en /etc/named.conf, e introducimos los siguientes cambios dentro de la sección options {...};:

  1. Cambiamos la opción listen-on para que incluya la IP de la interfaz de la red interna (192.168.128.3):
    listen-on port 53 { 127.0.0.1; 192.168.128.3; };
    listen-on-v6 port 53 { none; };
  2. Le permitimos servir al resto de máquinas de la red. Para ello modificamos la opción allow-query para que sirva a las máquinas de la red local, determinada por la expresión 192.168.128.0/24:
    allow-query { localhost; 192.168.128.0/24; };
  3. Volviendo a nuestro ejemplo, el primer paso es configurar qué servidores utilizará cuando se le pida resolver un nombre que no se corresponda a una de las zonas que el gestiona. Para ello incluimos la opción forwarders en la sección options {};, tal que así:
    forwarders { 80.58.61.250; 80.58.61.254; };
    Las direcciones a poner aquí dependerán de tu ISP. En mi caso pude conocerlas simplemente consultando los servidores que el dispositivo conectado a Internet ha recibido desde el anfitrión mediante el comando:
    # cat /etc/resolv.conf
    En otros casos puede ser necesario consultar los servidores DNS directamente del router ADSL.
  4. En caso de que entre nuestra máquina y la red exterior (pública o privada) haya un cortafuegos, se deben incluir las siguientes tres sentencias para asegurarse de que BIND utiliza el puerto 53 en vez de puertos sin privilegios:
    query-source address * port 53;
    transfer-source * port 53;
    notify-source * port 53;

Aún queda por configurar las “zonas” del servidor DNS. La zona podemos verla como el .xxx en que se agrupan las máquinas. Por ejemplo, si contrato un dominio pública, tal que example.com, deberé configurar un servidor DNS (generalmente este servicio nos lo ofrecerá el mismo ISP que nos vendió el dominio) que gestione los nombres de la máquina. Por tanto, la zona de ese servidor DNS será .example.com. Será misión de ese servidor resolver los nombres tales como smtp.example.com o makina.example.com. Como los servidores DNS configuran un sistema jerárquico, en algún lugar del mundo existirán los servidores DNS que gestionen los nombres de la zona .com.

2. Configurar la primera zona

Debemos crear dos ficheros con la configuración de las zonas directas e inversa. En la zona directa hay que incluir las asociaciones entre nombre e IP, y el zona inversa el mapa para encontrar el nombre asociado a la IP.

  1. Comenzamos creando el fichero /var/named/oceano.zone con el siguiente contenido:
    $TTL 172800     ; 2 days
    oceano.               	IN SOA  caistro.oceano. hostmaster.oceano. (
                                    2013020800 ; serial
                                    28800      ; refresh (8 hours)
                                    7200       ; retry (2 hours)
                                    604800     ; expire (1 week)
                                    86400      ; minimum (1 day)
                                    )
                            NS      caistro.oceano.
                            MX      10 caistro.oceano.
    $ORIGIN oceano.
    caistro                 A       192.168.128.3
    dns			CNAME	caistro
    mail			CNAME	caistro
    vbhost			A	192.168.128.1
    Este ejemplo lo puedes bajar con la dirección fichero en http://www.anadebreuil.org/man/RedVirtual/oceano.zone para usarlo como plantilla. Por ejemplo, con el comando
    # wget http://www.anadebreuil.org/man/RedVirtual/oceano.zone
    En Fedora el fichero debe pertenecer al usuario named y al grupo named, con los permisos suficientes. Por eso cambiamos la configuración de seguridad:
    # chown named:named oceano.zone
    # chmod 640 oceano.zone
    A continuación voy a tratar de explicar el sentido de algunos elementos del fichero de configuración:
    $ORIGIN
    Fija el sufijo por defecto de los nombres. Si observamos las primeras líneas vemos cómo se deben expresar los nombres: completamente calificados y siempre terminados en un punto, por ejemplo, caistro.oceano. o hostmaster.oceano. En caso de que queramos acortar, $ORIGIN es el sufijo a añadir cuando no pongamos el punto final. Así en la línea
    caistro  A  192.168.128.3
    el término caistro se interpreta como caistro.oceano. puesto que no termina con un punto y $ORIGIN tiene el valor oceano.
    $TTL
    Indica el tiempo de vida de las entradas, en segundos.
    SOA
    Se forma con una serie de parametros a tener en cuenta
    • Host Origen: Host donde se mantiene el archivo.
    • Correo electrónico: Del responsable de la BD. La arroba (@) se sustituye por un punto (.), debido a que @ representa el dominio raiz de la zona.
    • Numero de serie: La versión de ese archivo. Aumenta cada vez que el archivo cambia.
    • Tiempo de actualización: Tiempo que espera un servidor de nombres secundario para ver si el archivo ha cambiado, y por lo tanto pedir una transferencia de zona.
    • Tiempo de reintento: Tiempo que espera un servidor de nombres secundario para iniciar una nueva transferencia de zona en el caso de que falle este procedimiento.
    • Tiempo de caducidad: Tiempo que el servidor de nombres secundario intentará descargar una zona. Cuando pase, se rechaza la información antigua.
    • Tiempo de vida: Tiempo en el que el servidor de nombres mantiene la caché cualquier registro del recurso de este archivo en base de datos.
    NS
    El registro NS, siglas de Name Server, contiene los servidores de nombre de ese dominio, lo que permite que otros servidores de nombres vean los nombres de su dominio.
    MX
    El registro MX es el registro de Intercambio de correo (Mail eXchange). Indica que host se encarga del procesamiento del correo electrónico de ese dominio. Así, las direcciones user@oceano son dirigidas hacia el servidor indicado aquí.
    A
    Los registros de dirección A, (Address) asocian nombres de host a direcciones IP dentro de una zona.
    CNAME
    Estos registros son llamados también alias, si bien son conocidos como entradas de nombre canónico (CNAME, Canonical Name). Su uso más común es utilizar para apuntar a un único host más de un nombre, asi se simplifican procesos como albergar simultaneamente un servidor web y otro FTP en un mismo equipo.

    A modo de resumen, los registros de la zona oceano definen dos máquinas caistro.oceano y vbhost.oceano. La primera es la propia máquina que estamos configurando y la otra se corresponde con la IP que configuramos para conectar con el anfitrión. Además creamos los alias dns.oceano y mail.oceano para tener definidos estos nombres asociados a servicios específicos dentro de la zona.

    Puedes verificar la sintaxis del fichero de zona mediante el comando named-checkzone, por ejemplo:

    # cd /var/named
    # named-checkzone oceano. oceano.zone
  2. Configurar la zona inversa, escribiendo en el fichero /var/named/oceano.rev el siguiente contenido:
    $TTL 172800	; 2 days
    128.168.192.in-addr.arpa.	IN SOA	caistro.oceano. hostmaster.oceano. (
    				2013020800 ; serial
    				28800      ; refresh (8 hours)
    				7200       ; retry (2 hours)
    				604800     ; expire (1 week)
    				86400      ; minimum (1 day)
    				)
                            NS      caistro.oceano.
    $ORIGIN 128.168.192.in-addr.arpa.
    1			PTR	vbhost.oceano.
    3			PTR	caistro.oceano.

    Puedes bajarte este ejemplo en la dirección http://www.anadebreuil.org/man/RedVirtual/oceano.rev, pero acuérdate de ponerle los permisos de forma adecuada.

    La sintaxis del fichero es la misma que antes, pero ahora la zona es 128.168.192.in-addr.arpa., que es a la correspondiente a una red 192.168.128.0/24. Puedes distinguir dos partes: por una parte figura parte de la IP de la subred puesta en orden inverso y de otra la zona in-addr.arpa., que es una zona estándar para la resolución inversa de direcciones.

    • La zona in-addr.arpa. es dominio de segundo nivel destinado los servidores DNS inversos para direccion IPv4. Cuando realizas una búsqueda tal como
      # host 192.168.128.3
      la aplicación host lo que realmente hace es resolver contra DNS el nombre 3.128.168.192.in-addr.arpa., y nuestro servidor DNS responderá con el nombre caistro.oceano.. Puedes consultar más información en http://en.wikipedia.org/wiki/.arpa.
    • La IP se pone al revés por que la nomenclatura IP y DNS ordenan el nivel jerárquico al revés: en DNS los primeros términos designan máquina o subdominios de menos nivel que los siguientes, mientra que en IP las primera cifras son las redes en las que están contenidos el resto de cifras. Por tanto, para proyectar la IP en el servidor DNS inverso hay que invertir el orden de las cifras.

    De nuevo, puedes verificar la sintaxis del fichero de la zona inversa puedes utilizar de nuevo el comando named-checkzone:

    # named-checkzone 128.168.192.in-addr.arpa. oceano.rev

3. Configurar el servidor

  1. Crear la clave para permitir modificar dinámicamente la zona OCEANO (será el servidor DHCP quién lo haga). Para ello generamos la clave, mediante esta pequeña aplicación Shell, que puedes descargar en http://www.anadebreuil.org/man/RedVirtual/named.key.sh:
    #!/bin/bash
    
    while [ $# -gt 0 ]
    do
      keyname="$1" && shift
      keyfile=$(dnssec-keygen –a HMAC-MD5 –b 128 –p 3 –n HOST ${keyname})
      test -r ${keyfile}.key || exit 1
      keyconf="${keyfile}.named.conf"
      key=$(awk '{print $7}' ${keyfile}.key)
    cat > ${keyconf} <<EOF
    key ${keyname} {
    	algorithm HMAC-MD5;
    	secret "${key}";
    };
    EOF
      chown root:named ${keyconf}
      chmod 0640 ${keyconf}
    done
    y lo ejecutamos como root:
    # bash named.key.sh caistro
    # mv named.caistro.conf /etc
  2. Creamos el fichero /etc/named.oceano.conf y añadimos estas líneas para que cargue los ficheros de configuración de la zona:
    include "/etc/named.caistro.conf";
    
    zone "oceano" in {
    	type master;
    	notify no;
    	file "oceano.zone";
    	allow-update { key caistro; };
    };
    
    zone "128.168.192.in-addr.arpa" in {
    	type master;
    	notify no;
    	file "oceano.rev";
    	allow-update { key caistro; };
    };
    De nuevo, el fichero http://www.anadebreuil.org/man/RedVirtual/named.oceano.conf contiene este fichero para que lo descargues y personalices a tu caso.

    Sin profundizar en detalles, se configura el servidor DNS como servidor maestro de las zonas directa e inversa, como no hay servidores inferiores y es una red privada no hay nada que notificar a los servidores de rango superior, se indican los ficheros con los registros de zona y le indicamos que los servidores que le pasen la clave caistro están autorizados a modificar las zonas de forma dinámica.

  3. Por último, editamos el fichero /etc/named.conf e incluimos la configuración de la zona oceano:
    include "/etc/named.oceano.conf";

4. Arranque del servicio

Con eso podemos iniciar el servicio

# systemctl start named
# systemctl status named
# grep named /var/log/messages | less -S

Podemos probar el funcionamiento del servidor con las direcciones que hemos metido en las zonas con estos comandos:

# host caistro.oceano
# host vbhost.oceano
# host www.anadebreuil.org
# host 192.168.128.3
# host 192.168.128.1
# host 82.194.64.60

Si todo está correcto puedo habilitar el inicio del servicio al arrancar la máquina:

# systemctl enable named

Referencia: Fedora 17 System Administrators Guide. Chapter 12. DNS Servers.

Copyright © 2012 Mariano Martín Nevado Términos de uso