¿Cómo configurar un servidor DNS de caché recursivo?

Aprender Certificado Fundación Linux en España contenido Técnicos desde Cero en CiberED

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.conf segú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 (o bind9)
  • 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 → incluye named.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 usa forward 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 (o bind9).
  • Recargar sin cortar conexiones: sudo rndc reload (si rndc está configurado).
  • Verificar configuración: sudo named-checkconf.
  • Ver logs: journalctl -u named o /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 status
  • sudo 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

ProblemaPosible causaSolución
Consulta no respondeServicio no arrancado, firewall bloquea puerto 53systemctl status named, abrir puerto 53 UDP/TCP
“connection timed out” desde clienteallow-query no incluye la red del clienteAñadir la red en allow-query y allow-recursion
“REFUSED” en la respuestaRecursión deshabilitada o no permitida para ese clienteRevisar recursion yes; y allow-recursion
Respuesta lentaSin forwarders y recursión directa lenta, o caché vacíaConfigurar forwarders, calentar caché
“unknown host” para dominios internosNo hay zonas locales o search domain incorrectoConfigurar zonas locales o usar FQDN
DNSSEC fallaHora incorrecta, validación DNSSEC mal configuradaSincronizar NTP, revisar dnssec-validation

Verificar sintaxis con named-checkconf y logs con journalctl.

20.10. Ejercicios prácticos

  1. Instalación y configuración básica: Instala BIND. Configura un servidor caché que escuche en todas las interfaces y permita consultas solo desde localhost y 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 con dig @localhost www.wikipedia.org.

  2. 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?

  3. Restricción de acceso: Cambia allow-query para que solo permita localhost. Intenta consultar desde otro equipo; debe fallar. Vuelve a incluir tu red.

  4. Limpieza de caché: Usa sudo rndc flush para limpiar la caché. Compara el tiempo de consulta antes y después de limpiar.

  5. Monitoreo: Genera estadísticas con sudo rndc stats y localiza el archivo de salida. Busca campos relacionados con caché y consultas.

  6. 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 usando dig y revisando los logs.

20.11. Resumen y consejos para LFCS

  • Un servidor DNS caché recursivo se configura principalmente en options de named.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-checkconf y los logs con journalctl.
  • Usa dig para 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.

Vistas: 0

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio