title: Configurar djbdns como caché DNS date: 2004-02-11 10:54 ---

El servidor djbdns es más seguro, rápido, ligero y estable que BIND, y además es mucho más fácil de configurar. Su autor es Dan J. Bernstein, el mismo del conocido qmail. Lo configuraremos como caché DNS para mejorar los tiempos de respuesta de nuestras consultas.

djbdns es un paquete de herramientas para gestionar datos DNS. Cabe destacar dnscache (el servidor caché DNS) y tinydns (servidor de nombres autorizado), además de algunas utilidades con funciones similares a las de dig o nslookup.

La licencia es la misma que tiene qmail, se puede distribuir libremente y se puede modificar, pero distribuyendo las modificaciones en forma de parches y siempre como código fuente. Olvidemos los binarios.

Antes de instalar djbdns es necesario instalar las daemontools. En Debian es tan sencillo como hacer:

apt-get install daemontools-installer
apt-get install djbdns-installer

Tambien se puede instalar descargando los fuentes de daemontools-0.76 y de djbdns-1.05 y compilando directamente. De cualquiera de las dos formas es sumamente sencillo.

Una vez instalado djbdns pasamos a configurarlo como caché DNS. Tenemos un script para ello que realiza una configuración básica del servidor. Lo invocamos de la siguiente manera:

dnscache-conf dnscache dnslog /etc/dnscache xxx.yyy.zzz.www

dnscache y dnslog son usuarios del sistema que han sido creados por la instalación, /etc/dnscache es el directorio de configuración y de log y por último indicamos nuestra IP.

Para arrancar el servidor basta con crear un enlace en el directorio de servicios de las daemontools. Hacemos ln -s /etc/dnscache /service y a los pocos segundos tendremos en marcha nuestra caché DNS.

Ahora mismo el servidor solamente acepta conexiones provenientes desde 127.0.0.1, es decir, locales. Para añadir más usuarios tendremos que crear sus correspondientes entradas en /etc/dnscache/root/ip. Supongamos que queremos que se use la caché desde 192.168.13.1, 192.168.13.2 y desde la red 192.168.12.0. Pues haremos:

touch /etc/dnscache/root/ip/192.168.13.1
touch /etc/dnscache/root/ip/192.168.13.2
touch /etc/dnscache/root/ip/192.168.12

En esos equipos indicaremos la IP del nameserver en el /etc/resolv.conf, en 'Mis sitios de red' o donde sea necesario.

Los más curiosos o impacientes ya habrán descubierto la existencia del fichero /etc/dnscache/root/servers/@ que contiene unas cuantas IPs de servidores DNS. Podemos sustituirlas por la dirección del servidor DNS de nuestro proveedor. El servidor djbdns tambien soporta lo que se conoce como 'split horizon' o 'división de horizonte' y que es muy útil cuando usamos un dominio de la forma pepito.com para nuestra red interna. En ese caso simplemente crearemos el fichero /etc/dnscache/root/servers/pepito.com y en su interior pondremos la dirección de nuestro DNS para pepito.com. ¿Y si necesitamos resolución inversa para pepito.com? Pues crearemos /etc/dnscache/root/servers/zzz.yyy.xxx.in-addr.arpa con la IP del DNS y listos. No olvidemos hacer echo 1 > /etc/dnscache/env/FORWARDONLY para que nos funcione correctamente el invento.

Y ahora que hablamos de /etc/dnscache/env/, este directorio guarda los parámetros de funcionamiento de djbdns. FORWARDONLY, por ejemplo, indica que todas las consultas se pasarán a los servidores indicados en /etc/dnscache/root/servers. Otros dos, muy importantes, son CACHESIZE y DATALIMIT. En CACHESIZE indicamos el tamaño que tendrá nuestra caché en memoria (1 MB por defecto) y en DATALIMIT especificamos un máximo de memoria que se puede ocupar (3 MB por defecto). Este máximo se usa para prevenir posibles fallos del programa que le hagan ocupar más memoria de la debida ya que dnscache siempre ocupará la memoria designada en CACHESIZE.

La pregunta del millón es siempre qué cantidad de memoria vamos a necesitar. Normalmente tendremos de sobra con la asignada por defecto, sobretodo si usamos dnscache en el ordenador de casa para acelerar nuestras consultas DNS. Pero si lo vamos a usar en un entorno con unas cuantas máquinas, un proxy y un servidor de correo, por ejemplo, quizás necesitemos algo más. La mejor forma de controlarlo es mirar los ficheros de log de dnscache y controlar la cantidad de caché que estamos usando. Por ejemplo, si hacemos grep stats ../log/main/current obtendremos algo parecido a esto:

@40000000402a034b21d91b94 stats 2056 69641 1 0
@40000000402a034b23431b74 stats 2058 69875 1 0
@40000000402a034b2497169c stats 2059 70113 1 0
@40000000402a034b25e0e834 stats 2060 70351 1 0
@40000000402a034b272e7abc stats 2061 70585 1 0
@40000000402a03682c8890ec stats 2082 70996 1 0
@40000000402a036834161d34 stats 2083 71390 1 0
@40000000402a0386036c6d3c stats 2103 71572 1 0
@40000000402a0386084e59b4 stats 2104 71783 1 0
@40000000402a03860d51a90c stats 2105 71971 1 0
@40000000402a0393383e1c04 stats 2117 72022 1 0
@40000000402a03a4126fd74c stats 2135 72390 1 0
@40000000402a03cb3973d12c stats 2164 72717 1 0
@40000000402a03cc19a8b7cc stats 2165 72953 1 0
@40000000402a03d91e179ef4 stats 2174 73187 1 0
@40000000402a03d921d14f7c stats 2175 73224 1 0
@40000000402a03e3098fda64 stats 2185 73757 1 0
@40000000402a03e32db5705c stats 2190 74120 1 0
@40000000402a042214ae74dc stats 2234 74524 1 0
@40000000402a042217eecafc stats 2236 74785 1 0
@40000000402a042219248fc4 stats 2237 75040 1 0
@40000000402a04291a697b74 stats 2240 75262 1 0
@40000000402a0467267c803c stats 2292 75597 1 0
@40000000402a050309d5d08c stats 2402 75836 1 0
@40000000402a050315bcd79c stats 2403 76169 1 0

Bonito, ¿verdad? Las entradas stats nos muestran estadísticas de la caché. Si miramos la última linea podemos saber que desde que arrancó el servidor se han procesado 2403 consultas, ocupando 76169 bytes, se ha dejado una petición UDP sin responder y se han respondido todas las peticiones TCP (o no ha llegado ninguna). Podemos ver que en este caso nos sobra con 1 MB para la caché y que no necesitamos modificar nada.

Si no fuera el caso podemos modificar CACHESIZE y DATALIMIT, siempre teniendo en cuenta que DATALIMIT debe ser más grande que CACHESIZE. Para aplicar los cambios tendremos que reiniciar el servicio haciendo svc -t /service/dnscache.

Poco más queda por decir. Se puede encontrar información de djbdns en:

djbdns home page
D. J. Bernstein djbdns page
Life With djbdns
Mi vida con djbdns