Cómo actualizar manualmente un fichero de zona DNS en BIND con DNSSEC habilitado

Cuando se configura un fichero de zona DNS en BIND solía ser relativamente sencillo. Se actualizaba el número de serie del SOA y se realizaban los ajustes deseados. Cuando el servidor tiene actualizaciones dinámicas como es en el caso de DNSSEC conviene realizar unos pasos antes y después adicionales.

En un artículo anterior se mencionaba sobre el uso de DNSSEC utilizando un servicio libre de terceros. En esta ocasión este apunte trata de configuración de un servidor DNS propio con DNSSEC usando el servidor BIND del ISC.

A partir de la versión 9.16 es mucho más automático gracias a dnssec-policy default en las zonas. Entonces los ficheros que haya en rutas como /var/named (depende de la distribución y de la configuración en el named.conf) tendrán un conjunto adicional de ficheros, como los terminados en key, private y state, además de los ficheros journal (terminados en jnl).

La documentación de BIND suele detallar más o menos bien este proceso, este detalle trata de resumir un proceso típico de edición manual para tener un ejemplo práctico.

Imaginemos que se quiere agregar por ejemplo un servidor nuevo en libre.cr, por ejemplo cr2, y se agregan 2 RRs: AAAA y A para IPv6 e IPv4 respectivamente. Se tendría que modificar la zona libre.cr, que en este ejemplo está previamente configurada y ubicada en /var/named/libre.cr.db.

Antes de editar el fichero se hace un “flush” de la configuración dinámica. Cuando se ejecuta un freeze, se sincroniza el contenido del fichero del journal (jnl) en el fichero de la zona y ya es seguro editar. Es como si hubiera ejecutado un rndc sync. Mientras dure la congelación no funcionarán las actualizaciones dinámicas, por lo que conviene editar prontamente los cambios manualmente, sin olvidar actualizar el número de serie en el SOA. Finalmente debe descongelarse para que vuelvan a funcionar las actualizaciones dinámicas (thaw):

rndc freeze libre.cr
# editar cambios, guardar y salir del editor
rndc thaw libre.cr

Para comprobar que todo haya ido bien se puede verificar con systemctl status named donde se podrá observar que en caso de haber efectuado bien el cambio se firmarán los nuevos registros de la zona. Si en algún momento se desea ver los cambios dinámicos en el fichero de la zona se podría hacer otro rndc sync y comprobar el contenido del fichero de zona para comprobar que los nuevos campos agregados (A y AAAA) en el ejemplo tendrán sus correspondientes RRs (NSEC y RRSIG) indicando que ya se firmó la zona.

Si lo que se quiere es modificar valores existentes, por ejemplo agregar un MX adicional bajo la misma zona, entonces habrá que eliminar el RRSIG de MX para que al hacer rndc thaw se regenere, de lo contrario aparecerá corrupto.

Para verificar que la zona valida correctamente utilizando servidores DNS de terceros se puede utilizar el comando delv, por ejemplo delv AAAA cr2.libre.cr @9.9.9.9 donde indicará “fully validated” si todo fue bien. También se puede comprobar en algún servicio como en el sitio web dnsviz.net de forma visual si todo está en orden.

Este procedimiento de freeze, editar manualmente y thaw también funciona con zonas actualizadas dinámicamente en general aun sin DNSSEC, por lo que es una recomendación general para no tener problemas a la hora de editar ficheros de zona.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *