Configuración de un servidor DNS esclavo con BIND9
En esta guía aprenderás a configurar un servidor DNS esclavo usando BIND9 en Debian. Este servidor se sincronizará con el servidor maestro (dns1.javiercruces.org
) y permitirá distribuir la carga de resolución de nombres en tu red local. Además, se te guiará para verificar que la transferencia de zonas se realiza correctamente.
En este caso, el servidor esclavo se encuentra en la red 192.168.10.0/24, con la IP 192.168.10.200.
1. Preparación inicial del servidor esclavo
Nombre de la máquina
Primero, asignamos el nombre correcto al host. Edita el archivo /etc/hostname
:
dns2
Luego, configura el archivo /etc/hosts
para asociar el nombre completo con la IP local:
127.0.1.1 dns2.javiercruces.org dns2
Verifica que el FQDN se resuelve correctamente con hostname -f
. Deberías obtener la siguiente salida:
debian@dns2:~$ hostname -f
dns2.javiercruces.org
2. Instalación de BIND9
Instala el paquete de BIND9 como lo hicimos en el servidor maestro:
sudo apt update && sudo apt install bind9 bind9utils bind9-doc rsync -y
3. Configuración básica
Editar named.conf.options
En el servidor esclavo, edita el archivo /etc/bind/named.conf.options
para permitir consultas desde las redes internas:
options {
directory "/var/cache/bind";
allow-query { 127.0.0.1; 192.168.10.0/24; };
recursion yes;
dnssec-validation no;
forwarders {
1.1.1.1;
8.8.8.8;
};
};
4. Configuración de zonas esclavas
Edita el archivo /etc/bind/named.conf.local
para definir las zonas esclavas. Estas deben coincidir con las configuradas en el servidor maestro:
zone "javiercruces.org" {
type slave;
masters { 192.168.10.1; };
file "/var/cache/bind/slaves/db.javiercruces.org";
};
zone "10.168.192.in-addr.arpa" {
type slave;
masters { 192.168.10.1; };
file "/var/cache/bind/slaves/db.192.168.10";
};
Crea el directorio para almacenar los archivos esclavos si aún no existe:
sudo mkdir -p /var/cache/bind/slaves
sudo chown bind:bind /var/cache/bind/slaves
5. Reiniciar el servicio
Una vez que todo esté configurado, reinicia el servicio de BIND9:
sudo systemctl restart bind9
Verifica que no haya errores en el registro de eventos:
sudo journalctl -xeu bind9
También puedes comprobar que las zonas se han transferido correctamente con:
ls -l /var/cache/bind/slaves
6. Actualización del servidor maestro
Para que el servidor esclavo reciba las zonas correctamente, es necesario autorizarlo desde el servidor maestro (dns1
).
Edita el archivo /etc/bind/named.conf.local
en el servidor maestro y añade la opción allow-transfer
con la IP del esclavo:
zone "javiercruces.org" {
type master;
file "/var/cache/bind/db.javiercruces.org";
allow-transfer { 192.168.10.200; };
};
zone "10.168.192.in-addr.arpa" {
type master;
file "/var/cache/bind/db.192.168.10";
allow-transfer { 192.168.10.200; };
};
Además, actualizaremos los registros DNS para añadir el nuevo servidor. Debes agregar un registro A y un registro NS. Aquí tienes el archivo completo:
debian@dns1:~$ sudo cat /var/cache/bind/db.javiercruces.org
$TTL 86400
@ IN SOA dns1.javiercruces.org. root.javiercruces.org. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
;
@ IN NS dns1.javiercruces.org.
@ IN NS dns2.javiercruces.org.
@ IN MX 10 correo.javiercruces.org.
$ORIGIN javiercruces.org.
dns1 IN A 192.168.10.1
dns2 IN A 192.168.10.200
correo IN A 192.168.10.2
thor IN A 192.168.10.3
hela IN A 192.168.10.4
www IN CNAME thor
informatica IN CNAME thor
ftp IN CNAME hela
También debemos actualizar la zona inversa:
$TTL 86400
@ IN SOA dns1.javiercruces.org. root.javiercruces.org. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
;
@ IN NS dns1.javiercruces.org.
$ORIGIN 10.168.192.in-addr.arpa.
1 IN PTR dns1.javiercruces.org.
2 IN PTR correo.javiercruces.org.
3 IN PTR thor.javiercruces.org.
4 IN PTR hela.javiercruces.org.
200 IN PTR dns2.javiercruces.org.
Después de guardar los cambios, recarga la configuración de BIND:
sudo rndc reload
O reinicia el servicio:
sudo systemctl restart bind9
Con esto, el servidor maestro está autorizado para enviar las zonas al esclavo cuando sea necesario.
7. Comprobaciones
Cada vez que reinicies el servicio en dns1
, este enviará los cambios a dns2
. Para comprobar que la transferencia de zonas está funcionando correctamente, ejecuta el siguiente comando en dns2
para ver los logs en tiempo real:
debian@dns2:~$ sudo journalctl -u named -f
Luego, añade un registro en el servidor maestro:
sentinel IN A 192.168.10.25
Puedes forzar la transferencia de la zona con:
debian@dns2:~$ sudo rndc sync
Y los logs de la transferencia exitosa serán similares a los siguientes:
debian@dns2:~$ sudo journalctl -u named -f
May 10 23:11:08 dns2 named[936]: received control channel command 'sync'
May 10 23:11:08 dns2 named[936]: dumping all zones: success
Finalmente, realiza una consulta a ambos servidores para verificar que ambos devuelven el mismo resultado:
debian@cliente1:~$ dig @192.168.10.1 sentinel.javiercruces.org
; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> @192.168.10.1 sentinel.javiercruces.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31484
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 067375f875fc084c01000000681fdf328945678dcc84fea2 (good)
;; QUESTION SECTION:
;sentinel.javiercruces.org. IN A
;; ANSWER SECTION:
sentinel.javiercruces.org. 86400 IN A 192.168.10.25
;; Query time: 0 msec
;; SERVER: 192.168.10.1#53(192.168.10.1) (UDP)
;; WHEN: Sat May 10 23:20:18 UTC 2025
;; MSG SIZE rcvd: 98
debian@cliente1:~$ dig @192.168.10.200 sentinel.javiercruces.org
; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> @192.168.10.200 sentinel.javiercruces.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 29032
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 4fd30029eb8c1f3d01000000681fdf34b473e093120ca15c (good)
;; QUESTION SECTION:
;sentinel.javiercruces.org. IN A
;; AUTHORITY SECTION:
javiercruces.org. 86400 IN SOA dns1.javiercruces.org. root.javiercruces.org. 1 604800 8
6400 2419200 86400
;; Query time: 0 msec
;; SERVER: 192.168.10.200#53(192.168.10.200) (UDP)
;; WHEN: Sat May 10 23:20:20 UTC 2025
;; MSG SIZE rcvd: 128