Cómo configurar Servidores DNS Primario y Secundario con zonas inversas en Debian (Linux)

By Jose Alberto Gallardo Pérez sábado, 29 de noviembre de 2014
En esta práctica vamos a realizar la configuración de dos DNS en Debian Squeeze con bind9 que mantenga la estructura, tantos las zonas directas como inversas. Para ello vamos a seguir el siguiente esquema de red.




Qué vamos a aprender...

  • Instalar un Servidor DNS
  • Configurar un servidor DNS
  • Configurar un servidor DNS secundario
  • Configurar los registros SOA para que las transferencias de zona se realicen con el tiempo que queramos, en nuestro caso cada 1 minuto, con tiempo de reintento de 30 segundos y expiración 1 minuto y 40 segundos.
  • Añadir configuraciones seguras en ambos servidores, para que sólo podamos hacer una transferencia de zona al servidor DNS secundario y no a otros equipos.
  • Activar las notificaciones.
  • Comprobar el funcionamiento en una máquina configurando con un servidor DNS y con dos servidores DNS
  • Mostrar que se realicen las trasferencias de zona mediante el log y el archivo de zona transferido

1) Simulación en Máquinas Virtuales

Para que tu puedas hacerlo desde la comodidad de tu ordenador vamos a realizar esta tarea usando máquinas virtuales, en mi caso con Virtual Box. Para ello vamos a usar dos máquinas virtuales debian, a la que al final se añadirá una máquina Windows XP para comprobar que las transferencias de zona son las correctas.

DNS1 (Debian)

Con dos interfaces de red:
  • La primera en adaptador puente (para poder tener acceso a internet y poder instalar paquetes)
  • La segunda en red interna (La red debe llamarse igual que la de DNS2)

DNS2 (Debian)

Con una interfaz en red interna (con el mismo nombre que la de DNS1)


2) Instalación del servicio DNS

Para instalar DNS lo haremos con bind9, aunque suele ser necesario un update previo.

apt-get update
apt-get install bind9

3) Configuración previa del servidor DNS

a) Modificar nuestra IP

Para ello editaremos obviamente el archivo /etc/network/interfaces y lo dejaremos como el de la siguiente imagen.


b) Modificar los archivos /etc/resolv.conf  /etc/hosts  y /etc/hostname

Cambiaremos la IP de nuestro servidor (nameserver) por la ip que vayamos a usar para nuestro servicio DNS. En nuestro caso, cumpliendo con el esquema de arriba, vamos a usar la 10.0.0.2. Para ello vamos a ir al archivo /etc/resolv.conf  y modificaremos nameserver y le cambiaremos la IP. Si queremos podemos comentar los parametros de "domain" y "search".


A continuación también vamos a modificar /etc/hosts y vamos a cambiar lo que nos aparece en la segunda columna de la segundas línea por dns1.


Por último modificaremos el archivo /etc/hostname y también lo modificaremos y le pondremos el nombre dns1.


4) Configurando nuestro Servidor DNS en /etc/bind/

a) Defiendo una nueva zona 

Si entramos en la carpeta /etc/bind/ veremos diferentes archivos que nos van a servir para editar y configurar nuestro servidor DNS. Comenzaremos definiendo una nueva zona en el archivo named.conf.local. Añadiendo una nueva zona de tipo master (maestro) la cual tendrá un lugar para su configuración, el file que en nuestro caso de nuestra zona miempresa.org es /etc/bind/db.miempresa.



b) Creando el fichero db.miempresa

Para ello tomaremos como modelo el archivo db.local

cp db.local db.miempresa
nano db.miempresa

Al editar este archivo debemos tener en cuenta el significado de cada parámetro
  • @ > para esta zona
  • IN > introducir
  • SOA > Start of autority
  • localhost. > 127.0.0.1  
  • root.localhost. > root@localhost
  • NS > Nameserver
  • A > ipv4
  • AAAA > ipv6
  • ; > sirver para comentar
*IMPORTANTE: Todos los nombres en dns terminan en "."


Como podemos apreciar en la imagen hemos añadido los registros de tipo A que corresponden con los hosts del esquema de red que podéis ver arriba. Hemos añadido ns1, ns2, www y mail.

c) Repetir el mismo proceso para las redes "admin" e "informática"

Añadiendo la zona admin.miempresa.org en /etc/bind/named.conf.local



Crearemos el archivo db.adminempresa a partir de nuestro archivo db.miempresa

cp db.miempresa db.adminempresa
nano db.adminempresa


Añadiendo la zona informatica.miempresa.org en /etc/bind/named.conf.local


Crearemos el archivo db.infoempresa a partir de nuestro archivo db.miempresa

cp db.miempresa db.infoempresa
nano db.infoempresa


Para comprobar que estas zonas funcionan de forma correcta lo primero que haremos será reiniciar nuestro servidor DNS, para ello haremos.

service bind9 restart

A continuación haremos un nslookup y vamos a comprobar que funcionan hosts de las tres zonas que hemos creado...



4) Configurando las zonas inversas

Para configurar las zonas inversas lo que haremos será básicamente lo mismo que al crear las zonas "Directas". En /etc/bind/named.conf.local vamos a añadir las zonas inversas correspondientes a cada una de las zonas directas. En este caso debemos tener en cuenta varios aspectos.

  • Las IPs de nuestras zonas por ejemplo 10.0.0.0 | 10.0.1.0 | 10.0.2.0 las vamos a transformar en 0.0.10. | 1.0.10. | 2.0.10. respectivamente. Lo que hemos hecho es obviar el último octeto de nuestras IPs y darles la vuelta.
  • Además de esto, tras la IP vamos a escribir "in-addr.arpa" El porqué, no lo sé, pero es así ;D
Vamos a añadir cada una de las zonas inversas correspondientes a nuestro esquema de red. En esta ocasión el parámetro file irá con la ruta de los archivos que crearemos a continuación.


a) Configurando la zona inversa de miempresa.org "0.0.10.in-addr.arpa"

Copiaremos el contenido de db.miempresa en db.10.0.0

cp db.miempresa db.10.0.0

Como podemos ver en la siguiente imagen, vamos a modificar los registros tipo SOA que son A a PTR (que se usa para las zonas inversas). Y en este caso en la primera columna vamos a poner el último octeto de las IPs, por ejemplo 2 (correspondería a 10.0.0.2) y en la cuarta columna el host al que pertenece seguido de un punto, ns1. siguiendo el ejemplo.


b) Configurando la zona inversa de admin.miempresa.org "1.0.10.in-addr.arpa"

Para crear la zona inversa de admin.miempresa.org vamos a seguir el mismo proceso. En este caso vamos a copiar el contenido del archivo db.adminempresa en db.10.0.1

cp db.adminempresa db.10.0.1

Entramos al archivo db.10.0.1 y vamos a transformar los registros tipo SOA A en PTR y vamos a colocar el último octeto de las IPs de los host en la primera columna, y el correspondiente host en la cuarta columna.


c) Configurando la zona inversa de informatica.miempresa.org "2.0.10.in-addr.arpa"

Por último, para configurar el DNS inverso de informatica.miempresa.org vamos a copiar el contenido del archivo db.infoempresa en db.10.0.2

cp db.infoempresa db.10.0.2

Editamos el archivo y volvemos a cambiar los registros tipo SOA A por PTR, y modificamos las primeras columnas de los regitros poniendo el último octeto de las IPs los hosts y en la cuarta su correspondiente host de la red.


Una vez listo nuestro archivo named.conf.local y nuestros db.10.0.0 db.10.0.1 y db.10.0.2 que corresponden con el parametro file de las zonas inversas de named.conf.local lo siguiente que haremos es reiniciar nuestro servidor DNS.

service bind9 restart

Y como podemos comprobar en la siguiente imagen, si hacemos un nslookup de las IPs de los hosts, nos va a devolver correctamente los host correspondientes... Por ejemplo, nos devuelve mail al introducir 10.0.0.5.



5) Configuración de DNS Secundario

Un servidor DNS secundario nos puede servir por si se nos cae nuestro servidor DNS primario, o para realizar un balanceo de carga y que nos asista para repartir el trabajo. Podéis configurar tantos servidores DNS como queráis aunque en este caso vamos a crear uno.

En nuestro ejemplo vamos a levantar una segunda máquina virtual (debian) que en mi caso va a llamarse DNS2 con una interfaz en red interna (con el mismo nombre que la de DNS1). DNS2 tendrá la IP 10.0.0.3.



Obviamente tendremos que instalar como no, bind9 y vamos a crear las mismas zonas que en nuestro servidor DNS primario. Es decir, debemos crear cada una de las zonas en /etc/bind9/named.conf.local. Eso sí, debemos tener en cuenta varios aspectos:

  • Cambiar el type master por type slave en cada zona
  • Añadir el parámetro masters en cada zona seguido de la IP de nuestro servidor DNS primario que en este caso es 10.0.0.2. 
Si tenéis dudas, podéis hacer clic en las imágenes para agrandarlas.


A continuación reiniciamos nuestro servidor DNS2...


...Y vemos que ha importado los db del servidor DNS1 "Guay" ¿verdad?

a) Comprobando que nuestro Servidor DNS Secundario funciona.

Vamos a levantar una máquina virtual Windows XP por ejemplo, la cual va a tener una interfaz en red interna (la misma que DNS1 y DNS2) y la cuál vamos a configurar con la IP 10.0.0.111 y con el servidor DNS primario (10.0.0.2) y nuestro DNS secundario (10.0.0.3).


Ahora vamos a comprobar con un nslookup que nos responde ns1 y tiramos ns1, vemos que va a seguir respondiendo nuestro "suplente" el servidor ns2.


6) Transferencias de zona

Cuando tenemos más de un servidor DNS como en nuestro caso y queremos que cada cambio que realizamos en una zona en nuestro servidor DNS1 se transfiera a nuestro servidor DNS2 debemos tener en cuenta lo siguiente.


Si por ejemplo hemos metido un nuevo registro en db.miempresa "datab", para que surta efecto, debemos cambiar el Serial, en mi caso recomiendo sumar 1. Esto sirve para que nuestro servidor DNS secundario se de cuenta de que algo ha cambiado. En esta imagen de arriba también podemos observar como hemos cambiado "Refresh" (Refresco) a 1 minuto, "Retry" (Reintento) a 30 segundos y "Expire" (Expiración) a 1 minuto y 40 segundos.

Si nos vamos a nuestro Servidor DNS Secundario podemos comprobar que se importa

tail -f /sys/log/syslog



7) Configurar transferencias de zona seguras

Para configurar transferencias de zona seguras, debemos tapar una vulnerabilidad que por defecto tiene bind9. Cualquiera que haga un nslookup | set type=all | ls miempresa.org podrá ver los hosts que tenemos en nuestra red. Lo cuál dará pistas muy reveladoras para un futuro atacante.


Para solucionar esto, tenemos el parámetro allow-transfer que nos permite elegir los equipos a los que vamos a realizar la transferencia de zona. En mi caso sólo a nuestro servidor DNS secundario, por tanto pondremos la IP de nuestro servidor DNS secundario 10.0.0.3 en mi ejemplo. OJO!, esto habría que realizarlo en cada una de las zonas configuradas en nuestro servidor DNS primario.


Por último para comprobar que nuestro DNS1 sólo hace la transferencia de zona con DNS2, vamos a probar desde nuestra máquina Windows XP haciendo nslookup | set type=all ls miempresa.org y como podemos comprobar, tras configurar el parámetro allow-transfer correctamente, nos devolverá un gratificante "No se puede hacer una lista del dominio miempresa.org: Query refused"



José Alberto Gallardo Pérez

Soy un sevillano de 25 años, proyecto de ingeniero, profe de ajedrez, escéptico, loco, con mil ideas en la cabeza y poco tiempo para desarrollarlas. A veces me da por crear contenido en Monetizalia, Gallardowork, MusicCopyleft o donde estas ahora mismo.

1 comentario to ''Cómo configurar Servidores DNS Primario y Secundario con zonas inversas en Debian (Linux)"

ADD COMMENT
  1. Parece bien pero necesito me expliques algo de Bind y me saques de la duda, te dejo mi correo sistprof@hotmail.com
    Saludos

    ResponderEliminar