DNS Debian · 3 min read · Oct 02, 2025

Construyendo un Sistema DNS en Debian

Construyendo un Sistema DNS en Debian

Versión 1.0
Autor: Joe Topjian

OK, este es el último artículo sobre DNS… por un tiempo, al menos.

Este artículo te mostrará cómo construir un sistema DNS completo con Debian. Esto incluye un servidor Maestro, un servidor Esclavo, DDNS y un montón de DNSSEC. Estaré usando BIND 9 para el servidor.

El Servidor Maestro

Primero, pongamos nuestro servidor Maestro en funcionamiento. Dado que se sabe que BIND tiene su parte justa de exploits, lo vamos a meter en una cárcel chroot. No voy a cubrir eso ya que Falko ha escrito una excelente guía para eso aquí.

Después de que lo hayas encerrado, haz que RNDC funcione. RNDC es una pequeña utilidad de línea de comandos para controlar BIND. Para usarlo, copia el contenido de /etc/bind/rndc.key a /etc/bind/named.conf. Reinicia BIND y estarás listo para comenzar. Ahora puedes usar RNDC para interactuar con BIND en lugar de trabajar directamente con BIND. Para más información sobre los comandos de RNDC, consulta aquí.

A continuación, es hora de crear el archivo de zona. Para este ejemplo, voy a usar el TLD ficticio hemingway. No hay razón realmente, solo porque puedo y sé con certeza que nunca entrará en conflicto con un nombre de dominio real.

Para organización, he creado dos directorios para almacenar los archivos de zona, uno maestro y uno esclavo – para almacenar los archivos de zona maestro y esclavo, respectivamente.

/etc/bind/zones/master
/etc/bind/zones/slave

No olvides editar /etc/bind/named.conf.options y cambiar la opción de directorio a “/etc/bind”.

El archivo de zona se verá así ( /etc/bind/zones/master/master.hemingway):

| $ORIGIN hemingway $TTL 1d @ IN SOA ns1 hostmaster ( 2005103008 ; serial 43200 900 604800 10800 ) NS hemingway. A 127.0.0.1 |

La zona inversa para el 192.168.1.0/24 ( /etc/bind/zones/192.168.1.rev) se verá así:

| $TTL 1d ; $ORIGIN 1.168.192.IN-ADDR.ARPA. @ IN SOA ns1.hemingway. hostmaster.hemingway. ( 2005103001 2h 15m 2w 3h ) IN NS ns1.hemingway. IN NS ns2.hemingway. |

Ahora edita /etc/bind/named.conf.local con las nuevas zonas:

| zone "hemingway" { type master; file "zones/master/master.hemingway"; }; |

| zone "1.168.192.IN-ADDR.ARPA" { type master; file "zones/192.168.1.rev"; }; |

Recarga DNS y verifica tus registros. No deberías tener errores, pero nunca se sabe…

rndc reload

Ahora que BIND sabe qué dominio alojar, es hora de agregar algunos nombres de host. Usaremos DDNS para eso. Para configurar DDNS, puedes seguir mis artículos sobre DDNS aquí.

Para agregar realmente los hosts con DDNS, voy a usar mi script ddns.py.

ddns.py add jake.hemingway A 192.168.1.11
ddns.py add bill.hemingway A 192.168.1.12
ddns.py add robert.hemingway A 192.168.1.13
ddns.py add brett.hemingway A 192.168.1.14

Los archivos PTR correspondientes también fueron añadidos, pero estoy omitiendo eso para ahorrar espacio.

Ahora tenemos un servidor DNS Maestro completamente funcional resolviendo cualquier nombre de host que le demos.

El Servidor Esclavo

Ahora que el servidor Maestro está configurado, es hora de pasar al Esclavo. En otra máquina, configura una instalación de BIND enjaulada igual que el Maestro.

El Esclavo obtendrá transferencias de zona del Maestro. Dado que esas transferencias de zona se realizan a través de la red en texto plano, vamos a querer asegurarlas.

En ambos archivos /etc/bind/named.conf.options del maestro y del esclavo, agrega lo siguiente:

| dnssec-enable yes; |

Usando el comando dnssec-keygen descrito aquí, crea una clave. Agrega el hash MD5 a una nueva declaración de clave en ambos archivos /etc/bind/named.conf:

| key "TRANSFER" { algorithm hmac-md5; secret "jXc2Lreaw4QHHTb/MjiHAw=="; }; |

En el maestro, agrega la siguiente declaración de servidor a /etc/bind/named.conf:

| server IP-OF-SLAVE { keys { TRANSFER; }; }; |

En el esclavo, haz lo contrario:

| server IP-OF-MASTER { keys { TRANSFER; }; }; |

En el maestro, agrega lo siguiente a los bloques de zona en /etc/bind/named.conf.local:

| allow-transfer { key TRANSFER; }; |

El bloque de zona en el Esclavo debería verse así:

| zone hemingway { type slave; file "zones/slave/slave.hemingway"; masters { IP-OF-MASTER; }; allow-notify { IP-OF-MASTER; }; }; |

Finalmente, asegúrate de que ambos servidores tengan sus relojes sincronizados. Las transferencias de zona no se llevarán a cabo si no lo están.

Una vez que hayas terminado, inicia el servidor esclavo. Ahora deberías tener un nuevo archivo en /etc/bind/zones/slave/ de la transferencia de zona. Si no lo tienes, verifica tus registros – son muy verbosos con los errores.

Finalizando

¡Eso es todo! Es mucho trabajo y realmente lo he resumido, pero esto debería ponerte en marcha. Para referencia e información adicional, por favor lee mis artículos sobre DDNS aquí y consulta el maravilloso libro Pro DNS and BIND (no es un anuncio publicitario – ¡realmente es un buen libro!).

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.