Servidor doméstico de DNS con Ubuntu

Hoy voy a explicar cómo configurar un servidor de DNS doméstico, con el objetivo de permitir utilizar nombres en vez de las direcciones IP, ya que éstas van aumentando, entre algún nuevo equipo que he comprado y las máquinas virtuales con las que estoy trabajando.

Actualmente tengo un Soekris haciendo de firewall y servidor DHCP, tanto para la red local como para la Wifi, sirviendo direcciones IP fijas a cada dispositivo. Lo que he hecho ha sido configurarlo para que haga de DNS forwarder hacia el servidor que tengo en casa, en el que he instalado el servicio de DNS. De esta forma cuando un equipo solicita por DHCP una dirección IP, se le indica cuál le corresponde y se le envía la IP del propio Soekris como servidor DNS. Cuando un equipo solicite resolver una dirección le preguntará al Soekris y éste redirigirá la consulta al servidor de DNS. Con esto si en algún momento falla el servidor, lo desconecto, o paro el servicio de DNS, el resto de equipos seguirán funcionando correctamente, ya que el Soekris utilizará los servidores DNS secundarios, que son los del proveedor ISP.

El primer paso que hay que realizar en el servidor es instalar el servidor bind, para lo cual instalaremos con apt-get o Synaptic el paquete bind9.

$ sudo apt-get install bind9

Una vez hecho esto lo que tendremos que hacer será configurar las zonas gestionadas por el servidor DNS. Para ello modificaremos el archivo /etc/bind/named.conf.local y escribiremos algo como lo siguiente.

# Este es un ejemplo de zona, sustituye example.com con el nombre de dominio que quieras utilizar en tu casa
zone "example.com" {
        type master;
        file "/etc/bind/zones/db.example.com";
        };
 
# Esto es la definición inversa de la zona, reemplaza 0.168.192 con la dirección de tu red en orden inverso (si tu red 192.168.0, utiliza 0.168.192)
zone "0.168.192.in-addr.arpa" {
     type master;
     file "/etc/bind/zones/rev.0.168.192.in-addr.arpa";
};

Ahora es necesario crear los dos archivos a los que se hace mención en el texto, db.example.com y rev.0.168.192.in-addr.arpa, dentro de la carpeta /etc/bind/zones.

$ sudo mkdir /etc/bind/zones
$ sudo cp /etc/bind/db.local /etc/bind/zones/db.example.com
$ sudo vi db.example.com

Dentro de este archivo introduciremos la información de todos los nombres de equipo y sus direcciones ip. En la segunda línea se indica el SOA (Start Of Authority), que especifica el servidor primario del dominio y la cuenta de correo del administrador. Introduciremos el nombre de nuestro dominio y la cuenta de correo del administrador, sustituyendo la @ por un punto (root@example.com sería root.example.com) y teniendo cuidado de no borrar los puntos finales tras los dominios.

$TTL    604800
@   IN  SOA example.com. root.example.com. (
         2007122901     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
@           IN      NS          servidor.example.com.
servidor    IN      A           192.168.0.1
www         IN      A           192.168.0.2
mysql       IN      A           192.168.0.3
tv          IN      A           192.168.0.4
desktop     IN      A           192.168.0.5

Asociado al campo SOA hay una serie de datos configurables, la mayoría de los cuales podemos dejar como están. El único que deberemos modificar es «Serial», que es un identificador del archivo y para el cual suele utilizarse la fecha actual con un correlativo. El resto de elementos del archivo hacen mención a los equipos de la red, indicando sus nombres y direcciones IP asociadas. La primera fila, la indicada por NS, indica que el servidor principal del dominio es el propio servidor, con nombre «servidor.example.com». El resto de líneas definen las direcciones IP asociadas a cada equipo. Por si te preguntas dónde está la información relativa a los MX, no he definido nada relativo a esto porque llevo el correo en un servidor externo, por lo que por ahora no me hace falta.

Tras esto hay que configurar la información inversa de la zona, para lo cual tomaremos como base la información de /etc/bind/db.127.

$ sudo cp /etc/bind/db.127 /etc/bind/zones/rev.0.168.192.in-addr.arpa
$ sudo vi /etc/bind/zones/rev.0.168.192.in-addr.arpa

Al igual que en el caso anterior hay que modificar la configuración SOA, tras lo cual, introduciremos una línea para cada nombre de equipo que hayamos definido en el archivo de la zona, indicando la parte final de su dirección IP (el comienzo es el 192.168.0 indicado en named.conf.local) y el nombre del equipo que le corresponde.

$TTL    604800
@       IN      SOA     example.com. root.example.com. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      servidor.example.com.
1       IN      PTR     servidor.
2   IN      PTR     www.
3   IN      PTR     mysql.
4   IN      PTR     tv.
5       IN      PTR     desktop.

Como último paso a continuación configuraremos los forwarders, modificando para ello el archivo /etc/bind/named.conf.options, de forma que cuando se le solicite información de algún dominio que no esté definido en el servidor, acuda a estos otros servidores para obtener la información. En mi caso he puesto los de telefónica.

$ sudo vi /etc/bind/named.conf.options
    forwarders {
         # Puedes reemplazar estas IP con las de tu ISP
         80.58.61.250;
         80.58.61.254;
    };

Una vez hecho esto ya habremos terminado de configurar el servicios, por lo que procederemos a reiniciar el servicio.

$ sudo /etc/init.d/bind9 restart

Ahora ya podemos comprobar el funcionamiento de lo que hemos realizado. Para ello lo más sencillo será utilizar el comando host preguntándole por los nombres de los equipos que hemos definido.

$ host servidor.example.com
servidor.example.com has address 192.168.0.1
$ host desktop.example.com
desktop.example.com has address 192.168.0.5

Si no funciona lo primero que deberemos revisar será el archivo /etc/resolv.conf para comprobar que el nameserver apunta al propio servidor. En este mismo archivo existe un parámetro de nombre search, el cual debería estar configurado con el nombre del dominio interno (example.com), de forma que cuando consultemos por un dominio no sea necesario utilizar su forma completa (desktop.example.com), sino que sea suficiente con el nombre del equipo (desktop).

Si todo es correcto podremos probar la resolución inversa, preguntando por el nombre de equipo asociado a una determinada IP.

$ host 192.168.0.1
1.0.168.192.in-addr.arpa domain name pointer servidor.
$ host 192.168.0.5
5.0.168.192.in-addr.arpa domain name pointer desktop.

Con esto ya tendríamos listo el servidor DNS para comenzar a trabajar con él. Por complicar un poco más el asunto, en mi caso dispongo también de una red wifi doméstica conectada a un puerto independiente del Soekris, con su propio segmento de red. Algunos de los equipos, especialmente el portátil, a veces se conecta por LAN y a veces por WiFi, obteniendo diferentes direcciones IP en cada caso. Para resolver este problema lo que he hecho ha sido crear una nueva zona, con el subdominio wifi.example.com, de forma que he metido dentro la información de los equipos que pueden estar en ella.

Referencias

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

6 Respuestas para “Servidor doméstico de DNS con Ubuntu”

  1. carlos soplopuco 04. Jul, 2008 en 12:40 am

    hola amigo, esta interesante tu articulo, tengo un problema a l momento de reiniciar el bind me sale el sgte error:
    que no se puede conectar a 127.0.0.1#923 y no se puede seguir,..lo curioso es que ya me salio una vez, luego lo quice hacer otra vez y me salio ese problema.
    ojala me contestes ..gracias

  2. yo tengo ese mismo error

  3. HOLA…LA PAGINA ESTA MUY INTERESANTE……..
    TENGO UNA DUDA COMO CONFIGURO MI DHCP

  4. les escribo sobre el servidor primario y el forwarder que son que es un servicio de comunicaciones

  5. El problema para los que se les cae el servicio de bind9 en mi caso era por el forwarder en el archivo named.conf.options yo en mi caso particular como mi dns es solo de uso interno para mi intranet no requiero esta opción del forwarder. Como te decía la persona que creo este post es solo para que en caso de que consulten por un dominio que no se encuentre declarado en tus archivos de zonas, se encargue de resolverlo un dns externo en este caso por lo general uno usa los de nuestro ISP (proveedor de servicios de internet).
    Como dije anteriormente yo no lo necesito por lo tanto simplemente no lo configuro, si es tu caso comenta la parte del forwarder con // asi no te tomara dicha configuración, si te da mas errores comenta…

Trackbacks/Pingbacks

  1. Servidor domestico | Curso Manual Tutorial - 17. Jun, 2010

    […] sobre el Servidor doméstico de DNS con Ubuntu. Descargar este archivo Red de portales: ConocimientosWeb – Cursos online – Diario Tecnológico – Zips del […]