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!
🚀 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!
🎯 ¿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:
| Material | Descripción | Cantidad |
|---|---|---|
| --- | --- | --- |
| Raspberry Pi | Modelo 3B, 3B+, 4 o Zero 2 W (con Raspbian OS instalado) | 1 |
| Tarjeta microSD | Mínimo 8GB, clase 10 o superior (con sistema operativo) | 1 |
| --- | --- | --- |
| Fuente de Alimentación | Compatible con tu modelo de Raspberry Pi | 1 |
| Cable Ethernet | Para una conexión de red estable (recomendado, aunque Wi-Fi también sirve) | 1 |
| --- | --- | --- |
| Acceso SSH | Opcional, pero recomendado para una gestión más cómoda | - |
📖 ¿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.
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
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.
📝 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).
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
▶️ 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).
🧪 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.confo 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).
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
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.
맺음말 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!
Tutoriales relacionados
- Crea tu Propio Servidor NTP Preciso con Raspberry Pi y GPS: ¡Hora Sincronizada al Milisegundo!intermediate25 min
- Crea tu Propio Bloqueador de Anuncios y Rastreadores con Pi-hole en Raspberry Piintermediate15 min
- Controla Dispositivos Eléctricos con Raspberry Pi: Tu Centro de Automatización con Relésintermediate20 min
- Crea tu Propio Centro Multimedia Kodi con Raspberry Pi: Películas y Series en Casaintermediate25 min
- Automatiza tu Hogar: Control de Luces Inteligentes con Raspberry Pi y Pythonintermediate25 min
Comentarios (0)
Aún no hay comentarios. ¡Sé el primero!