tutoriales.com

Crea tu Propio Servidor DNS Recursivo y Caché con Raspberry Pi y Unbound: Navegación Segura y Rápida

Descubre cómo transformar tu Raspberry Pi en un servidor DNS recursivo y con caché utilizando Unbound. Este tutorial te guiará paso a paso para configurar tu propia infraestructura DNS, mejorando la privacidad, la seguridad y la velocidad de tu conexión a internet. ¡Toma el control de tus consultas DNS!

Intermedio20 min de lectura12 views
Reportar error

🚀 Introducción: ¿Por qué un DNS Propio en tu Raspberry Pi?

En la era digital, la privacidad y la velocidad son cruciales. Cada vez que accedes a un sitio web, tu ordenador realiza una consulta DNS (Sistema de Nombres de Dominio) para traducir el nombre de dominio (por ejemplo, google.com) a una dirección IP. Por defecto, estas consultas van a los servidores DNS de tu proveedor de internet, lo que puede implicar una pérdida de privacidad y, en ocasiones, una menor velocidad.

Al montar tu propio servidor DNS recursivo y con caché en una Raspberry Pi usando Unbound, obtienes el control total sobre tus consultas. Esto no solo mejora tu privacidad al no depender de terceros, sino que también acelera la navegación al almacenar en caché las respuestas a consultas frecuentes.

Este tutorial te guiará a través de la instalación y configuración de Unbound en tu Raspberry Pi, transformándola en un centro de control DNS para toda tu red local. ¡Prepárate para una navegación más segura y eficiente!

💡 Consejo: Unbound es una excelente alternativa a Pi-hole si tu principal objetivo es la privacidad y el rendimiento DNS, más que el bloqueo de anuncios. Ambos pueden coexistir, pero Unbound se enfoca puramente en ser un resolutor DNS robusto.

🎯 ¿Qué aprenderás en este tutorial?

  • Entender qué es un servidor DNS recursivo y con caché.
  • Preparar tu Raspberry Pi para la instalación de Unbound.
  • Instalar y configurar Unbound paso a paso.
  • Optimizar Unbound para un rendimiento óptimo.
  • Configurar tus dispositivos para usar tu nuevo servidor DNS.
  • Verificar que todo funciona correctamente.

🛠️ Materiales Necesarios

Antes de empezar, asegúrate de tener los siguientes elementos a mano:

MaterialDescripciónCantidad
---------
Raspberry PiModelo 3B, 3B+, 4 o Zero 2 W (con Raspbian OS instalado)1
Tarjeta microSDMínimo 8GB, clase 10 o superior (con sistema operativo)1
---------
Fuente de AlimentaciónCompatible con tu modelo de Raspberry Pi1
Cable EthernetPara una conexión de red estable (recomendado, aunque Wi-Fi también sirve)1
---------
Acceso SSHOpcional, pero recomendado para una gestión más cómoda-
📌 Nota: Este tutorial asume que ya tienes una Raspberry Pi con **Raspberry Pi OS (anteriormente Raspbian)** instalado y configurado con acceso a internet. Si no es así, puedes encontrar numerosos tutoriales en línea para la configuración inicial.

📖 ¿Cómo Funciona Unbound? El Corazón de tu DNS

Unbound es un servidor de resolución de nombres de dominio de validación, almacenamiento en caché y recursivo. Vamos a desglosar eso un poco:

  • Recursivo: Significa que si no conoce la respuesta a una consulta, Unbound contactará a otros servidores DNS (desde los servidores raíz hasta los autoritativos) para encontrarla. Actúa como un intermediario en tu nombre.
  • Caché: Una vez que Unbound resuelve una consulta, guarda la respuesta en su memoria caché por un tiempo determinado. Si otro dispositivo en tu red pregunta por el mismo dominio, Unbound puede responder instantáneamente desde su caché, lo que acelera significativamente la navegación.
  • Validación (DNSSEC): Unbound puede validar respuestas DNS utilizando DNSSEC (DNS Security Extensions). Esto ayuda a prevenir ataques de suplantación de identidad (spoofing) de DNS, asegurando que las respuestas que recibes son auténticas.
1. Usuario solicita 'example.com' 2. Consulta llega a Unbound 3. ¿Está en caché? 4. Respuesta desde caché NO 5a. Consulta a Servidores Raíz 5b. Consulta a TLD (.com) 5c. Servidor Autoritativo 6. Responde con Dirección IP 7. Unbound almacena en caché 8. Unbound responde al usuario

preparacion-de-la-raspberry-pi

Antes de instalar Unbound, es crucial asegurarse de que tu Raspberry Pi esté actualizada y tenga una IP estática.

1. ⚙️ Actualizar el Sistema Operativo

Es una buena práctica asegurarse de que tu sistema esté completamente actualizado. Abre una terminal en tu Raspberry Pi o conéctate vía SSH y ejecuta los siguientes comandos:

sudo apt update
sudo apt upgrade -y

Esto descargará e instalará las últimas actualizaciones de paquetes.

2. 🌐 Configurar una Dirección IP Estática

Para que tu servidor DNS sea fiable, debe tener una dirección IP que no cambie. Si tu Raspberry Pi usa DHCP, su IP podría cambiar, lo que rompería la configuración DNS en tus otros dispositivos.

Para configurar una IP estática, edita el archivo dhcpcd.conf:

sudo nano /etc/dhcpcd.conf

Desplázate hasta el final del archivo y añade una sección similar a esta (ajusta los valores a tu red):

# Interfaz Ethernet
interface eth0
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 8.8.8.8 8.8.4.4

# Interfaz Wi-Fi (descomentar y ajustar si usas Wi-Fi en lugar de Ethernet)
# interface wlan0
# static ip_address=192.168.1.100/24
# static routers=192.168.1.1
# static domain_name_servers=192.168.1.1 8.8.8.8 8.8.4.4
🔥 Importante: * `static ip_address`: Asigna una IP estática a tu Raspberry Pi. Elige una IP que esté fuera del rango DHCP de tu router para evitar conflictos. * `static routers`: Es la dirección IP de tu router (gateway). * `static domain_name_servers`: Son los servidores DNS que tu Raspberry Pi usará *para sí misma* y para las consultas recursivas de Unbound. Puedes usar la IP de tu router y/o servidores DNS públicos como Google (8.8.8.8, 8.8.4.4) o Cloudflare (1.1.1.1).

Guarda el archivo (Ctrl + X, Y, Enter) y reinicia el servicio dhcpcd o toda la Raspberry Pi para aplicar los cambios:

sudo service dhcpcd restart

Verifica que la IP se haya asignado correctamente:

ip a | grep inet

Deberías ver la IP estática que configuraste para eth0 (o wlan0).


⬇️ Instalación de Unbound

Unbound está disponible en los repositorios de Raspberry Pi OS, lo que facilita su instalación.

sudo apt install unbound -y

Una vez instalado, el servicio Unbound debería iniciarse automáticamente. Sin embargo, aún no está configurado para nuestras necesidades.

📌 Nota: La instalación de Unbound también instalará las dependencias necesarias si no están ya presentes.

📝 Configuración de Unbound

La configuración principal de Unbound se encuentra en /etc/unbound/unbound.conf. Sin embargo, es buena práctica mantener este archivo base intacto y crear un nuevo archivo de configuración en /etc/unbound/unbound.conf.d/ para nuestras personalizaciones. Esto facilita las actualizaciones.

Primero, crearemos un nuevo archivo de configuración:

sudo nano /etc/unbound/unbound.conf.d/pi-dns.conf

Ahora, copia y pega el siguiente contenido. Asegúrate de leer los comentarios para entender cada sección y ajustarla si es necesario. Sustituye 192.168.1.100 por la IP estática de tu Raspberry Pi y 192.168.1.0/24 por el rango de tu red local.

server:
    # Define los puertos y interfaces donde Unbound escuchará las consultas DNS
    interface: 0.0.0.0             # Escucha en todas las interfaces IPv4
    interface: ::0                 # Escucha en todas las interfaces IPv6 (si aplica)
    port: 53                       # Puerto estándar para DNS

    # Habilita IPv4 e IPv6. Si no usas IPv6, puedes establecerlo en no.
    do-ip4: yes
    do-ip6: yes
    do-udp: yes
    do-tcp: yes

    # Número de hilos/procesos a usar. Para Raspberry Pi, 1 o 2 suele ser suficiente.
    # Si tu Pi tiene más núcleos (ej. Pi 4), puedes experimentar con más.
    num-threads: 1

    # Habilita el caché para almacenar respuestas DNS y acelerar futuras consultas.
    msg-cache-size: 32m            # Tamaño de la caché de mensajes (32 MB)
    rrset-cache-size: 64m          # Tamaño de la caché de conjuntos de registros (64 MB)

    # Habilita la privacidad de las consultas y minimiza el uso de la IP del cliente
    # para las consultas recursivas (DNSSEC).
    harden-glue: yes
    harden-dnssec-stripped: yes
    harden-referral-path: yes

    # Habilita DNSSEC para validar las respuestas DNS y proteger contra la manipulación.
    # Si tienes problemas con DNSSEC, puedes probar a desactivarlo temporalmente (no recomendado).
    val-log-level: 1               # Nivel de log para validación DNSSEC
    auto-trust-anchor-file: "/var/lib/unbound/root.key"

    # Registra información detallada en syslog. Útil para depuración.
    verbosity: 1                   # Nivel de verbosidad de los logs (0=silencioso, 1=normal, 2=detallado)

    # Permite que las consultas provengan solo de tu red local.
    # Reemplaza 192.168.1.0/24 con el rango de tu red.
    access-control: 192.168.1.0/24 allow
    access-control: 127.0.0.1/8 allow

    # Directorio donde Unbound buscará las zonas raíz. Necesario para el DNS recursivo.
    root-hints: "/etc/unbound/root.hints"

    # Bloquear dominios específicos (opcional, para bloquear anuncios o malware a nivel DNS)
    # local-zone: "adserver.com" refuse
    # local-zone: "malicious.net" always_nxdomain

    # Servidores DNS para forwarder (opcional). Si quieres que Unbound reenvíe
    # consultas a otros DNS en lugar de ser completamente recursivo. Para un DNS
    # recursivo puro, no necesitas esta sección.
    # forward-zone:
    #     name: "."
    #     forward-addr: 8.8.8.8
    #     forward-addr: 8.8.4.4

    # Configuración para permitir consultas a servidores DNS locales/privados (opcional)
    # Si tienes un servidor DNS local para tu red interna, puedes añadirlo aquí.
    # private-address: 192.168.1.0/24

remote-control:
    # Esto permite controlar Unbound remotamente (por ejemplo, para borrar la caché).
    # Se recomienda que esté desactivado a menos que lo necesites y sepas cómo asegurarlo.
    control-enable: no

Guarda y cierra el archivo (Ctrl + X, Y, Enter).

⚠️ Advertencia: Asegúrate de que `access-control` solo permita el acceso desde tu red local o las IPs específicas que confías. Exponer Unbound a internet sin una configuración de seguridad adecuada puede ser peligroso.

5.1. 🔑 Descargar los Archivos de Claves Raíz

Unbound necesita los archivos de claves raíz (root.key y root.hints) para poder resolver nombres de forma recursiva y validar DNSSEC. El archivo root.hints contiene los servidores DNS raíz del mundo, y root.key es la clave de confianza para DNSSEC.

Descarga root.hints:

sudo wget -O /etc/unbound/root.hints https://www.internic.net/domain/named.cache

Para root.key, Unbound lo generará automáticamente la primera vez que se inicie o puedes forzar su actualización con:

sudo unbound-anchor -a /var/lib/unbound/root.key
💡 Consejo: Es una buena práctica programar una tarea cron para actualizar `root.key` regularmente, por ejemplo, una vez al mes, para asegurar que siempre tienes la clave más reciente.

▶️ Iniciar y Habilitar Unbound

Ahora que Unbound está configurado, podemos iniciar y habilitar el servicio.

1. 🛑 Desactivar systemd-resolved (Posible Conflicto)

En Raspberry Pi OS (y otras distribuciones de Linux), systemd-resolved a veces interfiere con Unbound al usar el puerto 53. Es mejor desactivarlo:

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
sudo rm /etc/resolv.conf
sudo echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf > /dev/null

La última línea configura tu propia Raspberry Pi para usar su propio Unbound para las consultas DNS locales (esto es importante para la recursividad).

2. 🚀 Reiniciar Unbound y Habilitarlo al Inicio

sudo systemctl restart unbound
sudo systemctl enable unbound

3. ✅ Verificar el Estado de Unbound

Comprueba si el servicio está corriendo correctamente:

sudo systemctl status unbound

Deberías ver Active: active (running). Si ves algún error, revisa el archivo de configuración pi-dns.conf y los logs (journalctl -u unbound).

📌 Nota: Si tienes un firewall (como `ufw`) activado, asegúrate de permitir el tráfico UDP/TCP en el puerto 53 para que Unbound pueda recibir y enviar consultas. `sudo ufw allow 53/udp`, `sudo ufw allow 53/tcp`.

🧪 Probar tu Servidor DNS Unbound

Antes de configurar otros dispositivos, es crucial verificar que Unbound está resolviendo correctamente.

1. 💻 Probar desde la Raspberry Pi

Usa dig para realizar una consulta DNS a tu propio servidor (127.0.0.1 es la dirección local de la Pi):

dig @127.0.0.1 example.com

La primera vez, la consulta puede tardar un poco. Repítela inmediatamente:

dig @127.0.0.1 example.com

La segunda consulta debería ser mucho más rápida, indicando que la respuesta fue servida desde la caché de Unbound. Busca Query time: 0 msec o un valor muy bajo.

También puedes verificar si DNSSEC está funcionando:

dig @127.0.0.1 sigok.unbound.net

Deberías ver status: NOERROR y en la sección de respuesta, deberías encontrar flags: ad (Authenticated Data), lo que indica que la respuesta fue validada con DNSSEC.

2. 📱 Probar desde otro Dispositivo en tu Red

Ahora, intenta configurar manualmente las DNS de un dispositivo (tu ordenador o móvil) para que apunte a la IP estática de tu Raspberry Pi (por ejemplo, 192.168.1.100).

  • Windows: Panel de control -> Redes e Internet -> Centro de redes y recursos compartidos -> Cambiar configuración del adaptador -> Clic derecho en tu adaptador de red -> Propiedades -> Protocolo de Internet versión 4 (TCP/IPv4) -> Propiedades -> Usar las siguientes direcciones de servidor DNS -> Introduce la IP de tu Pi.
  • macOS: Preferencias del Sistema -> Red -> Selecciona tu conexión -> Avanzado -> DNS -> Añade la IP de tu Pi.
  • Linux: Edita /etc/resolv.conf o configura a través del gestor de red.
  • Android/iOS: En la configuración de Wi-Fi de tu red, busca la opción de DNS y cámbiala a manual, introduciendo la IP de tu Pi.

Después de configurar el dispositivo, prueba a navegar por internet. Si todo funciona, ¡enhorabuena! Estás usando tu propio servidor DNS.

Para verificar que el dispositivo está usando Unbound, puedes ejecutar nslookup (Windows) o dig (Linux/macOS):

nslookup example.com

La salida debería mostrar la IP de tu Raspberry Pi como el servidor DNS en uso.


⚙️ Configurar tu Router para usar Unbound (Recomendado)

Configurar cada dispositivo individualmente puede ser tedioso. La mejor solución es configurar tu router para que anuncie la Raspberry Pi como el servidor DNS principal a todos los dispositivos de tu red. Así, todos tus dispositivos usarán Unbound automáticamente.

Accede a la interfaz de administración de tu router (normalmente 192.168.1.1 o similar) y busca la sección de configuración de DHCP/DNS. Deberías poder especificar la dirección IP del servidor DNS primario. Introduce la IP estática de tu Raspberry Pi (ej. 192.168.1.100).

⚠️ Advertencia: Algunos routers no permiten cambiar el servidor DNS principal que distribuyen. En ese caso, tendrás que configurar cada dispositivo manualmente o considerar un firmware de router personalizado como OpenWRT. También puedes deshabilitar el servidor DHCP de tu router y usar el servidor DHCP de tu Raspberry Pi.

Una vez que hayas cambiado la configuración en el router, reinicia todos tus dispositivos (o renueva sus leases DHCP) para que obtengan la nueva configuración DNS.


✨ Optimización y Consideraciones Adicionales

1. 📈 Monitorización

Puedes monitorizar la actividad de Unbound revisando sus logs:

sudo journalctl -u unbound -f

O instalando herramientas de monitorización de red como iftop o nload.

2. 🧹 Limpiar la Caché de Unbound

Si necesitas forzar a Unbound a consultar una dirección de nuevo (por ejemplo, si un registro DNS ha cambiado recientemente), puedes limpiar su caché. Primero, asegúrate de que remote-control esté habilitado en unbound.conf.d/pi-dns.conf y que el servidor de control esté configurado (esto es una configuración avanzada y requiere más seguridad).

Para borrar la caché (si remote-control está configurado): sudo unbound-control reload o sudo unbound-control dump_cache y luego sudo unbound-control flush_cache.

Lo más sencillo es reiniciar el servicio Unbound para borrar la caché:

sudo systemctl restart unbound

3. 🛡️ Seguridad del Firewall

Es altamente recomendable configurar un firewall como ufw en tu Raspberry Pi para asegurar que solo los puertos necesarios estén abiertos.

sudo apt install ufw -y
sudo ufw allow OpenSSH         # Para acceso SSH
sudo ufw allow 53/udp         # Para consultas DNS (UDP)
sudo ufw allow 53/tcp         # Para consultas DNS (TCP)
sudo ufw enable
⚠️ Advertencia: NUNCA expongas el puerto 53 de tu Raspberry Pi directamente a Internet. Solo debe ser accesible desde tu red local.

4. 🔗 Uso de TLS para Upstream (DNS-over-TLS)

Para una privacidad aún mayor, puedes configurar Unbound para usar DNS-over-TLS (DoT) con los servidores DNS raíz o con forwarders que soporten DoT (como Cloudflare o Google). Esto cifra tus consultas DNS entre Unbound y los servidores superiores. Para habilitarlo, añadirías algo como esto a tu pi-dns.conf (dentro de la sección server: o forward-zone:):

# Ejemplo para reenviar consultas a Cloudflare DNS-over-TLS (si no quieres ser recursivo puro)
forward-zone:
    name: "."
    forward-addr: 1.1.1.1@853
    forward-addr: 1.0.0.1@853
    forward-tls-upstream: yes

O si quieres usar los servidores raíz pero asegurar la comunicación:

# Esto no aplica directamente a los servidores raíz, ya que Unbound realiza la recursión directamente.
# El cifrado DNS-over-TLS se utiliza principalmente con forwarders específicos.
# Para recursión pura, la seguridad se basa en DNSSEC.

5. 🔀 Unbound con Pi-hole

Si ya usas Pi-hole, puedes configurarlo para que use Unbound como su servidor DNS upstream. Esto combina el bloqueo de anuncios de Pi-hole con la privacidad y el rendimiento de Unbound.

En la configuración de Pi-hole, ve a Settings > DNS y selecciona Custom 1 (IPv4) o Custom 2 (IPv6) e introduce la IP de tu Raspberry Pi (127.0.0.1 si están en la misma Pi, o la IP estática si Unbound está en una Pi diferente). Asegúrate de que solo esta opción esté marcada y guarda.

Dispositivo Router Pi-hole Filtrado DNS Unbound Recursivo Local Servidores Raíz (Internet) 1. Consulta 2. Reenvío DNS 3. Bloquea Anuncios 4. Upstream 5. Recursión 6. IP Encontrada 7. Respuesta 8. Respuesta Final

맺음말 Conclusión

¡Felicidades! Has transformado tu Raspberry Pi en un potente servidor DNS recursivo y con caché utilizando Unbound. Ahora disfrutas de una navegación más rápida, más privada y más segura para todos los dispositivos de tu red.

Este proyecto es un excelente ejemplo de cómo una pequeña Raspberry Pi puede tener un impacto significativo en tu infraestructura de red doméstica, dándote un mayor control y conocimiento sobre cómo funciona tu internet.

Experimenta con las configuraciones, monitoriza su rendimiento y ajusta según tus necesidades. ¡El mundo de la administración de red está a tus pies!

Tutorial Completado!

Tutoriales relacionados

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!