El Sistema de Nombres de Dominio (DNS) es esencial en cualquier red: traduce nombres legibles por humanos (www.ejemplo.com) a direcciones IP y viceversa.
20.1. Introducción al DNS y a los servidores recursivos
Dentro de la jerarquía DNS existen varios tipos de servidores:
- Autoritativos: contienen la información oficial de un dominio (registros A, MX, NS, etc.).
- Recursivos (o resolvers): reciben consultas de clientes y buscan la respuesta en otros servidores DNS, almacenándola temporalmente en caché para acelerar futuras peticiones.
- Reenviadores (forwarders): redirigen las consultas a otros servidores recursivos.
En este capítulo nos centraremos en configurar un servidor DNS recursivo con caché utilizando BIND (Berkeley Internet Name Domain), el servidor DNS más popular en Linux. El objetivo es que actúe como resolver local para una red, reduciendo latencia y tráfico al almacenar en caché las respuestas.
El examen LFCS espera que puedas instalar BIND, configurar un servidor de caché, controlar quién puede usarlo, verificar su funcionamiento y solucionar problemas básicos.
20.2. Conceptos previos
- Consulta recursiva: el servidor busca la respuesta desde los servidores raíz, TLD y autoritativos, y la devuelve al cliente.
- Caché: almacenamiento temporal de respuestas para no repetir toda la búsqueda. Cada registro tiene un TTL (Time To Live) que indica cuánto tiempo puede conservarse.
- Forwarders: servidores DNS a los que nuestro resolver reenvía las consultas en lugar de hacer la recursión completa. Útil para reducir carga o salir a través de un DNS corporativo.
- Puertos: DNS usa UDP 53 (consultas) y TCP 53 (transferencias de zona, respuestas grandes).
- Archivos de configuración: BIND usa principalmente
/etc/named.conf(o/etc/bind/named.confsegún la distribución) y archivos de zona.
20.3. Instalación de BIND
20.3.1. En Debian/Ubuntu
sudo apt update
sudo apt install bind9 bind9utils bind9-doc
El servicio se llama named o bind9. Archivos en /etc/bind/.
20.3.2. En RHEL/CentOS/Fedora
sudo yum install bind bind-utils # o dnf
El servicio se llama named. Archivos en /etc/named/ y /etc/named.conf.
Luego de instalar, se debe habilitar e iniciar:
- Debian:
sudo systemctl enable --now named(obind9) - RHEL:
sudo systemctl enable --now named
Verificar estado: sudo systemctl status named.
20.4. Configuración de un servidor caché recursivo
Un servidor caché puro no aloja zonas autoritativas (aunque puede, pero en este capítulo solo haremos caché). La configuración principal se define en el archivo named.conf (o /etc/bind/named.conf.options en Debian).
20.4.1. Archivo principal (named.conf)
En Debian, la estructura modular incluye:
/etc/bind/named.conf→ incluyenamed.conf.options,named.conf.local,named.conf.default-zones./etc/bind/named.conf.options→ opciones globales./etc/bind/named.conf.local→ zonas locales (no necesarias para caché)./etc/bind/named.conf.default-zones→ zonas de root hints, localhost, etc.
En RHEL, se puede usar un único archivo /etc/named.conf.
Para un servidor caché, las directivas más importantes están en la sección options { ... };.
20.4.2. Configuración básica en /etc/bind/named.conf.options (Debian)
options {
directory "/var/cache/bind";
// Permitir recursión solo a redes de confianza
recursion yes;
allow-query { localhost; 192.168.1.0/24; };
allow-recursion { localhost; 192.168.1.0/24; };
// Forwarders (opcional)
forwarders {
8.8.8.8;
1.1.1.1;
};
forward only;
// Seguridad básica
dnssec-validation auto;
listen-on { any; };
listen-on-v6 { any; };
};
En RHEL, lo mismo se coloca en /etc/named.conf dentro de options.
Explicación:
directory: directorio de trabajo (donde se almacenan archivos temporales y de zona).recursion yes: habilita la recursión (por defecto sí).allow-query: quiénes pueden consultar al servidor (clientes permitidos).allow-recursion: quiénes pueden hacer consultas recursivas (si se restringe, se evita ser un resolver abierto).forwarders: lista de servidores a los que reenviar en lugar de recursión directa.forward only: siempre reenviar, nunca intentar recursión propia. Si se omite o se usaforward first, BIND intentará recursión si el forwarder no responde.dnssec-validation auto: valida DNSSEC automáticamente.listen-on: interfaces en las que escucha (por defecto todas).
Seguridad importante: un resolver abierto (que acepta consultas de cualquiera) puede ser usado en ataques de amplificación DDoS. Por eso se debe restringir allow-recursion y allow-query a las redes de confianza.
20.4.3. Configuración mínima en RHEL
Editar /etc/named.conf y asegurar:
options {
listen-on port 53 { 127.0.0.1; 192.168.1.10; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; 192.168.1.0/24; };
recursion yes;
dnssec-validation yes;
forwarders { 8.8.8.8; };
};
Luego se incluyen los archivos de zona raíz:
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
20.5. Root hints y servidores raíz
Para que la recursión directa funcione, BIND necesita conocer los servidores raíz (root hints). El archivo se llama named.ca o db.root según la distribución y normalmente se instala por defecto. Se puede actualizar con:
sudo dig NS . @a.root-servers.net > /var/named/named.ca
O en Debian: sudo apt install bind9-doc y copiar de /usr/share/doc/bind9/examples/.
20.6. Gestión del servicio y logs
- Iniciar/recargar:
sudo systemctl restart named(obind9). - Recargar sin cortar conexiones:
sudo rndc reload(sirndcestá configurado). - Verificar configuración:
sudo named-checkconf. - Ver logs:
journalctl -u namedo/var/log/syslog(Debian) //var/log/messages(RHEL).
rndc es la utilidad de control remoto de BIND. Para usarla, se puede configurar claves en /etc/bind/rndc.key (se genera automáticamente). Comandos útiles:
sudo rndc statussudo rndc stats(genera estadísticas en/var/named/data/named_stats.txt)sudo rndc flush(limpia la caché)sudo rndc reload
20.7. Probar el servidor DNS
Desde el propio servidor o un cliente de la red permitida, usar dig o nslookup.
20.7.1. Consulta directa
dig @localhost www.ejemplo.com
dig @192.168.1.10 www.google.com
Si el servidor responde y muestra la respuesta en la sección ;; QUESTION SECTION, ;; ANSWER SECTION, etc., la resolución funciona.
20.7.2. Verificar que está cacheando
La primera consulta puede tardar más (recursión o forward). La segunda debe ser casi instantánea. Para ver estadísticas de caché:
sudo rndc stats
cat /var/named/data/named_stats.txt | grep -i cache
20.7.3. Comprobar el tiempo de respuesta
dig @localhost www.ejemplo.com +stats | grep "Query time"
20.8. Configuración del cliente
Los clientes deben apuntar su resolver al servidor DNS caché. En Linux, editar /etc/resolv.conf:
nameserver 192.168.1.10
search ejemplo.local
Para sistemas con NetworkManager, es preferible configurar el DNS en la conexión para que no se sobrescriba.
20.9. Solución de problemas comunes
| Problema | Posible causa | Solución |
|---|---|---|
| Consulta no responde | Servicio no arrancado, firewall bloquea puerto 53 | systemctl status named, abrir puerto 53 UDP/TCP |
| “connection timed out” desde cliente | allow-query no incluye la red del cliente | Añadir la red en allow-query y allow-recursion |
| “REFUSED” en la respuesta | Recursión deshabilitada o no permitida para ese cliente | Revisar recursion yes; y allow-recursion |
| Respuesta lenta | Sin forwarders y recursión directa lenta, o caché vacía | Configurar forwarders, calentar caché |
| “unknown host” para dominios internos | No hay zonas locales o search domain incorrecto | Configurar zonas locales o usar FQDN |
| DNSSEC falla | Hora incorrecta, validación DNSSEC mal configurada | Sincronizar NTP, revisar dnssec-validation |
Verificar sintaxis con named-checkconf y logs con journalctl.
20.10. Ejercicios prácticos
Instalación y configuración básica: Instala BIND. Configura un servidor caché que escuche en todas las interfaces y permita consultas solo desde
localhosty tu red local (ej.192.168.56.0/24). No configures forwarders; deja que haga recursión directa. Asegúrate de que los root hints están presentes. Finalmente, inicia el servicio y verifica condig @localhost www.wikipedia.org.Añadir forwarders: Modifica la configuración para usar forwarders (8.8.8.8 y 1.1.1.1) con
forward only. Reinicia y prueba. ¿Notas diferencia en el tiempo de respuesta inicial?Restricción de acceso: Cambia
allow-querypara que solo permitalocalhost. Intenta consultar desde otro equipo; debe fallar. Vuelve a incluir tu red.Limpieza de caché: Usa
sudo rndc flushpara limpiar la caché. Compara el tiempo de consulta antes y después de limpiar.Monitoreo: Genera estadísticas con
sudo rndc statsy localiza el archivo de salida. Busca campos relacionados con caché y consultas.Configuración del cliente: Apunta un cliente Linux a tu servidor DNS caché (edita
/etc/resolv.conf). Realiza una resolución y confirma que pasa por tu servidor usandodigy revisando los logs.
20.11. Resumen y consejos para LFCS
- Un servidor DNS caché recursivo se configura principalmente en
optionsdenamed.conf. - Las directivas clave son
recursion yes;,allow-query,allow-recursion,forwarders. - Limita siempre el acceso para evitar ser un resolver abierto.
- Verifica la configuración con
named-checkconfy los logs conjournalctl. - Usa
digpara pruebas; es la herramienta DNS por excelencia. - En el examen, puede que te pidan configurar un servidor caché para una red específica, con forwarders. Practica el flujo completo varias veces.
Con este capítulo has aprendido a montar un servidor DNS recursivo con caché, una pieza fundamental en la infraestructura de red. En el próximo capítulo nos adentraremos en la instalación y configuración del servidor de bases de datos MariaDB, donde podrás almacenar y gestionar datos estructurados.
Descubre más desde CIBERED
Suscríbete y recibe las últimas entradas en tu correo electrónico.
