Actualmente ando desarrollando un proyecto llamado cix.pe, que tiene por objetivo ofrecer dominios gratis en dicho dominio. La palabra "cix" es la abreviatura que usan las líneas aereas para hacer referencia a Chiclayo, la ciudad de donde es mi familia y donde crecí. La idea es potenciar el uso de Internet en la ciudad de Chiclayo ofreciendo un dominio gratuito al cual todos, desde simples usuarios hasta empresas puedan utilizar para desarrollar su identidad en Internet. El mayor problema que tenía era el implementar un par de servidores DNS que utilizara una base de datos, la opción más fácil sería usar MyDNS, proyecto Open Source que ofrece un servidor DNS que registra sus valores sobre una base de datos MySQL, ya lo utilizo actualmente para mis dominios pero me he dado cuenta de que es lento además de poco flexible y tengo en mente que el dominio cix.pe sea usado por miles, no por decenas. Por dicha razón inicie una búsqueda en la web para encontrar la solución a mi problema.
Las dos opciones que encontre y sobre las que me enfoque fueron MySQL BIND SDB Driver y Bind DLZ, ambos son parches sobre el popular servidor DNS BIND, el problema que encontre en ambos es que funcionan sobre versiones específicas de BIND y dichas versiones tienen vulnerabilidades conocidas, así que eso me desanimaba de usar dichas opciones, pensaba que tendría que utilizar MyDNS de todas formas, hasta que revisando distintos foros encontre una referencia a PowerDNS, que es un servidor DNS Open Source que tiene muy positivos comentarios, puede utilizar MySQL, PostgreSQL, SQLite, Oracle, DB2, LDAP y ODBC, además de ser multiplataforma. Lo mejor de todo es que Debian Etch y Lenny lo incluyen dentro de sus repositorios.
¿Por qué utilizar un servidor DNS que almacene sus configuraciones en una base de datos?, bueno hay dos razones para ello, la primera y más evidente es que es la forma más sencilla de contruir un control panel que permita a los usuarios actualizar sus configuraciones. La segunda razón es que si se almacena la configuración en una base de datos el proceso de reiniciar el servidor DNS cada vez que se aplique un cambio a la configuración de un dominio se evita completamente. Ofreciendo de esta manera actualización automática de las configuraciones, algo que en el caso de mi proyecto es altamente deseable.
La pregunta sería entonces ¿por qué seguir usando BIND o PowerDNS con archivos de configuración?, la respuesta esta en la forma como se opera. Tener toda la configuración en un archivo de texto significa que todos los dominios y sus configuraciones deben ser cargados a la RAM en el momento que se incia el servidor de nombre de dominio, esto por un lago agiliza enormente el procesamiento de las consultas, pero obliga a que cada cambio en el archivo de configuración necesite que el servidor DNS sea reiniciado. Si se resuelven cientos de miles de dominios, esta es sin duda la opción más eficiente, pero demanda de que el servidor cuente con suficiente RAM, algo que no es un problema en nuestros dias.
En el caso de poner la configuración en una base de datos, como MySQL por ejemplo, implica que cada consulta al servidor DNS deba generar un query a la base de datos para extraer la información necesaria desde alli. Como veran esto introduce un overhead en cada consulta, pero nos da la ventaja de que el servidor de nombre no deba ser arrancado si algun usuario cambio la configuración de su dominio, pues los cambios son dinámicos. En nuestros días los servidores son tan potentes que el overhead de cada query es bastante bajo, incluso en un servidor que deba de procesar miles de queries por segundo. Además si a eso le usamos lo sencillo que es construir un sistema de alta disponibilidad con una configuración de MySQL en master-slave las ventajas de usar un servidor de base de datos como backend para almacenar las configuraciones de los dominios son más que evidentes.
La instalación de un servidor PowerDNS en Debian Etch o Lenny es tan sencilla como ejecutar este comando como root:
# apt-get install mysql-server-5.0 mysql-client-5.0 mysql-common pdns-server pdns-doc pdns-backend-mysql
Tenga presente de que no es buena idea poner en un mismo servidor los servidores DNS Authoritative y Recursive (tambien conocido como DNS de cacheo), es por ello que intensionalmente no hemos instalado el paquete "pdns-recursor", queda a su criterio hacer eso.
Finalmente la configuración de PowerDNS con soporte para MySQL debe hacerse siguiendo los pasos descritos en el manual del producto en el Capítulo 4. Espero como siempre que esta información les haya sido de utilidad.