Administración de zonas DNS con nsupdate

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org

Licencia Creative Commons
© 1999-2026 Joel Barrios Dueñas. Este manual se distribuye bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0). Usted es libre de compartir y adaptar el material bajo los siguientes términos: debe dar crédito al autor, no puede utilizarlo para fines comerciales y debe compartir las obras derivadas bajo la misma licencia. La licencia completa está disponible en https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.es.

Introducción

Este documento requiere dominar los conceptos explicados en el manual Configuración de servidor de nombres de dominio (DNS) con BIND, que cubre la configuración básica del servicio.

Administrar las zonas DNS utilizando nsupdate permite realizar cambios de manera rápida y dinámica sin necesidad de editar archivos y reiniciar el servicio para aplicar las modificaciones. Impide que los errores de sintaxis provoquen una falla del servicio, ya que realiza validaciones de los registros antes de consignar los cambios.

nsupdate se utiliza para enviar solicitudes dinámicas de DNS hacia un servidor DNS, tal como se define en el RFC 2136. Permite añadir o eliminar registros de una zona sin tener que editar manualmente los archivos de zona. Una sola solicitud de actualización puede contener varias peticiones y añadir o eliminar más de un registro.

Una vez que se inicia el servicio DNS con zonas bajo control dinámico a través de nsupdate o mediante un servidor DHCP, jamás se deben editar los archivos de zona manualmente. Realizarlo puede ocasionar conflictos con las actualizaciones dinámicas y provocar pérdida de datos.

Para consultar la ayuda rápida de nsupdate, ejecute:

nsupdate --help

Para consultar el manual detallado, ejecute:

man 1 nsupdate

Presione la tecla q para salir de la página del manual.

Preparativos

Los procedimientos descritos a continuación asumen que se dispone de un entorno con al menos un servidor DNS configurado, ya sea en distribuciones modernas como AlmaLinux 8/9/10, Rocky Linux 8/9/10, Red Hat Enterprise Linux 8/9/10 o en ALDOS. Se recomienda tener dos servidores para replicar un entorno maestro-esclavo, aunque los ejemplos son válidos para un único servidor.

Para mantener coherencia pedagógica con los demás manuales, se utiliza el siguiente escenario de red estándar:

Todos los valores en los ejemplos siguientes utilizan este esquema. Por favor, modifique y personalice estos valores según su entorno real.

Procedimientos

Esta sección guía a través de los pasos necesarios para habilitar y utilizar actualizaciones dinámicas de DNS con nsupdate, abarcando desde la configuración de seguridad del sistema hasta la adición de registros de diversos tipos.

Políticas de SELinux

Es indispensable que SELinux permita al servicio named privilegios de lectura y escritura en los archivos de las zonas. Si SELinux se encuentra activo y aún sin configurar las políticas correspondientes, active la que permite la escritura de archivos de zona maestra ejecutando el siguiente mandato:

setsebool -P named_write_master_zones=1

Generar y configurar permisos de los archivos de zona

Genere el archivo de zona inicial para ejemplo.com ejecutando:

touch /var/named/dynamic/ejemplo.com.zone

Asigne los permisos de lectura y escritura para el usuario, sólo lectura para el grupo y ningún permiso para otros:

chmod 640 /var/named/dynamic/ejemplo.com.zone

Cambie el propietario y el grupo del archivo a named:

chown named:named /var/named/dynamic/ejemplo.com.zone

Añadir contenido inicial a los archivos de zona

Edite el archivo recién creado con su editor de texto preferido, por ejemplo:

vi /var/named/dynamic/ejemplo.com.zone

Añada el siguiente contenido como base para la zona dinámica:

$TTL 3600
@       IN      SOA     dns1.ejemplo.com.   admin.ejemplo.com. (
                        2025122301 ; Número de serie (AAAAAMMDDXX)
                        1800       ; Tiempo de refresco
                        900        ; Tiempo de reintento
                        1209600    ; Tiempo de expiración
                        3600       ; TTL mínimo (caché negativo)
                        )
@       IN      NS      dns1.ejemplo.com.
dns1    IN      A       192.168.100.2

Lo anterior define un tiempo de vida (TTL) predeterminado, el registro de inicio de autoridad (SOA), el registro de servidor de nombres (NS) correspondiente y el registro de tipo A para resolver el nombre dns1.ejemplo.com. Asegúrese de que los nombres de anfitrión lleven siempre un punto (.) al final.

Configurar zonas en el archivo /etc/named.conf

Edite el archivo de configuración principal de BIND:

vim /etc/named.conf

Añada la siguiente definición de zona maestra para el dominio ejemplo.com. Esta configuración permite realizar cambios dinámicos utilizando la firma digital del servidor (rndc-key) y autoriza a un servidor esclavo específico a transferir la zona:

    zone "ejemplo.com" {
        type master;
        file "dynamic/ejemplo.com.zone";
        allow-update { key "rndc-key"; };
        allow-transfer { 192.168.100.10; 192.168.100.2; };
        // ^ Incluir la IP propia (192.168.100.2) permite administración local
    };

Si su configuración utiliza vistas (views), añada esta definición dentro de la vista correspondiente (por ejemplo, view "local"). Utilice una plantilla de named.conf depurada, como la presentada en el manual de configuración de BIND, la cual elimina directivas obsoletas.

Reiniciar el servicio BIND

Para aplicar los cambios en la configuración, es necesario reiniciar el servicio named. El mandato varía según el sistema de inicialización:

Verifique que el servicio se haya iniciado sin errores consultando los registros del sistema (journalctl -xe) o el archivo de registro de BIND.

Conectarse al servidor DNS con nsupdate

Para comenzar a administrar la zona de manera dinámica, inicie la herramienta nsupdate cargando la clave de firma digital del servidor:

nsupdate -k /etc/rndc.key

Esto abrirá un intérprete interactivo representado por el símbolo >. A continuación, defina a qué servidor se conectarán las actualizaciones y sobre qué zona actuarán:

server 127.0.0.1
zone ejemplo.com

Si ocurre algún error durante las operaciones siguientes, deberá repetir estos tres pasos desde el principio para reconectarse.

Añadir registros a la zona

Una vez dentro del intérprete de nsupdate, puede añadir registros. Cada operación de update debe confirmarse con el mandato send.

Registros tipo A

Los registros de tipo A asocian un nombre de anfitrión a una dirección IPv4. Añada un registro para el servidor principal del dominio:

update add servidor.ejemplo.com. 86400 A 192.168.100.2
send

Añada el registro predeterminado para el dominio (también conocido como "registro raíz" o "apex"):

update add ejemplo.com. 86400 A 192.168.100.2
send

Registros tipo CNAME (alias)

Los registros CNAME crean un alias que apunta a otro nombre de anfitrión. Idealmente, cada anfitrión tiene un registro A y los alias se gestionan con CNAME. Añada un alias común para el servicio web:

update add www.ejemplo.com. 86400 CNAME ejemplo.com.
send

Añada un alias para el servicio de transferencia de archivos:

update add ftp.ejemplo.com. 86400 CNAME ejemplo.com.
send

Registros A y MX para servidor de correo primario

Un servidor de correo debe tener un registro A que resuelva su nombre y un registro MX que lo señale como destinatario del correo para el dominio. Primero, cree el registro A:

update add mail.ejemplo.com. 86400 A 192.168.100.2
send

Luego, defina ese anfitrión como el intercambiador de correo (MX) primario (con preferencia 10) para el dominio:

update add ejemplo.com. 86400 MX 10 mail.ejemplo.com.
send

Registros A y MX para servidor de correo secundario

En un escenario con redundancia, configure un servidor de correo secundario. Asumiendo que el servidor esclavo (192.168.100.10) cumple esta función, añada su registro A:

update add mail2.ejemplo.com. 86400 A 192.168.100.10
send

Luego, defínalo como el intercambiador de correo secundario (con una preferencia mayor, como 20):

update add ejemplo.com. 86400 MX 20 mail2.ejemplo.com.
send

Registros A y NS para servidor DNS secundario

Para completar la configuración maestro-esclavo, añada el registro A para el servidor DNS secundario:

update add dns2.ejemplo.com. 86400 A 192.168.100.10
send

Luego, añádalo como un servidor de nombres (NS) autoritativo para el dominio:

update add ejemplo.com. 86400 NS dns2.ejemplo.com.
send

Registro TXT para SPF

El Marco de directivas de remitente (SPF) ayuda a prevenir la suplantación de identidad (spoofing) de correo electrónico. Añada un registro TXT que especifique los servidores autorizados para enviar correo desde su dominio.

El siguiente ejemplo autoriza a los anfitriones definidos por registros A y MX del dominio, además de dos direcciones IP específicas, y rechaza (-all) cualquier otro remitente:

update add ejemplo.com. 86400 TXT "v=spf1 a mx ip4:192.168.100.2 ip4:192.168.100.10 -all"
send

Para configurar registros DKIM o DMARC se requieren pasos adicionales de preparación en el servidor de correo y, en el caso de firmas largas, procedimientos específicos que exceden el alcance de esta guía.

🔧 Nota sobre DKIM con claves largas: Añadir registros DKIM con claves de 2048 bits ―cuya longitud excede el límite del intérprete interactivo― es perfectamente factible mediante un archivo de instrucciones. Tras generar la clave con herramientas como opendkim-genkey, se extrae el contenido del registro del archivo resultante (por ejemplo, default.txt) y se incorpora en una sentencia update add dentro de un archivo de texto. Este archivo se carga después con nsupdate -k /etc/rndc.key archivo_de_instrucciones.txt, un método sencillo que se abordará con detalle en las guías dedicadas a la configuración de correo.

Salir del intérprete de nsupdate

Una vez añadidos todos los registros, salga del intérprete interactivo con el mandato:

quit

Corrección de registros

Si se comete un error y es necesario modificar o eliminar un registro, reconéctese con nsupdate de la manera habitual. Luego, utilice la sentencia delete en lugar de add, especificando exactamente el mismo registro que se desea eliminar.

Ejemplos para eliminar registros erróneos:

update delete error.ejemplo.com. 86400 A 192.168.100.3
update delete ejemplo.com. 86400 NS error.ejemplo.com.
update delete ejemplo.com. 86400 MX 30 error.ejemplo.com.

Después de cada operación de eliminación, consigne el cambio:

send

Finalmente, salga del intérprete:

quit

Comprobaciones

Valide que los registros se hayan creado correctamente realizando consultas DNS desde el propio servidor o desde un cliente configurado. Utilice las herramientas dig o host:

dig ejemplo.com SOA
dig ejemplo.com NS
dig ejemplo.com MX

host dns1.ejemplo.com
host dns2.ejemplo.com
host ejemplo.com
host www.ejemplo.com
host mail.ejemplo.com

Las respuestas deben reflejar los registros añadidos dinámicamente.

🖥️ Nota sobre Webmin: Para quienes prefieren una interfaz gráfica, el módulo bind8 de Webmin integra de manera transparente la funcionalidad de nsupdate. Al configurar una zona como dinámica en Webmin, la interfaz utiliza automáticamente nsupdate para aplicar los cambios en los registros, y gestiona la sincronización con los servidores DNS esclavos sin necesidad de configuración adicional. Esta herramienta facilita la administración de zonas DNS dinámicas sin sacrificar la potencia del protocolo de actualización dinámica.

Configuración del servidor DNS esclavo

El servidor esclavo debe tener una configuración BIND básica funcional, similar a la del maestro antes de añadir las zonas dinámicas. Conéctese al servidor esclavo (192.168.100.10) y asegúrese de que SELinux permita escribir zonas maestras (el mismo mandato setsebool).

Edite el archivo /etc/named.conf en el servidor esclavo y añada la definición de zona esclava para ejemplo.com, apuntando al servidor maestro:

    zone "ejemplo.com" {
        type slave;
        file "slaves/ejemplo.com.zone";
        masters { 192.168.100.2; };
        allow-transfer { 192.168.100.2; };
    };

Reinicie el servicio named en el esclavo para que inicie la transferencia de zona automáticamente. Utilice systemctl restart named o service named restart según corresponda.

Puede forzar una transferencia manual desde el servidor maestro o desde el esclavo (si tiene permisos) utilizando la herramienta rndc:

rndc retransfer ejemplo.com

O bien, para encolar la solicitud de actualización, útil cuando se manejan múltiples zonas:

rndc refresh ejemplo.com

Si la zona se define dentro de una vista específica (por ejemplo, local), especifíquela:

rndc refresh ejemplo.com in local

Valide que la transferencia fue exitosa realizando consultas DNS (dig, host) dirigidas a la dirección IP del servidor esclavo (192.168.100.10 o 127.0.0.1).

Resumen y mejores prácticas

La administración dinámica de zonas DNS con nsupdate es una herramienta poderosa para entornos que requieren agilidad, como aquellos integrados con DHCP automático. Su principal ventaja reside en la validación previa de los cambios, lo que impide errores de sintaxis que podrían detener el servicio.

Recuerde la regla fundamental: una vez que una zona se gestiona dinámicamente, jamás debe editar sus archivos de zona manualmente. Todos los cambios deben realizarse a través del protocolo de actualización dinámica.

Para profundizar en conceptos de seguridad avanzada como DNSSEC en zonas dinámicas, se recomienda consultar la documentación oficial de BIND y los RFCs pertinentes, ya que dicha configuración requiere consideraciones adicionales sobre la gestión de claves y firmas.