Integración de servidor DHCP con servidor DNS dinámico

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

Los servidores DNS pueden funcionar de modo dinámico, permitiendo la actualización en tiempo real de los nombres de anfitrión y las direcciones IP asociadas a éstos a través de la información enviada por un servidor DHCP. Este mecanismo, definido en el RFC 2136, es fundamental para mantener la coherencia entre las asignaciones de direcciones y la resolución de nombres en una red, eliminando la necesidad de administración manual.

Requisitos

Los procedimientos de este documento requieren haber comprendido, estudiado y puesto en práctica los temas descritos en los siguientes documentos:

Procedimientos

La integración exitosa requiere modificaciones coordinadas en la configuración del servidor DHCP (daemon dhcpd) y del servidor DNS (BIND named). El siguiente procedimiento guía a través de cada paso necesario.

Archivo /etc/dhcp/dhcpd.conf

Edite el archivo /etc/dhcp/dhcpd.conf:

vim /etc/dhcp/dhcpd.conf

A continuación se muestra un ejemplo de configuración con los parámetros esenciales para DNS dinámico (DDNS). Todos los valores relativos a direcciones IP utilizan el bloque estándar 192.168.100.0/24 para mantener coherencia pedagógica entre manuales.

⚠️ Nota sobre compatibilidad con versiones antiguas: En versiones más antiguas del servidor DHCP de ISC (como las incluidas en CentOS/RHEL 6 o 7), era obligatoria la directiva ddns-update-style al inicio del archivo de configuración. Los estilos válidos eran interim (recomendado), ad-hoc o none. En distribuciones modernas (AlmaLinux/Rocky Linux 8/9/10, ALDOS 1.4+), esta directiva es obsoleta y debe omitirse. Si está configurando un sistema heredado y recibe errores, pruebe añadiendo ddns-update-style interim; como primera línea del archivo.

# Configuración global para DNS dinámico
ddns-updates on;
ddns-domainname "red-local.local.";
ddns-rev-domainname "in-addr.arpa.";
update-static-leases on;

ignore client-updates;
authoritative;

default-lease-time 900;
max-lease-time 900;

option ip-forwarding off;
option domain-name "red-local.local";
option ntp-servers 0.pool.ntp.org, 1.pool.ntp.org, 2.pool.ntp.org, 3.pool.ntp.org;

# Éste es el mismo archivo de firma digital (TSIG) de BIND.
include "/etc/rndc.key";

# Definición de zonas para actualización dinámica
zone localdomain. {
    primary 127.0.0.1;
    key rndc-key;
}

zone 100.168.192.in-addr.arpa. {
    primary 127.0.0.1;
    key rndc-key;
}

zone red-local.local. {
    primary 127.0.0.1;
    key rndc-key;
}

# Definición de la red local
shared-network red-local {
    subnet 192.168.100.0 netmask 255.255.255.0 {
        option routers 192.168.100.1;
        option subnet-mask 255.255.255.0;
        option broadcast-address 192.168.100.255;
        option domain-name-servers 192.168.100.2;
        range 192.168.100.10 192.168.100.50;
    }
}

Archivos de zona

Para que el servidor DNS (BIND) acepte actualizaciones dinámicas, es necesario preparar los archivos de zona con los permisos adecuados.

Crear los archivos de zona

Cambie al directorio donde se almacenarán las zonas dinámicas y cree los archivos base:

cd /var/named/dynamic/
touch red-local.local.zone
touch 100.168.192.in-addr.arpa.zone

Establezca los permisos y propietario correctos para que el servicio named pueda modificarlos:

chmod 640 red-local.local.zone 100.168.192.in-addr.arpa.zone
chown named:named red-local.local.zone 100.168.192.in-addr.arpa.zone

Contenido de los archivos de zona

Edite el archivo de zona de reenvío (/var/named/dynamic/red-local.local.zone) y añada el siguiente contenido mínimo:

$TTL 3600
@   IN  SOA servidor.red-local.local. root.localhost. (
            2025122901 ; Número de serie
            1800       ; Refresh
            900        ; Retry
            604800     ; Expire
            3600       ; TTL mínimo
            )
    IN  NS  servidor.red-local.local.

servidor IN  A   192.168.100.2

Edite el archivo de zona de resolución inversa (/var/named/dynamic/100.168.192.in-addr.arpa.zone):

$TTL 3600
@   IN  SOA servidor.red-local.local. root.localhost. (
            2025122901 ; Número de serie
            1800       ; Refresh
            900        ; Retry
            604800     ; Expire
            3600       ; TTL mínimo
            )
    IN  NS  servidor.red-local.local.

$ORIGIN 100.168.192.in-addr.arpa.
2       IN  PTR servidor.red-local.local.

Modificaciones del archivo /etc/named.conf

El servidor DNS debe configurarse para permitir actualizaciones dinámicas utilizando una firma digital (TSIG key). Esto normalmente se hace dentro de una vista (view) apropiada en /etc/named.conf.

Edite el archivo de configuración de BIND:

vim /etc/named.conf

Dentro de la vista correspondiente (por ejemplo, view "local"), asegúrese de que las zonas dinámicas tengan la directiva allow-update configurada con la clave correcta:

view "local" {
    match-clients { 127.0.0.0/8; 192.168.100.0/24; };
    recursion yes;

    zone "red-local.local" {
        type master;
        file "dynamic/red-local.local.zone";
        allow-update { key "rndc-key"; };
    };

    zone "100.168.192.in-addr.arpa" {
        type master;
        file "dynamic/100.168.192.in-addr.arpa.zone";
        allow-update { key "rndc-key"; };
    };
    // ... otras zonas
};

Ajustes en SELinux y Firewall

Para que BIND pueda escribir en los archivos de zona maestra, es necesario ajustar la política de SELinux:

setsebool -P named_write_master_zones 1

El siguiente procedimiento probablemente ya lo realizó si siguio la secuencia didáctica de los manuales de DHCP y DNS. En distribuciones que utilicen firewalld (como AlmaLinux, Rocky Linux o RHEL 8/9/10), debe permitirse el tráfico de los servicios DHCP y DNS:

firewall-cmd --permanent --add-service=dhcp
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload

💡 Nota: En sistemas que utilicen otros mecanismos de cortafuegos, este paso puede variar. La regla esencial es permitir los puertos UDP 67 (DHCP servidor) y puertos TCP y UDP 53 (DNS).

Reinicie los servicios

Aplique todos los cambios reiniciando los servicios. El mandato específico depende del sistema de inicio:

A partir de este momento, el servidor DHCP deberá actualizar dinámicamente el DNS cada vez que asigne o renueve una concesión a un cliente.

Comprobaciones

Para verificar que la integración funciona, puede simular una actualización usando el mandato nsupdate, que es la misma herramienta que utilizará internamente el servidor DHCP.

Conéctese al servidor DNS local utilizando la clave TSIG compartida:

nsupdate -k /etc/rndc.key

Dentro del intérprete de nsupdate, ejecute las siguientes órdenes para añadir un registro de prueba. Asegúrese de usar su dominio y bloque de IP:

server 127.0.0.1
update add prueba.red-local.local. 3600 A 192.168.100.20
send
update add 20.100.168.192.in-addr.arpa. 3600 PTR prueba.red-local.local.
send
quit

Si la operación tiene éxito (no devuelve errores), consulte los registros para confirmar:

host prueba.red-local.local 192.168.100.2
host 192.168.100.20 192.168.100.2

La salida debería mostrar la correspondencia correcta entre el nombre y la dirección IP. Para limpiar después de la prueba, use nsupdate nuevamente con las órdenes update delete.

Finalmente, supervice los registros del sistema en busca de actividad generada por un cliente real:

tail -f /var/log/messages
# o, en sistemas más recientes:
journalctl -f -u dhcpd -u named

Conecte un cliente a la red, configure su interfaz para usar DHCP y observe cómo aparecen las entradas de actualización dinámica en el registro.

📚 Para saber más