Configurar un Servidor de DNS Seguro y Privado con Pi Hole y Unbound

Contar con un servidor de DNS local es crucial a la hora de gestionar y hacer crecer un Homelab.

Al principio puede parecer sencillo recordar una o varias direcciones IP + su correspondiente puerto, pero en cuanto el número de servicios autoalojados crece por encima de cierto umbral, se va haciendo más y más complicado (sobre todo para aquellos de uso menos frecuente).

Por ello, recomiendo que tu Homelab cuente con un servidor de DNS privado, ya que eso te va a permitir asignar nombres fáciles de recordar para acceder a tus servicios locales.

Pi Hole configurada para poder acceder a direcciones locales mediante nombres de dominio en vez de IPs
Pi Hole configurada para poder acceder a direcciones locales mediante nombres de dominio en vez de IPs

 

Sólo esto ya sería un gran avance pero, ¿por qué parar ahí?

Existen soluciones que además de la funcionalidad propia de un servidor DNS mejoran la seguridad y la privacidad de tu red mediante la implementación de:

  • Filtrado de DNS: es el proceso de controlar o bloquear el acceso a ciertos sitios web o dominios mediante la manipulación de las consultas de DNS
    • Ventajas:
      • Privacidad: bloquea el envío de datos a servidores de telemetría, impidiendo que estos reciban los datos generados mediante el uso diario de tus dispositivos
      • Seguridad: bloquea el acceso a sitios web conocidos por distribuir malware, phishing o contenido inapropiado. De este modo, en caso de una infección de malware se podría llegar a impedir la comunicación del mismo con sus servidores de control, limitando el posible daño sufrido
      • Bloqueo de anuncios a nivel de red: impide que se muestren anuncios en todos los dispositivos de la red sin necesidad de llevar a cabo instalaciones individuales en cada uno de los mismos
      • Ahorro de ancho de banda: las peticiones a sitios web no deseados o que consumen mucho ancho de banda, el filtrado de DNS puede ayudar a optimizar el rendimiento de la red y ahorrar recursos
      • Control parental: bloquea el acceso a sitios web peligrosos o no aptos para niños
    • Limitaciones:
      • Al estar basado en listas estáticas de dominios, los beneficios en cuanto a seguridad están limitados a sitios conocidos de distribución de malware. En ataques avanzados se usan dominios nuevos “sin manchar”, de manera que no serían filtrados
      • La configuración de las listas de bloqueo puede llevar a que haya ciertos servicios legítimos que no funcionen de manera correcta, sin embargo, esto es muy poco probable si se utilizan listas de bloqueo por defecto en vez otras más extensas
      • El bloqueo de anuncios funciona siempre y cuando estos se sirvan desde un dominio reconocido como tal, de manera que esto no funciona en ciertos servicios como YouTube, para los cuales será necesario implementar otro tipo de medidas
  • Peticiones de DNS recursivas: en vez de contactar a un único servidor DNS para recibir la IP asociada a un dominio, se consultarán varios servidores de manera consecutiva hasta establecer la correlación entre DNS e IP, de manera que por ejemplo para visitar rodrigocantera.com, primero se hará una petición al servidor DNS de tu red (probablemente el que tenga por defecto tu ISP) para identificar el servidor autoritativo para el dominio “.com”, y luego a ese servidor se le hará otra petición para obtener la IP de “rodrigocantera.com”. Esto es por supuesto una simplificación y recomiendo referirse a este artículo para un ejemplo completo.
    • Ventajas: al contactar individualmente con los servidores autoritativos para cada dominio, ningún servidor o proveedor individual tendrá una visión completa de todos los dominios visitados
    • Limitaciones:
      • Existe una pequeña penalización de latencia, ya que es necesario efectuar varias peticiones DNS para resolver una dirección. Sin embargo, esto sólo es un problema la primera vez que se visite un sitio, puesto que a partir de ese momento la dirección queda cacheada de manera local y, por lo tanto, no es necesario volver a efectuar la búsqueda recursiva.
      • Tu ISP seguirá siendo capaz de tener esta información de manera trivial porque el tráfico de DNS no está cifrado por defecto, para prevenir esto será necesario utilizar otras herramientas como DNSSEC o una VPN

 

Existen multitud de herramientas para conseguir estos objetivos, pero personalmente prefiero la simplicidad e intuitividad de Pi Hole y su buena integración con Unbound, así que teniendo esto claro, la siguiente cuestión es escoger cómo y dónde desplegarlas.

Para este tipo de servicios prefiero decantarme por instalarlos de manera nativa en una máquina virtual dedicada en vez de utilizar otras tecnologías como Docker (que veremos más adelante).

Llegados a este punto y si has seguido los artículos anteriores (servidor, hipervisor), deberías disponer de todas las herramientas necesarias para desplegar tu servidor de DNS local, privado, y seguro, siguiendo estos pasos:

  1. Crear una máquina virtual en Proxmox, e instalar el sistema operativo de tu elección (en mi caso suelo escoger Ubuntu Server LTS)
  2. Seguir el manual de instalación de Pi Hole
  3. Configurar Pi Hole como servidor DNS en tu router para que todos los dispositivos de tu red lo puedan utilizar sin necesidad de configuración adicional. (ojo, no todos los routers permiten esto, especialmente los routers por defecto de los ISP)
  4. Instalar y configurar Unbound
  5. (Opcional) Extender las listas de bloqueo por defecto
    1. Firebog
    2. Filerlists
  6. Incluir nombres de dominio locales para tus servicios autogestionados

Con esto ya está todo listo para empezar a usar tu propio servidor de DNS en tu Homelab.

Pi Hole configurada con para usar Unbound (en rojo) y con listas de bloqueo adicionales
Pi Hole configurada con para usar Unbound (en rojo) y con listas de bloqueo adicionales