690 - Bloquea anuncios y rastreadores con DNS

690 - Bloquea anuncios y rastreadores con DNS

#Technitium es un resolutor de #dns que lo puedes instalar en tu red local y que te permitirá crear tu propio dominio y bloquear anuncios y trastreadores

1:25
-3:15

En el episodio 643 titulado un resolutor DNS y Traefik con certificados, te expliqué mis razones para levantar mi propio resolutor de DNS local. Y creo que fue una muy buena decisión la de adoptar mi propio resolutor de DNS local, porque me permitió crear mi propio dominio interno, con su correspondiente certificado, aunque autofirmado, y algunas ventajas mas. Sin embargo, el resolutor, era de los que se configuran a la vieja usanza, es decir, mediante archivos de configuración, y por otro lado, no permitía obtener estadísticas del trabajo realizado. La cuestión es que últimamente, y desde la llegada de Dockge, me estoy acomodando. Esto te lo conté en el episodio 686 que titulé actualiza tus contenedores docker sin dolor, en el que te hablé sobre dos estupendas herramientas como son Dockge y Cup, que me permiten estar al tanto de las actualizaciones de las imágenes que utilizo, y la posibilidad de actualizarlas sin necesidad de recurrir a terminal… con lo que a mi me gusta. Así que cuando me tropecé con Technitium, un resolutor DNS configurable vía interfaz gráfico y con la posibilidad de crear mi propio dominio y otras características, decidí darle una oportunidad, y es precisamente esto lo que te traigo hoy, un resolutor de DNS con muchas mas características, que te permitirá bloquear anuncios y rastreadores.

Bloquea anuncios y rastreadores con este DNS local

Algunos detalles

Antes de hablarte sobre este resolutor de DNS y con el objetivo de compararlo con otros que son mas conocidos como Pi-hole o AdGuard, hace falta unos pocos conceptos para ver el potencial de esta herramienta que hoy te traigo.

¿Qué es un DNS recursivo?

Un servidor DNS recursivo es el que se encarga de buscar la dirección IP asociada a un dominio cuando no la tiene almacenada en caché. Para hacerlo, realiza múltiples consultas a otros servidores DNS (como los root, TLD y autoritativos) hasta obtener una respuesta definitiva. Vamos, es lo que sería un detective, encargado de buscar y localizar la traducción de un nombre de dominio a una dirección IP.

Por ejemplo, si tu navegador pregunta por ejemplo.es y tu servidor DNS recursivo no lo tiene en caché, este preguntará a los servidores raíz quién sabe algo sobre .es, luego preguntará a los de .es por ejemplo.es, y así sucesivamente, hasta que consiga obtener la IP.

Esto es clave si quieres tener un control total sobre tus resoluciones DNS sin depender de servidores externos como Google (8.8.8.8) o Cloudflare (1.1.1.1).

¿Qué es un DNS autoritativo?

Por otro lado tenemos los DNS autoritativo. Un servidor DNS autoritativo es el dueño de la verdad sobre un dominio. Es el que contiene los registros oficiales (como A, MX, CNAME…) que responden con la información definitiva sobre un nombre de dominio.

Comparando recursivo y autoritativo

En la siguiente tabla, puedes comparar las diferencias entre un servidor DNS recursivo y uno autoritativo,

FunciónRecursivoAutoritativo
¿Responde directamente?Solo si tiene la respuesta en cachéSí, porque «es su dominio»
¿Consulta a otros DNS?Sí, si no tiene la respuestaNo, responde solo sobre lo que gestiona
¿Guarda registros DNS?No de forma definitivaSí, mantiene la zona DNS
¿Para qué sirve?Resolver cualquier dominioServir información oficial de un dominio

¿Qué son DoH, DoT y DoQ?

Otra de las cuestiones que pueden surgir a la hora de comparar este resolutor con otros, es ¿qué son DoH, DoT y DoQ?. Son protocolos que cifran las consultas DNS, evitando que tu proveedor de Internet (o cualquier otro observador en la red) vea qué sitios estás visitando.

Como comentamos en un episodio anterior, internet no entiende de nombres como ejemplo.es. El entiende de IP. Lo de los nombres es fácil para seres humanos y no tanto para máquinas. Así, cuando queremos ir a un sitio, es necesario realizar una traducción de un nombre de dominio a una IP, y en ese caso, recurrimos a los resolutores de DNS, que son los encargados de realizar esa traducción.

El problema es que cuando recurrimos a esos resolutores de DNS lo hacemos en claro, es decir, sin cifrar la pregunta, con lo que cualquiera puede ver donde queremos ir. Para evitar esto, surgen distintos protocolos que se encargan de cifrar esas consultas.

🔹 DNS-over-HTTPS (DoH)
  • Usa el protocolo HTTPS (puerto 443) para enviar consultas DNS.
  • Se ve como una conexión web normal, por lo que es más difícil de bloquear o inspeccionar.
  • Muy usado por navegadores como Firefox y Chrome.

Ventajas:

  • Cifrado fuerte.
  • Difícil de detectar por los ISP.

⚠️ Inconvenientes:

  • A veces centraliza el tráfico en grandes proveedores (Cloudflare, Google).
🔸 DNS-over-TLS (DoT)
  • Usa el protocolo TLS (puerto 853) específicamente para DNS.
  • Más fácil de bloquear que DoH, pero también más fácil de gestionar en entornos controlados.

Ventajas:

  • Cifrado y privacidad sin pasar por HTTP.
  • Más “transparente” en entornos de red gestionados.

⚠️ Inconvenientes:

  • Puede ser detectado o bloqueado si el puerto 853 está cerrado.
🔺 DNS-over-QUIC (DoQ)
  • Usa QUIC, un protocolo basado en UDP, diseñado para mejorar la latencia y seguridad.
  • Es el más moderno de los tres y está ganando soporte.

Ventajas:

  • Rápido, eficiente y con menor latencia.
  • También cifra las consultas.

⚠️ Inconvenientes:

  • Todavía poco soporte en muchos sistemas y herramientas.

¿Por qué tener tu propio DNS?

Cada vez que visitas una web, tu equipo hace una petición DNS: pregunta a un servidor cuál es la dirección IP del dominio que quieres visitar. Esta consulta puede ser registrada, modificada o incluso bloqueada por tu proveedor de internet o servicios como Google DNS o Cloudflare. Tener tu propio servidor DNS significa que puedes:

  • Evitar el rastreo por parte de terceros.
  • Bloquear anuncios y dominios maliciosos desde el origen.
  • Acelerar la resolución de nombres dentro de tu red local.
  • Gestionar zonas DNS autoritativas para tus propios dominios.
  • Servicios autohospedados.
  • Ambientes de desarrollo.
  • Redireccionamiento interno.
  • Control total de tus dominios personalizados.

Casos de uso

  • Red doméstica: bloquea publicidad y protege todos tus dispositivos sin necesidad de instalar nada en ellos.
  • Servidor de nombres para dominios propios: perfecto si tienes servicios autohospedados.
  • Ambientes de desarrollo y pruebas: ideal para crear zonas DNS personalizadas.

Sobre Technitium DNServer

Technitium DNServer no es ni mas ni menos que un servidor DNS local, de código abierto y multiplataforma que ofrece funcionalidades tanto autoritativas como recurisivas. Lo mejor de este servidor DNS es que está pensado para facilitar la gestión, priorizando privacidad y seguridad, y además es ideal para redes pequeñas.

Características

  • Privacidad y seguridad, permite configurar protocolos cifrados como DNS-over-TLS, DNS-over-HTTPS y DNS-over-QUIC, protegiendo las consultas DNS contra espionaje y manipulaciones por parte de terceros, incluidos algunos proveedores de servicios de internet.
  • Bloqueo de dominios, soporta listas de bloqueo automáticas para filtrar anuncios, rastreadores y malware, funcionando de manera similar a soluciones como Pi-hole.
  • Interfaz web intuitiva: Ofrece una consola web accesible desde cualquier navegador moderno, facilitando la administración y configuración del servidor sin necesidad de conocimientos avanzados.
  • Alto rendimiento, utiliza operaciones de entrada/salida asíncronas, lo que le permite manejar millones de solicitudes por minuto incluso en hardware modesto.
  • Soporte para DNSSEC: Compatible con la validación y firma de DNSSEC utilizando algoritmos RSA y ECDSA, lo que mejora la integridad y autenticidad de las respuestas DNS.
  • Aplicaciones DNS personalizadas: Permite desarrollar y ejecutar aplicaciones DNS personalizadas directamente en el servidor, ofreciendo flexibilidad para implementar lógica de negocio específica.
  • API HTTP: Proporciona una API HTTP que permite automatizar tareas de configuración y gestión del servidor, facilitando la integración con otras herramientas y sistemas.

Instalación

En mi caso, y como ya te puedes imaginar utilizo Docker, aunque como mencioné anteriormente, se trata de un servicio multiplataforma, con lo que podrías instalarlo tanto en Windows, como MacOS como Linux. Pero por cuestiones de comodidad prefiero hacerlo con Docker.

ervices:
  dns-server:
    container_name: dns-server
    hostname: dns-server
    image: technitium/dns-server:latest
    # For DHCP deployments, use "host" network mode and remove all the port mappings, including the ports array by commenting them
    # network_mode: "host"
    ports:
      - "53:53/udp" #DNS service
      - "53:53/tcp" #DNS service
      # - "853:853/udp" #DNS-over-QUIC service
      # - "853:853/tcp" #DNS-over-TLS service
      # - "443:443/udp" #DNS-over-HTTPS service (HTTP/3)
      # - "443:443/tcp" #DNS-over-HTTPS service (HTTP/1.1, HTTP/2)
      # - "80:80/tcp" #DNS-over-HTTP service (use with reverse proxy or certbot certificate renewal)
      # - "8053:8053/tcp" #DNS-over-HTTP service (use with reverse proxy)
      # - "67:67/udp" #DHCP service
    environment:
      - DNS_SERVER_DOMAIN=dns-server #The primary domain name used by this DNS Server to identify itself.
      # - DNS_SERVER_ADMIN_PASSWORD=password #DNS web console admin user password.
      # - DNS_SERVER_ADMIN_PASSWORD_FILE=password.txt #The path to a file that contains a plain text password for the DNS web console admin user.
      # - DNS_SERVER_PREFER_IPV6=false #DNS Server will use IPv6 for querying whenever possible with this option enabled.
      # - DNS_SERVER_WEB_SERVICE_LOCAL_ADDRESSES=172.17.0.1,127.0.0.1 #Comma separated list of network interface IP addresses that you want the web service to listen on for requests. The "172.17.0.1" address is the built-in Docker bridge. The "[::]" is the default value if not specified. Note! This must be used only with "host" network mode.
      # - DNS_SERVER_WEB_SERVICE_HTTP_PORT=5380 #The TCP port number for the DNS web console over HTTP protocol.
      # - DNS_SERVER_WEB_SERVICE_HTTPS_PORT=53443 #The TCP port number for the DNS web console over HTTPS protocol.
      # - DNS_SERVER_WEB_SERVICE_ENABLE_HTTPS=false #Enables HTTPS for the DNS web console.
      # - DNS_SERVER_WEB_SERVICE_USE_SELF_SIGNED_CERT=false #Enables self signed TLS certificate for the DNS web console.
      # - DNS_SERVER_OPTIONAL_PROTOCOL_DNS_OVER_HTTP=false #Enables DNS server optional protocol DNS-over-HTTP on TCP port 8053 to be used with a TLS terminating reverse proxy like nginx.
      # - DNS_SERVER_RECURSION=AllowOnlyForPrivateNetworks #Recursion options: Allow, Deny, AllowOnlyForPrivateNetworks, UseSpecifiedNetworkACL.
      # - DNS_SERVER_RECURSION_NETWORK_ACL=192.168.10.0/24, !192.168.10.2 #Comma separated list of IP addresses or network addresses to allow access. Add ! character at the start to deny access, e.g. !192.168.10.0/24 will deny entire subnet. The ACL is processed in the same order its listed. If no networks match, the default policy is to deny all except loopback. Valid only for `UseSpecifiedNetworkACL` recursion option.
      # - DNS_SERVER_RECURSION_DENIED_NETWORKS=1.1.1.0/24 #Comma separated list of IP addresses or network addresses to deny recursion. Valid only for `UseSpecifiedNetworkACL` recursion option. This option is obsolete and DNS_SERVER_RECURSION_NETWORK_ACL should be used instead.
      # - DNS_SERVER_RECURSION_ALLOWED_NETWORKS=127.0.0.1, 192.168.1.0/24 #Comma separated list of IP addresses or network addresses to allow recursion. Valid only for `UseSpecifiedNetworkACL` recursion option.  This option is obsolete and DNS_SERVER_RECURSION_NETWORK_ACL should be used instead.
      # - DNS_SERVER_ENABLE_BLOCKING=false #Sets the DNS server to block domain names using Blocked Zone and Block List Zone.
      # - DNS_SERVER_ALLOW_TXT_BLOCKING_REPORT=false #Specifies if the DNS Server should respond with TXT records containing a blocked domain report for TXT type requests.
      # - DNS_SERVER_BLOCK_LIST_URLS= #A comma separated list of block list URLs.
      # - DNS_SERVER_FORWARDERS=1.1.1.1, 8.8.8.8 #Comma separated list of forwarder addresses.
      # - DNS_SERVER_FORWARDER_PROTOCOL=Tcp #Forwarder protocol options: Udp, Tcp, Tls, Https, HttpsJson.
      # - DNS_SERVER_LOG_USING_LOCAL_TIME=true #Enable this option to use local time instead of UTC for logging.
    volumes:
      - config:/etc/dns
    restart: unless-stopped
    sysctls:
      - net.ipv4.ip_local_port_range=1024 65000
    networks:
      - proxy
    labels:
      - traefik.http.routers.dns-server.entrypoints=https
      - traefik.http.services.dns-server.loadbalancer.server.port=5380
      - traefik.http.routers.dns-server.rule=Host(`dns-server.tu-servidor.corp`)


volumes:
  config:
networks:
  proxy:
    external: true

Como ves muchas de las opciones disponibles de Technitium actualmente las tengo deshabilitadas. Esto es así, porque no hago mas que probar todas sus opciones de configuración para determinar cuales son las que mas me convienen.

Comparativa con otras soluciones

CaracterísticaTechnitiumPi-holeAdGuard Home
Bloqueo de anuncios
DNS recursivo
DNS autoritativo
Interfaz web
Soporte DoH
Soporte DoT
Soporte DoQ

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *