Servidor doméstico de DNS con Ubuntu
January 14th, 2008Hoy 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
delicious
menéame
fresqui
