Validar la Configuración de bind9 y Probar la Resolución DNS con dig
En este paso, validará todos los cambios de configuración que ha realizado y luego probará su servidor DNS en vivo. Es una práctica fundamental verificar los archivos de configuración en busca de errores de sintaxis antes de aplicarlos, ya que un error podría impedir que el servicio bind9 se inicie correctamente. Una vez validado, utilizará la utilidad dig para realizar búsquedas DNS y confirmar que su servidor funciona como se espera.
Primero, verifique los archivos de configuración principales de bind9 en busca de errores de sintaxis utilizando named-checkconf. Si este comando no produce ninguna salida, significa que sus archivos de configuración (named.conf.local, named.conf.options, etc.) son válidos.
sudo named-checkconf
A continuación, valide la sintaxis de su archivo de zona de búsqueda directa. El comando named-checkzone verifica la corrección de un archivo de zona.
sudo named-checkzone mylocaldomain.net /etc/bind/db.mylocaldomain.net
Una verificación exitosa devolverá un estado "OK" y mostrará el número de serie de su archivo de zona:
zone mylocaldomain.net/IN: loaded serial 2024052001
OK
Ahora, valide la zona de búsqueda inversa. Dado que el nombre de la zona y el nombre del archivo dependen de la dirección IP de su VM, primero recopile la información necesaria:
IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
REV_IP=$(echo $IP | awk -F. '{print $3"."$2"."$1}')
ZONE_NAME="${REV_IP}.in-addr.arpa"
ZONE_FILE="/etc/bind/db.${REV_IP}"
Esto crea el nombre de zona y la ruta de archivo correctos basados en la dirección IP real de su VM.
Ahora ejecute el comando de validación de zona:
echo "Checking reverse zone: ${ZONE_NAME}"
sudo named-checkzone ${ZONE_NAME} ${ZONE_FILE}
Una verificación exitosa mostrará nuevamente un estado "OK":
zone 50.16.172.in-addr.arpa/IN: loaded serial 2024052001
OK
Antes de reiniciar, asegúrese de que el servicio bind9 pueda leer los archivos de zona estableciendo la propiedad correcta. Primero, obtenga la información de IP nuevamente para construir la ruta de archivo correcta:
IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
REV_IP=$(echo $IP | awk -F. '{print $3"."$2"."$1}')
Ahora establezca la propiedad correcta para ambos archivos de zona:
sudo chown root:bind /etc/bind/db.mylocaldomain.net "/etc/bind/db.${REV_IP}"
Con todas las configuraciones validadas, es hora de reiniciar el servicio bind9 para aplicar los cambios:
sudo systemctl restart bind9
Para estar seguro de que el servicio se inició correctamente y cargó sus nuevas zonas, verifique los registros del sistema.
sudo grep named /var/log/syslog | grep "loaded serial"
Debería ver una salida que confirme que ambas zonas se cargaron correctamente. La salida también incluirá zonas predeterminadas como localhost, lo cual es normal. La clave es encontrar las líneas para mylocaldomain.net y su zona inversa.
... named[...]: zone mylocaldomain.net/IN: loaded serial 2025071401
... named[...]: zone 50.16.172.in-addr.arpa/IN: loaded serial 2025071401
...
Si no ve estas líneas, revise la salida de sudo systemctl status bind9 en busca de errores.
Finalmente, pruebe su servidor DNS usando dig. Consultará su servidor local directamente especificando @127.0.0.1.
Primero, pruebe la búsqueda directa para webserver.mylocaldomain.net:
dig @127.0.0.1 webserver.mylocaldomain.net
En la salida, busque la ANSWER SECTION. Debería mostrar el registro A apuntando a la dirección IP de su VM y, lo que es importante, las flags en la cabecera deben incluir aa para una respuesta autoritativa. La línea SERVER en la parte inferior debe mostrar 127.0.0.1.
...
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: ...
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;webserver.mylocaldomain.net. IN A
;; ANSWER SECTION:
webserver.mylocaldomain.net. 604800 IN A <your_vm_ip>
;; SERVER: 127.0.0.1#53(127.0.0.1)
...
A continuación, pruebe la búsqueda inversa utilizando la bandera -x. Primero, capture la dirección IP de su VM:
IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
Ahora realice la prueba de búsqueda inversa:
dig @127.0.0.1 -x $IP
La ANSWER SECTION ahora debería mostrar los registros PTR que creó, mapeando su IP de vuelta a los nombres de host, y las flags deberían incluir nuevamente aa.
...
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: ...
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;<last_octet>.<your_reversed_network_part>.in-addr.arpa. IN PTR
;; ANSWER SECTION:
<last_octet>.<your_reversed_network_part>.in-addr.arpa. 604800 IN PTR fileserver.mylocaldomain.net.
<last_octet>.<your_reversed_network_part>.in-addr.arpa. 604800 IN PTR ns1.mylocaldomain.net.
<last_octet>.<your_reversed_network_part>.in-addr.arpa. 604800 IN PTR webserver.mylocaldomain.net.
;; SERVER: 127.0.0.1#53(127.0.0.1)
...
¡Felicitaciones! Ha configurado, validado y probado con éxito un servidor DNS autoritativo básico.