Siempre me pasa igual, cada vez que instalo djbdns como cache de dns y servidor de dns para la red interna con los nombres para cada uno de los hosts internos de la red, se me olvida cómo hacer que funcionen los dos a la vez sin problemas.
Esta vez he decidido no olvidarlo más y nada como anotarlo en mi propio weblog.
Lo primero es instalar djbdns en debian.
1 | apt-get install daemontools-installer djbdns-installer |
Sigue la instrucciones para instalarlo, es bastante sencillo.
Una vez instalado hay que proceder a la configuración. Saber que el cache de dns lo gestionan cachedns y el servidor de nombres tinydns. Antes de nada hay que tener en cuenta que ambos servicios no pueden ni deben correr en la misma IP, así que deberemos tener al menos dos IP, física o sobrecargadas en la misma ethernet. No he probado si tinydns puede funcionar utilizando 127.0.0.1. Supongamos que tenemos estas IPs, 192.168.1.81 para el cache dns y 192.168.1.82 para tinydns.
Procedamos a configurar cachedns
1 | dnscache-conf dnscache dnslog /etc/dnscache 192.168.1.81 |
Se habrá creado automáticamente en /etc/ el directorio dnscache con un montón de carpetas y archivos, donde se encuentra la configuración del cachedns. Ahora sólo escucharía en 127.0.0.1:53, para que escuche y acepte conexiones de otras redes deberemos indicarlo de la siguiente manera
1 | touch /etc/dnscache/root/ip/192.168.1 |
en este momento aceptaría peticiones al 53 desde cualquier IP de la red 192.168.1.0. Realizado esto ya podemos levantar el servicio utilizando supervise, el demonio que instala daemontools, herramienta también de djb que antes instalamos junto a djbdns (¿recordais?)
1 | ln -s /etc/dnscache /service |
si no existiese el directorio /service, se crea y ya está. En 5 segundos de hacer el enlace simbólico supervise levanta cachedns.
En este momento ya atiende peticiones. Al principio tiene que ir recolectando las resoluciones de nombre y esto lo hace preguntándole a otros resolutores, como por ejemplo los DNS de nuestro proveedor. Para ello accede a este archivo /etc/dnscache/root/servers/@ donde hay una lista de IP donde cachedns puede «preguntar» para luego almacenar en su cache. En tail -f /etc/dnscache/log/main/current podréis ver cómo va preguntando y almacenando. Uhhhmmmm bueno, falta decirle a tu sistema cual es el nameserver así que vi /etc/resolv.conf y pondremos el primero de la lista de nameserver a 192.168.1.81
1 2 | cat /etc/resolv.conf nameserver 192.168.1.81 |
bueno, y ahora vamos a configurar el servidor nombres tinydns. La verdad es que me encanta esta herramienta porque nos olvidamos de los engorros de BIND, sus números de serie y sus mil archivos. En djbdns todo es simpleza, por no hablar de seguridad, robustez, velocidad, etc.
1 | tinydns-conf tinydns dnslog /etc/tinydns 192.168.1.82 |
al igual que cache de dns se ha creado el directorio /etc/tinydns
para levantar tinydns usamos de nuevo el supervise
1 | ln -s /etc/tinydns /service |
Bueno, ahora ya nos queda menos aunque lo más importante, crear el dominio interno de nuestra red y los hosts del dominio. Supongamos que tenemos 5 ordenadores en casa. Uno de ellos es el servidor web, otro el de dns y servidor de tiempo (ntpd) y los otros tres estaciones de trabajo. El dominio se va a llamar freemem. Vamos a hacer primero unas cosillas en dnscache y para que podamos tener un dominio interno utilizaremos una característica que tiene djbdns y que se llama «split horizon».
1 2 | echo 192.168.1.82 > /etc/dnscache/root/servers/freemem touch /etc/dnscache/root/servers/1.168.192.in-addr.arpa |
Para que funcione el invento
1 | echo 1 > /etc/dnscache/env/FORWARDONLY |
cd /etc/tinydns/root/
y ahora a definir los hosts. Editamos /etc/tinydns/root/data y lo ponemos parecido a esto
1 2 3 4 5 6 7 | #define el servidor de nombres autorizado .freemem::ns1.freemem =www.freemem:192.168.1.1=dns.freemem:192.168.1.81 =workstation1.freemem:192.168.1.2 =workstation2.freemem:192.168.1.3 =ns1.freemem:192.168.1.82 +ntp.freemem:192.168.1.81 |
y ahora a ejecuta el comando make. Ya sólo nos queda reiniciar dnscache
1 | svc -h /service/dnscache/ |
Ya solo quedaría poner en los resolv.conf de todos los hosts como nameserver 192.168.1.81
1 2 3 4 | cat /etc/resolv.conf domain freemem search freemem nameserver 192.168.1.81 |