Instalar un cache de DNS sobre Ubuntu es realmente sencillo gracias a los paquetes de D.J.Bernstein.
En primer lugar debemos instalar el paquete dnscache-run y sus dependencias (daemontools daemontools-run djbdns dnscache-run ucspi-tcp)
apt-get install dnscache-run |
El svscan verifica dentro del directorio /service los programas a ejecutar, pero como esta carpeta no es creada durante el proceso de instalación arreglarlo y generar un enlace simbólico a /etc/dnscache
mkdir /service ln -s /etc/dnscache /service |
Ahora debemos configurar las variables de entorno de la siguiente manera:
Editamos /etc/dnscache/env/IP y modificamos el valor por defecto con nuestra IP.
vi /etc/dnscache/env/IP 192.168.1.10 |
y declaramos que redes pueden utilizar nuestro cache de DNS
touch /etc/dnscache/root/ip/192.168.1 touch /etc/dnscache/root/ip/10.10 |
El tamaño por default del cache es de 1M, se puede agrandar un poco cambiando las siguientes variables:
echo 100000000 > /service/dnscache/env/CACHESIZE echo 104857600 > /service/dnscache/env/DATALIMIT |
para ponerlo en funcionamiento debemos arrancar el servicio
/sbin/start svscan update-service --add /etc/dnscache |
Si queremos hacerla completa, podemos generar un script que actualice periódicamente los Root Hints. Si pegamos el siguiente código en /opt/actualizar_root_servers.sh y le damos permiso de ejecución (chmod +x /opt/actualizar_root_servers.sh) se puede agregar en el crontab para que se ejecute automáticamente.
#!/bin/bash # Fuente: http://thedjbway.b0llix.net/djbdns/dnsroots.html dnsip `dnsqr ns . | awk '/answer:/ { print $5; }' |sort` > /opt/root_servers_temp.txt 2>> /opt/actualizar_root_servers.log echo "`date` - Listado de root servers obtenido:" >> /opt/actualizar_root_servers.log cat /opt/root_servers_temp.txt >> /opt/actualizar_root_servers.log echo "`date` - Fin del listado de root servers obtenido" >> /opt/actualizar_root_servers.log # Si la cantidad de root servers es mayor que 8 cambiar la configuración NRO_ROOT_SERVERS=`wc -l /opt/root_servers_temp.txt |cut -d' ' -f 1` if [ $NRO_ROOT_SERVERS -ge 8 ]; then # echo $NRO_ROOT_SERVERS es mayor o igual que 10 echo "`date` - Se obtuvieron $NRO_ROOT_SERVERS servidores de DNS raiz que se usaran para actualizar la conf. de root servers" >> /opt/actualizar_root_servers.log cp /etc/dnsroots.global /etc/dnsroots.global.old cp /opt/root_servers_temp.txt /etc/dnsroots.global cp /etc/dnsroots.global /service/dnscache/root/servers/@ svc -du /service/dnscache else echo "`date` - Se obtuvieron $NRO_ROOT_SERVERS servidores de DNS raiz, no se modifica la conf. de root servers" >> /opt/actualizar_root_servers.log # echo $NRO_ROOT_SERVERS es menor que 10 fi |
Referencias:
- http://packetnexus.com/2010/12/how-to-install-djbs-dnscache-on-ubuntu-10-10/
- http://cr.yp.to/djbdns/dnscache.html