Aquí tienes algunas opciones de título que barajé para este artículo:
- Tu Propio Servidor DNS: Guía de Configuración Bind9 en Debian Desde Cero
- Domina Bind9 en Debian: Instalación y Configuración DNS Paso a Paso para Novatos
- Configura Bind9 en Debian Fácil: La Guía Definitiva para tu Primer Servidor DNS
—
Tu Propio Servidor DNS: Guía de Configuración Bind9 en Debian Desde Cero
Seguro que has oído hablar del DNS (Sistema de Nombres de Dominio) mil veces. Es esa pieza fundamental de internet que traduce nombres que entendemos los humanos, como www.google.com
, a direcciones IP que entienden las máquinas. Sin DNS, navegar por la web sería como intentar encontrar una casa sin saber su dirección postal, solo con el nombre de la calle. Hoy vamos a ver cómo crear un servidor DNS con Bind9 en Debian, el software de servidor DNS más utilizado en el mundo, y lo haremos con una guía de configuración DNS local Bind9 Debian pensada para que puedas seguirla sin problemas.
Tener tu propio servidor DNS en tu red local, ya sea en casa o en una pequeña oficina, tiene varias ventajas. Te da un control total sobre las resoluciones de nombres, puede mejorar ligeramente la velocidad de navegación para los dominios que consultas frecuentemente (gracias al caché local) y, sobre todo, es una forma excelente de aprender cómo funciona una parte crítica de la infraestructura de red. Para los que estamos metidos en temas de sistemas y ahora en ciberseguridad, entender estos servicios a fondo es oro puro. Además, para procesos como la certificación ISO27001, tener un control granular sobre servicios de red como el DNS es un punto a favor.
Usaremos Debian por su estabilidad y popularidad en servidores, y Bind9 porque es el estándar de facto. Esta guía te mostrará cómo configurar servidor DNS Bind9 Debian paso a paso.
Antes de Empezar: Prerrequisitos
Antes de lanzarnos a la piscina, asegúrate de tener lo siguiente:
- Un sistema Debian instalado y actualizado: Puede ser una máquina física o una máquina virtual. Si no lo tienes al día, un
sudo apt update && sudo apt upgrade
es tu primer paso. - Acceso a la línea de comandos con privilegios de superusuario (sudo).
- Una dirección IP estática configurada en el servidor Debian. Esto es crucial, ya que un servidor DNS no puede estar cambiando de IP. Por ejemplo, usaremos
192.168.1.10
en esta guía. Adapta los ejemplos a tu propia configuración de red.
Paso 1: Instalación de Bind9 en Debian
Lo primero es lo primero: instalar el software. Abrimos una terminal en nuestro servidor Debian y ejecutamos:
sudo apt update
sudo apt install bind9 bind9utils bind9-doc dnsutils
bind9
: Es el servidor DNS en sí.bind9utils
: Contiene herramientas útiles para administrar y probar Bind9, comonamed-checkconf
ynamed-checkzone
.bind9-doc
: Documentación adicional, siempre útil.dnsutils
: Proporciona herramientas de cliente DNS comodig
ynslookup
, imprescindibles para las pruebas.
Una vez instalado, el servicio Bind9 (llamado named
) debería iniciarse automáticamente. Puedes comprobarlo con:
systemctl status bind9
O también puedes ver la versión instalada con:
named -v
Si todo ha ido bien, ¡ya tienes Bind9 instalado! Este es el primer hito en nuestra tarea de instalar Bind9 Debian para principiantes.
Paso 2: Entendiendo la Estructura de Bind9 y Configuración Inicial
Bind9 tiene varios archivos de configuración importantes, ubicados principalmente en /etc/bind/
:
named.conf
: El archivo principal de configuración. Generalmente, no se edita directamente, sino que incluye otros archivos.named.conf.options
: Aquí se configuran las opciones globales del servidor DNS, como los forwarders (reenviadores) y las políticas de acceso.named.conf.local
: Este es el archivo donde definiremos nuestras zonas DNS personalizadas (tanto directas como inversas).
Vamos a editar named.conf.options
para realizar algunos ajustes básicos. Usa tu editor de texto favorito (nano, vim, etc.):
sudo nano /etc/bind/named.conf.options
Dentro del bloque options { ... };
, asegúrate de tener o añadir lo siguiente:
options {
directory "/var/cache/bind";
// Configura aquí los DNS a los que tu servidor consultará
// si no conoce una dirección. Pueden ser los de tu ISP o públicos.
forwarders {
1.1.1.1; // Cloudflare
8.8.8.8; // Google
// Pon aquí los de tu ISP si lo prefieres
};
// Permite consultas recursivas solo desde localhost y tu red local.
// ¡Importante por seguridad para no convertirte en un open resolver!
allow-query { localhost; localnets; };
// 'localnets' incluye todas las subredes a las que el servidor está conectado directamente.
// Si quieres ser más específico, puedes poner tu rango de IP, ej: 192.168.1.0/24;
recursion yes; // Permite que tu servidor haga consultas recursivas por los clientes.
dnssec-validation auto; // Habilita la validación DNSSEC si los forwarders la soportan.
listen-on-v6 { any; }; // Si usas IPv6. Si no, puedes poner { none; }.
listen-on { any; }; // Escucha en todas las interfaces IPv4. Puedes especificar la IP de tu servidor.
};
Expliquemos algunos puntos:
forwarders
: Si tu servidor DNS no tiene la respuesta para una consulta (por ejemplo,www.google.com
), se la preguntará a estos servidores.allow-query
: Define quién puede hacer consultas a tu servidor.localhost
es el propio servidor, ylocalnets
se refiere a las redes a las que el servidor está directamente conectado (por ejemplo, tu LAN). Es vital restringir esto para evitar que tu servidor sea usado en ataques de amplificación DNS.recursion yes
: Indica que tu servidor puede realizar consultas recursivas en nombre de los clientes permitidos.
Guarda el archivo y cierra el editor.
Paso 3: Creando tu Primera Zona DNS Directa (Forward Lookup Zone)
Una zona directa es la que traduce nombres de host a direcciones IP (ej: servidor.mihogar.lan
-> 192.168.1.10
). Vamos a crear una para nuestra red local. Usaremos el dominio ficticio mihogar.lan
. Puedes usar el que prefieras, pero se recomienda usar dominios .lan
, .local
, .internal
o similares que no sean dominios públicos reales para evitar conflictos.
Primero, editamos named.conf.local
para decirle a Bind9 que somos la autoridad para esta zona:
sudo nano /etc/bind/named.conf.local
Añade lo siguiente al final del archivo:
zone "mihogar.lan" {
type master;
file "/etc/bind/zones/db.mihogar.lan"; // Ruta al archivo que contendrá los registros de esta zona
allow-transfer { none; }; // Opcional: IPs de servidores DNS esclavos si los tuvieras
// allow-update { none; }; // Por defecto, no permitir actualizaciones dinámicas
};
type master
: Indica que este servidor es el maestro (primario) para esta zona.file
: Especifica la ruta al archivo de definición de la zona. Tendremos que crear este archivo.
Ahora, creamos el directorio donde guardaremos nuestros archivos de zona (si no existe):
sudo mkdir -p /etc/bind/zones
Y creamos el archivo de zona db.mihogar.lan
:
sudo nano /etc/bind/zones/db.mihogar.lan
Este archivo contendrá los registros DNS para mihogar.lan
. Aquí un ejemplo básico:
$TTL 604800 ; Tiempo de Vida (Time To Live) por defecto para los registros (1 semana)
@ IN SOA ns1.mihogar.lan. admin.mihogar.lan. (
2024072101 ; Serial (Importante: ¡incrementar cada vez que cambies el archivo!)
604800 ; Refresh (1 semana)
86400 ; Retry (1 día)
2419200 ; Expire (4 semanas)
604800 ) ; Negative Cache TTL (1 semana)
;
; Servidores de Nombres (NS) para la zona
@ IN NS ns1.mihogar.lan.
; Registros de Host (A) - Nombre a IPv4
; El '@' se refiere al propio dominio de la zona (mihogar.lan)
; Si quieres un registro para mihogar.lan, puedes usar @ o dejarlo en blanco
; ns1 es el nombre de nuestro servidor DNS
ns1 IN A 192.168.1.10 ; IP de tu servidor Bind9
servidor IN A 192.168.1.10 ; Si el mismo servidor tiene otro nombre
pc-javier IN A 192.168.1.50
impresora IN A 192.168.1.60
router IN A 192.168.1.1
Algunas claves sobre este archivo:
$TTL
: El Tiempo de Vida por defecto para los registros. Otros servidores DNS cachearán estos registros durante este tiempo.SOA
(Start of Authority): Define información autoritativa sobre la zona.ns1.mihogar.lan.
es el servidor de nombres primario para la zona (el punto final es importante).admin.mihogar.lan.
es el email del administrador (reemplaza el primer punto por@
, o sea,admin@mihogar.lan
).- Serial: ¡Este número es crucial! Cada vez que modifiques este archivo, debes incrementar este número. Es la forma en que los servidores DNS esclavos (si los tuvieras) saben que la zona ha cambiado. Un formato común es
YYYYMMDDNN
(AñoMesDíaNúmeroDeSerieDelDía). NS
(Name Server): Declara el servidor de nombres para esta zona.ns1.mihogar.lan.
apunta a nuestro propio servidor.A
(Address Record): Asocia un nombre de host con una dirección IPv4.ns1 IN A 192.168.1.10
: Define quens1.mihogar.lan
tiene la IP192.168.1.10
.- Los nombres sin punto al final se consideran relativos a la zona (ej:
pc-javier
se convierte enpc-javier.mihogar.lan
).
Guarda el archivo y cierra el editor.
Paso 4: Configurando una Zona DNS Inversa (Reverse Lookup Zone) – ¡Muy Recomendable!
Una zona inversa hace lo contrario a una directa: traduce una dirección IP a un nombre de host (ej: 192.168.1.50
-> pc-javier.mihogar.lan
). Aunque no es estrictamente obligatoria para que el DNS funcione, muchos servicios y aplicaciones la utilizan para verificación o logging, por lo que es muy recomendable configurarla.
Para una red 192.168.1.0/24
, el nombre de la zona inversa es 1.168.192.in-addr.arpa
. Fíjate que los octetos de la red van en orden inverso.
Editamos de nuevo named.conf.local
:
sudo nano /etc/bind/named.conf.local
Y añadimos la definición de la zona inversa:
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.192.168.1"; // Archivo para los registros de la zona inversa
allow-transfer { none; };
// allow-update { none; };
};
Guarda y cierra. Ahora creamos el archivo db.192.168.1
:
sudo nano /etc/bind/zones/db.192.168.1
Y añadimos su contenido:
$TTL 604800
@ IN SOA ns1.mihogar.lan. admin.mihogar.lan. (
2024072101 ; Serial (¡Incrementar si cambias!)
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; Servidor de Nombres
@ IN NS ns1.mihogar.lan.
; Registros PTR - IP a Nombre
; Solo se pone el último octeto de la IP, ya que el resto está definido en el nombre de la zona
10 IN PTR ns1.mihogar.lan. ; 192.168.1.10 -> ns1.mihogar.lan.
10 IN PTR servidor.mihogar.lan. ; También para el mismo servidor si tiene múltiples nombres
50 IN PTR pc-javier.mihogar.lan. ; 192.168.1.50 -> pc-javier.mihogar.lan.
60 IN PTR impresora.mihogar.lan. ; 192.168.1.60 -> impresora.mihogar.lan.
1 IN PTR router.mihogar.lan. ; 192.168.1.1 -> router.mihogar.lan.
PTR
(Pointer Record): Asocia una dirección IP con un nombre de host canónico.- Los números a la izquierda (
10
,50
,60
,1
) son el último octeto de la dirección IP. El nombre del host debe ser completo (FQDN), terminando con un punto.
Guarda y cierra el archivo. No olvides incrementar el serial si haces cambios.
Paso 5: Verificación de Sintaxis y Aplicación de Cambios
Antes de reiniciar Bind9, es fundamental comprobar que no hay errores de sintaxis en nuestros archivos de configuración.
- Comprobar la configuración general de Bind9 (
named.conf
y los archivos que incluye):
sudo named-checkconf
Si no muestra nada, es que todo está correcto. Si hay errores, te indicará el archivo y la línea.
- Comprobar la sintaxis de la zona directa:
sudo named-checkzone mihogar.lan /etc/bind/zones/db.mihogar.lan
Deberías ver algo como: zone mihogar.lan/IN: loaded serial 2024072101 OK
- Comprobar la sintaxis de la zona inversa:
sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/zones/db.192.168.1
Deberías ver: zone 1.168.192.in-addr.arpa/IN: loaded serial 2024072101 OK
Si todas las comprobaciones son correctas, ¡es hora de reiniciar Bind9 para que cargue la nueva configuración!
sudo systemctl restart bind9
Y comprobamos su estado:
sudo systemctl status bind9
Debería mostrarse como active (running)
. Si hay problemas, puedes consultar los logs del sistema para más pistas:
sudo journalctl -u bind9 -f
// O también en:
// sudo tail -f /var/log/syslog | grep named
Paso 6: Configurando los Clientes DNS para Usar tu Nuevo Servidor
Ahora que tu servidor DNS está funcionando, necesitas que los equipos de tu red lo usen.
- En el propio servidor Debian:
Puedes configurar /etc/resolv.conf
para que use 127.0.0.1
(localhost) como su primer servidor de nombres.
Edita /etc/resolv.conf
:
nameserver 127.0.0.1
nameserver 1.1.1.1 ; Un fallback, por si acaso
search mihogar.lan
Ten en cuenta que /etc/resolv.conf
puede ser sobrescrito por systemd-resolved
o NetworkManager
. La forma «correcta» de configurarlo permanentemente depende de cómo gestiones la red en tu Debian (ej: netplan
, ifupdown
en /etc/network/interfaces
, o configuración de systemd-resolved
). Para systemd-resolved
, editarías /etc/systemd/resolved.conf
. Para netplan
, el archivo YAML en /etc/netplan/
.
- En otros clientes de la red (Windows, Linux, macOS):
Deberás ir a la configuración de red de cada cliente y cambiar el servidor DNS para que apunte a la IP de tu servidor Bind9 (ej: 192.168.1.10
).
- En tu router (la mejor opción para la mayoría de redes domésticas):
Si tu router lo permite, la forma más sencilla es configurar su servidor DHCP para que anuncie la IP de tu servidor Bind9 (192.168.1.10
) como el servidor DNS para todos los clientes que obtengan una IP por DHCP. Así, no tendrás que configurar cada cliente manualmente.
Paso 7: ¡A Probar! Verificando que Todo Funciona
Este es el momento de la verdad. Desde un cliente que esté usando tu nuevo servidor DNS (o desde el propio servidor, si lo configuraste para usar 127.0.0.1
), abre una terminal y prueba lo siguiente (usando los ejemplos de mihogar.lan
y las IPs definidas):
Pruebas de resolución directa:
nslookup pc-javier.mihogar.lan
// Debería devolver la IP 192.168.1.50 y mostrar que la respuesta vino de tu servidor (192.168.1.10).
dig pc-javier.mihogar.lan
// dig
da información más detallada. Busca la sección ANSWER SECTION.
Pruebas de resolución inversa:
nslookup 192.168.1.50
// Debería devolver el nombre pc-javier.mihogar.lan.
dig -x 192.168.1.50
// El -x
es para consultas inversas.
Prueba de resolución de nombres externos (para verificar los forwarders):
nslookup www.google.com
// Debería resolver correctamente. La primera vez puede tardar un poco más mientras tu servidor consulta a los forwarders. Las siguientes serán más rápidas por el caché.
Si todas estas pruebas funcionan, ¡enhorabuena! Has conseguido configurar servidor DNS Bind9 Debian paso a paso y ahora tienes tu propio servidor DNS resolviendo nombres para tu red local y para internet.
Conclusión y Próximos Pasos
Montar tu propio servidor DNS con Bind9 en Debian puede parecer una tarea compleja al principio, pero como has visto, siguiendo una guía configuración DNS local Bind9 Debian como esta, es totalmente factible. Ahora tienes un mayor control sobre las resoluciones de nombres en tu red, una pequeña mejora de rendimiento potencial y, lo más importante, un conocimiento más profundo de cómo funciona esta tecnología esencial.
Este es solo el comienzo. Desde aquí, puedes explorar:
- Añadir más registros: Registros
MX
para servidores de correo,CNAME
para alias,TXT
para diversas verificaciones, etc. - Seguridad avanzada: Considera ejecutar Bind9 en un entorno
chroot
para mayor aislamiento, o investigar sobre DNSSEC para validar la autenticidad de las respuestas DNS (aunque esto es más complejo). - Mantenimiento: Recuerda actualizar Bind9 cuando salgan nuevas versiones y revisar los logs periódicamente. ¡Y no olvides incrementar el número de serie en tus archivos de zona cada vez que los modifiques!
- Zonas esclavas: Si tienes una red más grande, podrías configurar servidores DNS esclavos que repliquen las zonas desde tu maestro.
Espero que esta guía para instalar Bind9 Debian para principiantes te haya sido de utilidad. Entender y gestionar servicios como DNS es una habilidad valiosa, tanto para la administración de sistemas como para la ciberseguridad – algo en lo que, como sabéis, he estado bastante metido últimamente con la certificación ISO27001 en la empresa. Un DNS bien configurado es un pilar para una red robusta y segura.
Si tienes alguna duda, tropiezas con algún problema o quieres compartir tu experiencia configurando Bind9, ¡no dudes en dejar un comentario! ✅
Deja una respuesta