Cómo configurar un servidor DNS en Linux (Bind9)
¡Hola! Bienvenido a esta guía completa. Si estás leyendo esto, es porque quieres dar el salto y montar tu propio servidor dns linux. Y no, no es una locura. De hecho, es uno de los proyectos más gratificantes para cualquier administrador de sistemas, incluso si estás empezando.
Configurar bind9 (el software de DNS más utilizado en el mundo Unix) te dará un control total sobre la resolución de nombres de tu red. Olvídate de depender de servicios externos para tu dominio interno; con esta guía, tendrás tu propio servidor funcionando en menos de lo que crees. Vamos a desgranar el proceso paso a paso, de forma clara y sin tecnicismos innecesarios.
¿Qué es un servidor DNS y por qué necesitas Bind9?
Antes de ensuciarnos las manos con comandos, vamos a ponernos en contexto. El DNS (Sistema de Nombres de Dominio) es, básicamente, la agenda telefónica de Internet. Cuando escribes www.ejemplo.com, tu ordenador no sabe dónde está eso; necesita una dirección IP (como 192.168.1.10) para conectarse. El DNS traduce ese nombre fácil de recordar a la dirección numérica.
Bind9 es el caballo de batalla de este sistema. Es robusto, seguro y, lo más importante, gratuito y de código abierto. Al configurarlo, puedes:
- Tener un servidor dns linux local para tu oficina o casa, acelerando las consultas.
- Gestionar tus propios dominios sin depender de terceros.
- Aprender a fondo cómo funciona la infraestructura crítica de Internet.
Requisitos previos y preparación del entorno
Vamos a empezar con buen pie. Para configurar bind9, necesitas:
- Una máquina Linux: Puede ser un VPS (Servidor Virtual Privado), una Raspberry Pi o una máquina virtual en tu ordenador. Esta guía cubre las dos familias principales: dns ubuntu (Debian/Ubuntu) y dns centos (RHEL/CentOS/Rocky Linux).
- Acceso root o sudo: Necesitarás permisos de administrador para instalar paquetes y editar archivos de sistema.
- Una IP estática: Es fundamental que la IP de tu servidor no cambie, o tus clientes no podrán encontrarlo de forma fiable.
- Un dominio (opcional pero recomendado): Puedes usar un dominio real que poseas o un dominio falso para pruebas internas (como
midominio.local).
[INFO] Si tu servidor usa un firewall (como
ufwofirewalld), asegúrate de abrir los puertos 53 (TCP y UDP) para que las consultas DNS puedan llegar. Sin esto, nada funcionará.
Instalación de Bind9
El primer paso es instalar el software. El proceso varía ligeramente según tu distribución.
Instalación en Ubuntu/Debian (dns ubuntu)
Es tan sencillo como actualizar los repositorios e instalar el paquete. Ejecuta estos comandos en tu terminal:
sudo apt update
sudo apt install bind9 bind9utils bind9-doc dnsutils
Los paquetes bind9utils y dnsutils son herramientas de diagnóstico y administración muy útiles (como dig y named-checkconf).
Instalación en CentOS/Rocky Linux (dns centos)
En estas distribuciones, el paquete se llama bind y el servicio se gestiona de forma similar. Usa dnf:
sudo dnf install bind bind-utils
Una vez instalado, el servicio se llamará named. Para iniciarlo y habilitarlo en el arranque, usa:
sudo systemctl start named
sudo systemctl enable named
[TIP] En Ubuntu, el servicio también se llama
named, aunque el paquete seabind9. No te confundas si ves ambos nombres.
Configuración básica de Bind9 (El archivo named.conf)
Ahora viene la parte interesante. La configuración principal de bind9 se encuentra en /etc/bind/named.conf (en Ubuntu) o /etc/named.conf (en CentOS). Este archivo suele incluir otros archivos de configuración, así que no es necesario editarlo directamente en la mayoría de los casos.
Vamos a ver la estructura básica. Normalmente, verás una línea como include "/etc/bind/named.conf.options";. Vamos a editar ese archivo de opciones.
Configurando las opciones globales
Abre el archivo de opciones con tu editor favorito (nano o vim):
sudo nano /etc/bind/named.conf.options # Para Ubuntu
sudo nano /etc/named.conf # Para CentOS (si no hay subarchivos)
Aquí definiremos quién puede consultar nuestro servidor y a quién puede reenviar las consultas que no sepa resolver. Una configuración típica para una red local sería:
options {
directory "/var/cache/bind"; # Directorio donde se guardan los archivos de zona
// Escuchamos en todas las interfaces de red
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
// Permitimos consultas desde nuestra red local (ejemplo: 192.168.1.0/24)
allow-query { localhost; 192.168.1.0/24; };
// Permitimos que nuestro servidor reenvíe consultas que no conoce a los DNS públicos
forwarders {
8.8.8.8;
1.1.1.1;
};
// Asegura que las respuestas sean auténticas (recomendado)
dnssec-validation auto;
// Configuración de seguridad básica
recursion yes;
};
Explicación rápida:
listen-on: Le dice a bind9 en qué IPs debe escuchar. Conany, escuchamos en todas.allow-query: Define qué clientes pueden hacer preguntas. Es crucial para no abrir tu servidor al mundo entero (a menos que quieras un DNS público).forwarders: Si el servidor no sabe la respuesta, le preguntará a estos (Google y Cloudflare en el ejemplo). Si no los defines, tu servidor intentará resolverlo él mismo desde la raíz, lo cual es más lento.
[WARNING] No uses
allow-query { any; };a menos que sepas exactamente lo que haces. Podrías ser víctima de un ataque de amplificación DNS.
Creando tus propias zonas DNS
Ahora vamos a crear un dominio de ejemplo. Llamémosle midominio.local. Para ello, necesitamos definir una zona.
Definiendo la zona en el archivo named.conf.local
En Ubuntu, hay un archivo específico para esto. En CentOS, puedes añadirlo al final del named.conf. Vamos a usar el archivo de zonas locales:
sudo nano /etc/bind/named.conf.local # Ubuntu
sudo nano /etc/named.conf # CentOS
Y añadimos la definición de nuestra zona:
zone "midominio.local" {
type master;
file "/etc/bind/db.midominio.local";
};
Este bloque le dice a bind9 que es el servidor maestro (autoritativo) para el dominio midominio.local y que la configuración de ese dominio está en el archivo db.midominio.local.
Creando el archivo de zona
Este es el corazón de tu dominio. Aquí es donde defines los registros DNS. Vamos a crear el archivo que mencionamos en el paso anterior:
sudo nano /etc/bind/db.midominio.local
Copia y pega la siguiente plantilla, pero cambia los valores por los tuyos:
;
; BIND data file for midominio.local
;
$TTL 604800
@ IN SOA ns1.midominio.local. admin.midominio.local. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; Registros NS (Name Server) - Define quién es el servidor autoritativo
@ IN NS ns1.midominio.local.
; Registros A (Address) - Asocia nombres con IPs
@ IN A 192.168.1.10
ns1 IN A 192.168.1.10
www IN A 192.168.1.10
; Registro CNAME (Alias) - Apunta un nombre a otro
ftp IN CNAME www.midominio.local.
; Registro MX (Mail Exchange) - Para el correo (opcional)
@ IN MX 10 mail.midominio.local.
mail IN A 192.168.1.10
Desglose de los registros:
- SOA (Start of Authority): El registro maestro. Define el servidor primario (
ns1.midominio.local.) y el email del administrador (admin.midominio.local.con un punto en lugar de@). El Serial es crítico: debe incrementarse cada vez que modifiques el archivo para que los servidores secundarios sepan que hay cambios. - NS (Name Server): Indica qué servidor es el autoritativo para esta zona.
- A (Address): La asignación más común. Asocia un hostname con una dirección IPv4.
- CNAME (Canonical Name): Crea un alias.
ftpapunta awww, que a su vez apunta a la IP. - MX (Mail Exchange): Indica el servidor de correo del dominio.
[INFO] Observa los puntos al final de los nombres completos (
ns1.midominio.local.). En DNS, un punto final significa que el nombre es absoluto (FQDN). Si lo olvidas, el servidor añadirá el nombre de la zona, lo que causará errores.
Verificación de la configuración y puesta en marcha
Antes de reiniciar el servicio, es una práctica excelente verificar que no hay errores de sintaxis.
Comprobación de sintaxis
Usa las herramientas que vienen con bind9:
# Verifica la sintaxis de los archivos de configuración principales
sudo named-checkconf
# Verifica la sintaxis del archivo de zona
sudo named-checkzone midominio.local /etc/bind/db.midominio.local
Si no hay errores, no verás ningún mensaje. Si algo está mal, te dirá la línea y el problema.
Reiniciando el servicio
Ahora sí, aplicamos los cambios:
sudo systemctl restart named # O bind9 en algunas versiones
Comprueba que el servicio está activo y sin errores:
sudo systemctl status named
Configurando tus clientes para usar el servidor dns linux
Este es el paso final. Ahora tienes tu servidor dns linux funcionando, pero tus equipos necesitan saber que existe.
En la mayoría de los sistemas, esto se hace editando el archivo /etc/resolv.conf. Pero ojo, en muchos sistemas modernos (con NetworkManager), este archivo se sobrescribe automáticamente. Lo más fiable es configurarlo en la interfaz de red.
En Ubuntu Desktop (con NetworkManager)
- Ve a Configuración del Sistema -> Red.
- Haz clic en el engranaje de tu conexión (Wi-Fi o Ethernet).
- Ve a la pestaña IPv4.
- Desactiva la opción Automático (DHCP) para el DNS y selecciona Automático (solo direcciones) o Manual.
- En el campo DNS, escribe la IP de tu servidor bind9 (por ejemplo,
192.168.1.10). - Aplica los cambios.
En CentOS/RHEL (con nmcli)
Usa la línea de comandos para configurar la conexión:
# Lista tus conexiones
nmcli con show
# Establece el DNS para la conexión "System eth0" (ejemplo)
sudo nmcli con mod "System eth0" ipv4.dns "192.168.1.10"
# Reactiva la conexión
sudo nmcli con up "System eth0"
Comprobación rápida
Para saber si todo funciona, usa la herramienta dig desde cualquier cliente:
dig @192.168.1.10 www.midominio.local
Si ves una respuesta con una sección ANSWER SECTION que contiene 192.168.1.10, ¡enhorabuena! Tu servidor DNS está funcionando perfectamente.
Solución de problemas comunes (FAQ)
Aquí tienes las dudas más habituales cuando se empieza con bind9:
1. ¿Por qué mi servidor no responde a las consultas externas?
- El firewall: Es lo primero. Asegúrate de que el puerto 53 (TCP y UDP) está abierto.
allow-query: Revisa que tu red está incluida en la lista deallow-queryennamed.conf.options.listen-on: Si tu servidor tiene varias IPs, asegúrate de que está escuchando en la correcta.
2. He modificado el archivo de zona, pero los cambios no se aplican.
- El Serial: Este es el error más común. Debes incrementar el número de Serial en el registro SOA cada vez que cambies el archivo. Si no lo haces, los servidores secundarios y las cachés no sabrán que hay novedades.
- Reiniciar: No olvides reiniciar el servicio (
sudo systemctl restart named) después de cada cambio.
3. ¿Cómo puedo ver los logs de mi servidor DNS?
Los logs son tus mejores amigos. En Ubuntu, están en /var/log/syslog. Puedes filtrarlos con:
sudo tail -f /var/log/syslog | grep named
En CentOS, usa journalctl:
sudo journalctl -u named -f
4. ¿Es seguro exponer mi servidor DNS a Internet?
Si no sabes lo que haces, no lo hagas. Un servidor DNS mal configurado puede ser usado para ataques de amplificación. Si necesitas un DNS público, estudia a fondo las prácticas de seguridad, usa allow-recursion para limitar quién puede usar tu servidor como resolver, y considera usar dnssec para firmar tus zonas.
5. ¿Puedo usar Bind9 en un panel de control como Syspanel?
¡Por supuesto! Si estás usando un panel de control como Syspanel (recuerda que el acceso a su panel es a través del puerto 2106), este se encarga de gestionar la creación de zonas y la configuración de bind9 por ti, dándote una interfaz gráfica para no tener que tocar los archivos de configuración. Es una opción fantástica si prefieres evitar la línea de comandos para tareas rutinarias.
Conclusión y siguientes pasos
Configurar un servidor dns linux con bind9 es un rito de paso para cualquier administrador. Has aprendido a instalar el software, definir zonas, crear registros y verificar que todo funciona. No es tan difícil como parece, ¿verdad?
Ahora que tienes la base, puedes explorar temas más avanzados:
- DNSSEC: Añade una capa de seguridad firmando tus zonas.
- Servidores secundarios: Configura un segundo servidor para redundancia.
- Vistas: Sirve diferentes respuestas según el origen de la consulta.
- Zonas inversas: Configura la resolución de IP a nombre (PTR).
Espero que esta guía te haya sido de gran ayuda. Si tienes alguna duda, no dudes en dejar un comentario. ¡Buena suerte con tu servidor!
