Bloquear anuncios en todos tus dispositivos: 4 soluciones en VPS Linux
La publicidad en Internet puede volverse agotadora: banners que ocupan media página, vídeos que se reproducen solos, rastreadores publicitarios y contenido promocional que aparece no solo en el navegador, sino también en aplicaciones y televisores conectados. Durante años, la respuesta más evidente ha sido instalar una extensión de Chrome para bloquear anuncios.
Pero este enfoque tiene límites. Una extensión protege principalmente el navegador donde está instalada, no necesariamente las aplicaciones, los teléfonos, las TV u otros dispositivos. Además, los navegadores están endureciendo las reglas para las extensiones. En Chrome, por ejemplo, Manifest V3, el marco técnico actual de las extensiones de Chrome, retiró para la mayoría de ellas el antiguo permiso webRequestBlocking, obligando a los bloqueadores de contenido a adaptar la forma en que filtran las peticiones de red.
Eso no significa que los bloqueadores de anuncios estén prohibidos. Siguen existiendo, pero según el navegador y el dispositivo pueden ser menos potentes, no estar disponibles o simplemente no poder instalarse. Otra opción consiste en bloquear los dominios publicitarios y de seguimiento a nivel de red, antes de que lleguen al navegador o a las aplicaciones.
Esta solución utiliza un DNS filtrante. El DNS es el directorio que utilizan tus dispositivos para convertir un nombre de dominio en la dirección de un servidor. Un DNS filtrante puede negarse a resolver dominios conocidos por distribuir publicidad o seguimiento, deteniendo la conexión antes de que el contenido llegue a cargarse. Alojado en un VPS Linux, puede proteger varios dispositivos y redes al mismo tiempo mientras mantienes bajo tu control las listas de bloqueo, los registros y las reglas. En esta guía comparamos cuatro proyectos open source: AdGuard Home, Technitium DNS Server, Blocky y Pi-hole.
Todos persiguen el mismo objetivo general, pero con enfoques muy distintos. Primero veremos sus diferencias esenciales y después las ventajas e inconvenientes de cada uno en un VPS público.
Comparativa rápida
En este artículo aparecen a menudo tres siglas. DoH (DNS-over-HTTPS) transporta las consultas DNS dentro de una conexión HTTPS normal, generalmente por el puerto 443. DoT (DNS-over-TLS) cifra el DNS dentro de una conexión TLS dedicada, normalmente por el puerto 853. DoQ (DNS-over-QUIC) utiliza QUIC, un protocolo de transporte moderno basado en UDP, un modo de transporte de red ligero. TLS es el mecanismo de cifrado utilizado, entre otros, por HTTPS. En los tres casos, el objetivo es evitar que un intermediario pueda leer fácilmente las consultas DNS entre tu dispositivo y el servidor.
| Solución | Popularidad en GitHub* | Interfaz Web integrada | DNS cifrado del lado servidor | Perfil ideal |
|---|---|---|---|---|
| AdGuard Home | ~36 000 estrellas | Sí | DoH, DoT y DoQ nativos | Recomendado: sencillo y todo en uno para VPS |
| Technitium DNS Server | ~9 500 estrellas | Sí | DoH, DoT y DoQ nativos | Usuarios avanzados, administración DNS completa |
| Blocky | ~6 900 estrellas | No, existen interfaces de terceros | DoH/DoT, DoQ para resolvers upstream | DevOps, YAML, bajo consumo |
| Pi-hole | ~60 000 estrellas | Sí | DoH/DoT con un componente adicional | Red local o expertos, menos adecuado para VPS |
* Estrellas de GitHub comprobadas en agosto de 2026. Son un buen indicador de la tracción de un proyecto open source, pero no representan su número de instalaciones.
Nuestra recomendación para la mayoría de usuarios: AdGuard Home. Reúne filtrado, una interfaz clara y protocolos DNS cifrados en un solo programa. Si solo quieres bloquear anuncios en tus PC y teléfonos desde un VPS, es la opción más directa.
Pi-hole aparece deliberadamente en último lugar para este uso. Sigue siendo excelente en una red local, pero en un VPS necesita componentes adicionales para disponer de DNS cifrado de forma limpia. Por eso no lo recomendamos a principiantes en VPS.
Antes de elegir, conviene entender una diferencia importante entre ejecutar un DNS filtrante en casa y hacerlo en Internet.
En un VPS, nunca crees un resolvedor DNS abierto
En una red doméstica, el servidor DNS suele ser invisible desde Internet. En un VPS, su dirección IPv4 es pública: es la dirección de Internet que permite acceder directamente al servidor. Abrir simplemente el puerto DNS 53 para todo el mundo puede convertir tu servidor en un open resolver, es decir, un resolvedor que cualquiera puede utilizar.
No es solo un problema de privacidad. Los resolvers abiertos pueden utilizarse en ataques de amplificación DNS, donde pequeñas consultas provocan respuestas mucho mayores dirigidas hacia una víctima, y generar tráfico que nunca has solicitado.
Para un DNS personal alojado en un VPS, existen tres modelos posibles:
- DNS clásico en la IP pública, con el puerto 53 limitado por el firewall únicamente a las direcciones IP autorizadas.
- Acceso mediante una red privada, por ejemplo WireGuard, con el puerto 53 accesible únicamente desde esa red.
- DNS cifrado mediante DoH o DoT, con TLS, restricciones de clientes y límites adecuados.
El cifrado no sustituye al control de acceso. Un servicio DoH o DoT público y sin restricciones todavía puede ser utilizado de forma abusiva por terceros.
La interfaz de administración merece la misma atención. No dejes un panel expuesto en un puerto Web sin protección. Limítalo a la VPN o a direcciones IP de confianza, o colócalo detrás de un reverse proxy, es decir, un servidor Web situado delante de la interfaz para gestionar HTTPS, la autenticación y las reglas de acceso.
AdGuard Home: nuestra recomendación sencilla para un VPS
AdGuard Home parte del mismo principio de filtrado DNS a nivel de red, pero su enfoque resulta especialmente cómodo en un VPS. Un único servicio proporciona filtrado, interfaz Web, reglas por cliente y los principales protocolos DNS cifrados modernos.
Puede servir directamente DNS-over-HTTPS (DoH), DNS-over-TLS (DoT) y DNS-over-QUIC (DoQ). Existe una imagen Docker oficial y los datos de configuración pueden conservarse en volúmenes persistentes.
La interfaz reúne en un mismo lugar las consultas DNS, los bloqueos, los principales clientes y los controles de filtrado. Es uno de los motivos por los que AdGuard Home resulta especialmente accesible en un VPS.
Ventajas de AdGuard Home
- DoH, DoT y DoQ integrados sin añadir otro servicio.
- Interfaz Web moderna y accesible.
- Listas, reglas y reescrituras DNS personalizables.
- Políticas diferentes según el cliente.
- Instalación nativa en Linux o imagen Docker oficial.
- Sin recopilación de estadísticas de uso por defecto.
- Proyecto totalmente open source.
Inconvenientes de AdGuard Home
- más pesado que un proxy DNS mínimo como Blocky, sobre todo por la interfaz y los registros.
- menos adecuado que un servidor DNS completo como Technitium si quieres gestionar zonas, recursión avanzada o clustering.
- DoH, DoT y DoQ exigen un nombre de dominio y un certificado TLS: no es un simple interruptor.
- el asistente Docker se hace en dos pasos, primero el puerto
3000y después el puerto80, así que el primer arranque pide un poco de atención.
Nuestra recomendación: si quieres instalar un único programa, tener una interfaz sencilla y utilizar fácilmente tu DNS desde Windows, Android, iPhone o iPad, elige AdGuard Home.
Tutorial de instalación de AdGuard Home con Docker
Instalar AdGuard Home en tu VPS Linux
Esta instalación utiliza la imagen Docker oficial de AdGuard Home. Si Docker todavía no está instalado en tu VPS, empieza por nuestra guía Instalar Docker en Linux.
Vamos a comenzar con una configuración deliberadamente privada: el DNS, el asistente de instalación y el panel de administración solo serán accesibles desde el propio VPS. Así podrás terminar la configuración sin exponer un resolvedor DNS a Internet.
Crea los directorios persistentes de AdGuard Home:
mkdir -p /opt/adguardhome/work /opt/adguardhome/conf
cd /opt/adguardhome
Crea después el archivo compose.yaml:
cat > compose.yaml <<'EOF'
services:
adguardhome:
container_name: adguardhome
image: adguard/adguardhome:latest
ports:
- "127.0.0.1:53:53/tcp"
- "127.0.0.1:53:53/udp"
- "127.0.0.1:3000:3000/tcp"
- "127.0.0.1:8081:80/tcp"
volumes:
- "./work:/opt/adguardhome/work"
- "./conf:/opt/adguardhome/conf"
restart: unless-stopped
EOF
Inicia el contenedor:
docker compose up -d
docker compose ps
En el primer inicio, AdGuard Home abre su asistente en el puerto 3000. Como ese puerto está vinculado a 127.0.0.1, abre un túnel SSH desde tu ordenador:
ssh -L 3000:127.0.0.1:3000 root@IP_DEL_VPS
Mantén abierta esta conexión SSH y después abre http://127.0.0.1:3000/ en tu navegador.
Completar el asistente de instalación
El asistente te pide primero las interfaces y los puertos que quieres utilizar. Con el archivo Compose anterior puedes mantener:
- Interfaz Web de administración: todas las interfaces, puerto
80. - Servidor DNS: todas las interfaces, puerto
53.
Estas opciones se aplican dentro del contenedor. En el VPS, Docker sigue publicando el DNS únicamente en 127.0.0.1:53 y la interfaz Web únicamente en 127.0.0.1:8081.
Puedes mantener los DNS upstream propuestos para empezar. Si prefieres reutilizar los resolvers que ya utiliza el VPS, introduce después sus direcciones IP reales en Configuración > Configuración DNS > Servidores DNS upstream. No utilices 127.0.0.53 desde el contenedor.
Crea tu nombre de usuario de administración y una contraseña segura, y termina el asistente.
Después de la instalación, el panel principal escucha en el puerto 80 del contenedor. Abre un nuevo túnel:
ssh -L 8081:127.0.0.1:8081 root@IP_DEL_VPS
Ahora puedes abrir http://127.0.0.1:8081/ e iniciar sesión con la cuenta creada durante el asistente.
Comprobar que el filtrado funciona
Si dig todavía no está disponible en tu VPS, instálalo y consulta directamente AdGuard Home:
apt update
apt install -y dnsutils
dig @127.0.0.1 pi-hole.net +short
dig @127.0.0.1 doubleclick.net +short
La primera consulta debe devolver una dirección IP normal. Con los filtros predeterminados actualmente activados, doubleclick.net está bloqueado y devuelve 0.0.0.0.
Puedes confirmar el resultado en Registro de consultas. El panel también muestra el número total de consultas, los dominios bloqueados y los clientes más activos.
Permitir que tus dispositivos utilicen AdGuard Home
El archivo Compose mantiene deliberadamente el DNS en 127.0.0.1 durante la instalación. Cuando AdGuard Home funcione correctamente, elige el método de acceso que mejor encaje con tus dispositivos:
- DNS clásico: publica el puerto 53 en la IPv4 del VPS únicamente después de limitar el firewall a las direcciones IP autorizadas.
- DoH, DoT o DoQ: configura el cifrado con un nombre de dominio y un certificado TLS. Suele ser la opción más práctica para teléfonos y dispositivos que cambian a menudo de red.
- Red privada: mantén el puerto 53 en una dirección privada si utilizas WireGuard u otra VPN.
El puerto 3000 deja de ser necesario después del asistente, por lo que puedes eliminar esa línea del archivo Compose.
¿Y si prefieres DoH, DoT o DoQ?
AdGuard Home también puede ofrecer DNS cifrado de forma nativa. En la práctica, DoH utiliza HTTPS, DoT utiliza una conexión TLS dedicada y DoQ utiliza QUIC. Es útil si quieres utilizar tu DNS fuera de la VPN, pero requiere un nombre de dominio que apunte al VPS y un certificado TLS válido.
En Configuración > Configuración de cifrado, activa el cifrado e indica el nombre de dominio, el certificado y su clave privada. No abras los puertos correspondientes hasta que esta configuración esté terminada.
AdGuard Home utiliza habitualmente el puerto 443 para DoH y el puerto 853 para DoT/DoQ. Si eliges este modo, publica únicamente los protocolos que realmente necesites y mantén una política de acceso adecuada. Un servicio DNS cifrado accesible públicamente sigue siendo un servicio de Internet que debe administrarse como tal.
Si no quieres exponer ningún servicio DNS públicamente, VPN privada + puerto 53 privado sigue siendo una excelente opción. Si prefieres no instalar una VPN en tus dispositivos, DoH o DoT permite utilizar AdGuard Home directamente con DNS cifrado.
Si el puerto 53 ya está ocupado
En una instalación Ubuntu estándar, esta vinculación a 127.0.0.1 puede convivir con systemd-resolved. Si Docker indica que el puerto ya está ocupado, identifica primero qué servicio está escuchando antes de modificar el sistema:
ss -lntup | grep ':53'
No desactives un resolvedor del sistema sin saber por qué. Comprueba primero la dirección exacta en la que escucha y adapta la configuración solo si es necesario.
Actualizar AdGuard Home
Los datos persistentes se guardan en /opt/adguardhome/work y /opt/adguardhome/conf. Para descargar una versión más reciente de la imagen oficial:
cd /opt/adguardhome
docker compose pull
docker compose up -d
El archivo compose.yaml y los dos directorios persistentes bastan para conservar la instalación cuando se recrea el contenedor. Haz una copia de /opt/adguardhome antes de cambios importantes.
Technitium DNS Server: potente, pero más avanzado
Technitium DNS Server juega en una categoría ligeramente distinta. Mientras AdGuard Home y Pi-hole ponen el filtrado en primer plano, Technitium es ante todo un servidor DNS completo. Puede ser recursivo, es decir, buscar la respuesta en otros servidores DNS en nombre del cliente, o autoritativo, es decir, responder por las zonas DNS de las que es la fuente oficial.
Después añade bloqueo de dominios, listas contra anuncios y malware, caché avanzada, registros, API, clustering para coordinar varias instancias y una consola Web muy completa. También puede alojar directamente servicios DoH, DoT y DoQ.
Su consola refleja bien su enfoque más avanzado: estadísticas detalladas, zonas DNS, caché, reglas, aplicaciones y administración están disponibles desde una misma interfaz.
Ventajas de Technitium DNS Server
- Servidor DNS recursivo y autoritativo completo.
- DoH, DoT y DoQ integrados.
- Listas de bloqueo y reglas DNS avanzadas.
- Interfaz Web muy completa.
- API HTTP y funciones de administración avanzadas.
- Control de acceso a la recursión mediante ACL, listas que definen qué direcciones IP o redes están autorizadas.
- Instalación oficial en Linux e imagen Docker.
- Clustering para arquitecturas que necesitan varias instancias.
Inconvenientes de Technitium DNS Server
Su potencia también es su principal inconveniente si solo quieres bloquear anuncios. Hay más conceptos DNS que entender y más parámetros que gestionar que con Pi-hole o AdGuard Home.
En un VPS público, debes prestar especial atención a la política de recursión, es decir, quién puede pedir a Technitium que resuelva nombres DNS en su nombre. Las ACL (Access Control Lists o listas de control de acceso) limitan ese permiso a determinadas IP o redes. Una configuración demasiado permisiva puede exponer un resolvedor recursivo a Internet cuando solo querías atender a unos pocos dispositivos personales.
Elígelo si: quieres aprender o administrar DNS con mayor profundidad, gestionar zonas, realizar tú mismo la recursión o disponer de una plataforma mucho más completa que un simple filtro.
Tutorial de instalación de Technitium DNS Server con Docker
Instalar Technitium DNS Server en tu VPS Linux
Esta instalación utiliza la imagen Docker oficial de Technitium DNS Server. Si Docker todavía no está instalado en tu VPS, empieza por nuestra guía Instalar Docker en Linux.
Al principio vamos a limitar tanto el DNS como la consola Web a 127.0.0.1. Así podrás terminar la configuración y comprobar el filtrado sin publicar un resolvedor DNS en Internet.
Crea las carpetas de Technitium y una contraseña de administrador aleatoria:
mkdir -p /opt/technitium-dns/config /opt/technitium-dns/logs
cd /opt/technitium-dns
printf 'TECHNITIUM_PASSWORD=%s\n' "$(openssl rand -hex 18)" > .env
chmod 600 .env
A continuación, crea el archivo compose.yaml:
cat > compose.yaml <<'EOF'
services:
dns-server:
container_name: technitium-dns
hostname: dns-server
image: technitium/dns-server:latest
ports:
- "127.0.0.1:5380:5380/tcp"
- "127.0.0.1:53:53/udp"
- "127.0.0.1:53:53/tcp"
environment:
DNS_SERVER_DOMAIN: "dns.example"
DNS_SERVER_ADMIN_PASSWORD: "${TECHNITIUM_PASSWORD}"
DNS_SERVER_LOG_FOLDER_PATH: "/var/log/technitium/dns"
volumes:
- "./config:/etc/dns"
- "./logs:/var/log/technitium/dns"
restart: unless-stopped
sysctls:
net.ipv4.ip_local_port_range: "1024 65535"
EOF
dns.example se utiliza aquí únicamente como identificador del servidor. Si más adelante configuras DoH, DoT o DoQ con un nombre DNS real, sustitúyelo por el dominio que utilices realmente.
Inicia el contenedor:
docker compose up -d
docker compose ps
La consola Web de Technitium escucha en el puerto 5380. En este punto, el puerto DNS 53 sigue siendo accesible únicamente desde el VPS.
Conectarse a la consola Web
Desde tu ordenador, abre un túnel SSH:
ssh -L 5380:127.0.0.1:5380 root@IP_DEL_VPS
Mantén abierta esa conexión SSH y abre http://127.0.0.1:5380/ en el navegador. El nombre de usuario inicial es admin.
Para mostrar la contraseña generada durante el primer arranque:
cd /opt/technitium-dns
grep '^TECHNITIUM_PASSWORD=' .env | cut -d= -f2-
Inicia sesión con esa contraseña. DNS_SERVER_ADMIN_PASSWORD solo se utiliza para inicializar la cuenta cuando todavía no existe ninguna configuración de Technitium. Si después cambias la contraseña desde la consola Web, el archivo .env dejará de ser su fuente de verdad.
Activar una lista contra anuncios
En la consola de Technitium, abre Settings > Blocking. El bloqueo está activado por defecto, pero una instalación nueva todavía no tiene cargada una gran lista externa.
En Quick Add, elige Default y después pulsa Save Settings. Technitium añadirá su lista de bloqueo predeterminada y la descargará automáticamente. Puedes añadir más listas si realmente las necesitas, pero acumular millones de dominios sin motivo solo aumenta el consumo de memoria.
El tipo de bloqueo recomendado por defecto es NX Domain. Esto significa que un dominio bloqueado no tiene por qué devolver 0.0.0.0: el servidor responde que el dominio no existe.
Comprobar el filtrado DNS
Si dig todavía no está disponible, instala primero dnsutils:
apt update
apt install -y dnsutils
Después consulta un dominio normal y un dominio publicitario:
dig @127.0.0.1 pi-hole.net +short
dig @127.0.0.1 doubleclick.net +noall +answer +comments
El primer comando debe devolver una dirección IP normal. Para un dominio bloqueado, busca status: NXDOMAIN y la indicación EDE: 15 (Blocked) en la segunda respuesta. EDE significa Extended DNS Error: en este caso, el código indica que una regla DNS ha bloqueado la respuesta. Si las listas cambian y este ejemplo deja de estar bloqueado, prueba otro dominio publicitario presente en tu lista.
El panel permite después seguir las consultas, las respuestas recursivas, la caché, los dominios bloqueados y los clientes.
Permitir que tus dispositivos utilicen Technitium
El archivo Compose mantiene deliberadamente el DNS en 127.0.0.1 durante la instalación. Después de validarlo, elige uno de los tres métodos descritos más adelante en esta guía: DNS clásico limitado por firewall, DoH/DoT/DoQ o una red privada.
Si haces accesible Technitium mediante DNS clásico, comprueba también las ACL de recursión en Settings > Recursion para que solo puedan utilizarlo las direcciones o redes autorizadas. Para teléfonos y dispositivos móviles, DoH o DoT suele ser más práctico que una regla de firewall basada en una dirección IP que puede cambiar.
¿Y para DoH, DoT o DoQ?
Technitium puede ofrecer de forma nativa los tres protocolos. DoH transporta el DNS dentro de HTTPS, DoT utiliza una conexión TLS dedicada y DoQ utiliza QUIC. Se activan desde Settings > Optional Protocols con un nombre de dominio real y un certificado TLS válido.
En Docker, los puertos habituales son 443/tcp y 443/udp para DoH, y 853/tcp y 853/udp para DoT y DoQ. No publiques estos puertos hasta que TLS y las reglas de acceso estén configurados.
Si no quieres exponer nada públicamente, VPN privada + puerto 53 privado sigue siendo muy fácil de proteger. Si no, el soporte nativo DoH o DoT de Technitium permite utilizar el servidor sin VPN.
Si el puerto 53 ya está ocupado
Esta configuración ligada a 127.0.0.1 puede convivir con systemd-resolved cuando este solo escucha en sus direcciones DNS locales reservadas. Si Docker sigue indicando un conflicto, identifica primero la dirección exacta que ya está ocupada:
ss -lntup | grep ':53'
No desactives el resolvedor del sistema hasta haber identificado el conflicto real.
Actualizar Technitium
La configuración se conserva en /opt/technitium-dns/config y los registros en /opt/technitium-dns/logs. Para actualizar la imagen oficial:
cd /opt/technitium-dns
docker compose pull
docker compose up -d
Guarda una copia de /opt/technitium-dns antes de cambios importantes. La consola Web también ofrece Backup Settings para exportar la configuración DNS.
Blocky: ligero para perfiles DevOps
Blocky adopta casi el enfoque opuesto. Es un proxy DNS y bloqueador escrito en Go, distribuido como un único binario o contenedor Docker y configurado principalmente mediante YAML, un formato de texto estructurado muy utilizado para archivos de configuración legibles.
Gestiona listas de bloqueo y permitidos, grupos de clientes, expresiones regulares, es decir, patrones de texto que permiten abarcar varios dominios con una sola regla, caché y prefetch, que actualiza por adelantado algunas respuestas antes de que caduquen. También admite DNSSEC, un sistema de firmas criptográficas que permite comprobar la autenticidad y la integridad de los datos DNS, además de DoH y DoT. Puede utilizar resolvers upstream, es decir, los servidores DNS a los que Blocky reenvía las consultas. Pueden ser los resolvers que ya utiliza tu VPS u otros resolvers que elijas, incluso mediante DoQ. Para la supervisión, Prometheus recopila las métricas de Blocky y Grafana puede convertirlas en gráficos y paneles.
Ventajas de Blocky
- Consumo muy reducido y despliegue sencillo.
- Binario único o imagen Docker multi-arquitectura.
- Configuración declarativa fácil de versionar.
- No necesita una base de datos obligatoria.
- Listas de filtrado por grupos de clientes y reglas mediante expresiones regulares.
- Caché y prefetch configurables.
- Métricas Prometheus, API REST e integración con Grafana.
- Sin telemetría ni filtrado oculto.
Inconvenientes de Blocky
Blocky no incluye una gran interfaz Web de administración comparable a Pi-hole, AdGuard Home o Technitium. Existen interfaces comunitarias y Grafana permite crear excelentes paneles, pero tendrás que añadir componentes si quieres gestionarlo todo de forma gráfica.
También exige sentirse más cómodo con YAML y la configuración de servidores. Puede utilizar DoQ con resolvers upstream, pero actualmente no ofrece un servidor DoQ entrante tan integrado como AdGuard Home o Technitium.
Elígelo si: te gustan los servicios sencillos, los archivos de configuración versionables, Docker, Prometheus y la automatización, y una interfaz gráfica completa no es tu prioridad.
Tutorial de instalación de Blocky con Docker
Instalar Blocky en tu VPS Linux
Blocky se configura principalmente mediante un archivo YAML. Esta instalación utiliza la imagen Docker oficial publicada por el proyecto. Si todavía no tienes Docker instalado, empieza por nuestra guía Instalar Docker en Linux.
Primero publicaremos el DNS y la API únicamente en 127.0.0.1. Una vez validada la instalación, podrás elegir entre DNS clásico restringido, DoH/DoT o una red privada.
Crea el directorio de Blocky:
mkdir -p /opt/blocky
cd /opt/blocky
A continuación crea config.yml:
cat > config.yml <<'EOF'
upstreams:
groups:
default:
- 1.1.1.1
- 9.9.9.9
blocking:
denylists:
ads:
- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
clientGroupsBlock:
default:
- ads
ports:
dns: 53
http: 4000
prometheus:
enable: true
EOF
Las dos direcciones de upstreams son ejemplos de resolvers públicos. Puedes sustituirlas por los resolvers que prefieras, incluidas las direcciones reales de los DNS que ya utiliza tu VPS. La sección denylists, donde se declaran las listas de bloqueo, utiliza la lista StevenBlack, que también aparece en la documentación oficial de Blocky.
Ahora crea compose.yaml:
cat > compose.yaml <<'EOF'
services:
blocky:
container_name: blocky
image: ghcr.io/0xerr0r/blocky:latest
ports:
- "127.0.0.1:53:53/tcp"
- "127.0.0.1:53:53/udp"
- "127.0.0.1:4000:4000/tcp"
environment:
TZ: "Europe/Madrid"
volumes:
- "./config.yml:/app/config.yml:ro"
restart: unless-stopped
EOF
Inicia Blocky:
docker compose up -d
docker compose ps
El contenedor debería pasar a estado healthy después de cargar las listas y comprobar los resolvers upstream.
Validar la configuración y el filtrado
Blocky incluye un comando para validar la configuración. Úsalo para detectar errores YAML antes de investigar otros problemas:
docker exec blocky /app/blocky validate --config /app/config.yml
La salida debe confirmar que la configuración es válida.
Si todavía no tienes dig, instala dnsutils y prueba un dominio normal y otro publicitario:
apt update
apt install -y dnsutils
dig @127.0.0.1 pi-hole.net +short
dig @127.0.0.1 doubleclick.net +short
El primer comando debe devolver una dirección IP normal. Con la lista utilizada aquí, doubleclick.net está bloqueado actualmente y devuelve 0.0.0.0.
También puedes comprobar el estado del bloqueo mediante la API local:
curl http://127.0.0.1:4000/api/blocking/status
Una instalación activa devuelve {"enabled":true}.
¿Para qué sirve el puerto 4000?
Blocky no incluye un gran panel de administración como Pi-hole, AdGuard Home o Technitium. El puerto 4000 sirve principalmente para su API REST y las métricas Prometheus.
Por eso, en esta configuración permanece limitado a 127.0.0.1. Por ejemplo, puedes comprobar que Prometheus recibe datos con:
curl http://127.0.0.1:4000/metrics | head
No necesitas abrir este puerto a Internet para utilizar Blocky como servidor DNS.
Permitir que tus dispositivos utilicen Blocky
El archivo Compose mantiene deliberadamente el DNS en 127.0.0.1 durante la instalación. Cuando Blocky funcione correctamente, puedes publicar el puerto 53 únicamente para IP autorizadas, configurar su servidor DoH/DoT o mantener el DNS en una red privada.
Blocky está orientado sobre todo a usuarios cómodos con archivos de configuración. Si tu prioridad es una instalación sencilla en varios teléfonos y PC, AdGuard Home sigue siendo más apropiado gracias a su interfaz y sus protocolos cifrados integrados.
¿Y si prefieres DoH o DoT?
Blocky también puede servir DNS-over-HTTPS (DoH), donde las consultas DNS viajan dentro de HTTPS, y DNS-over-TLS (DoT), donde utilizan una conexión TLS dedicada. Sin embargo, en un VPS público hay que ser más prudente que con un puerto DNS privado porque los servicios HTTP/HTTPS de Blocky también exponen su API REST, una interfaz destinada a herramientas y scripts, además de las métricas y las funciones de diagnóstico.
Si quieres ofrecer DoH públicamente, mantén Blocky detrás de un reverse proxy de confianza y expón únicamente la ruta DNS necesaria, normalmente /dns-query. Si prefieres no exponer nada públicamente, mantén simplemente el DNS en la IP WireGuard privada.
Modificar la configuración y actualizar Blocky
Después de editar config.yml, valida el archivo y reinicia el contenedor:
cd /opt/blocky
docker exec blocky /app/blocky validate --config /app/config.yml
docker compose restart
Para actualizar la imagen oficial:
cd /opt/blocky
docker compose pull
docker compose up -d
La configuración permanece en /opt/blocky/config.yml. Blocky también actualiza periódicamente las listas remotas, por lo que no necesitas volver a descargar manualmente la lista de bloqueo con cada actualización.
Pi-hole: popular, pero no es nuestra recomendación para VPS
Pi-hole es, con mucha diferencia, el proyecto más popular de nuestra selección en GitHub y sigue siendo excelente en una red local. Sin embargo, para un DNS alojado en un VPS y utilizado desde varios dispositivos, no es nuestra recomendación por defecto. Su funcionamiento sigue siendo sencillo: recibe las consultas DNS de tus dispositivos, compara los dominios con tus listas de filtrado y bloquea los que no quieres permitir.
Su interfaz Web permite consultar rápidamente las peticiones, los dominios bloqueados, los clientes más activos, las listas, las reglas personalizadas y las estadísticas. Puede instalarse directamente en Linux o desplegarse con la imagen Docker oficial.
El panel muestra de inmediato el volumen de consultas, la tasa de bloqueo y la actividad de los clientes, por lo que resulta fácil entender qué está filtrando realmente el DNS.
Ventajas de Pi-hole
- Comunidad y documentación especialmente amplias.
- Interfaz Web fácil de entender.
- Gestión de listas de bloqueo, dominios permitidos y reglas por grupos.
- Estadísticas y registro de consultas muy claros.
- Instalación oficial en Linux e imagen Docker.
- Proyecto maduro, totalmente open source y sin suscripción obligatoria.
Inconvenientes de Pi-hole
Pi-hole fue pensado históricamente para funcionar dentro de una red de confianza. Filtra perfectamente el DNS clásico, pero no sirve de forma nativa DNS-over-HTTPS ni DNS-over-TLS. Para cifrar el tráfico entre tus dispositivos y el VPS, necesitas añadir un proxy DoH/DoT o utilizar una VPN.
Eso no supone un problema en una red local. En un VPS público, en cambio, obliga a añadir y mantener otro componente mientras AdGuard Home o Technitium ya integran estos protocolos. Una solución muy sencilla en casa se vuelve por tanto más compleja en Internet.
En un VPS, solo recomendamos Pi-hole a usuarios avanzados. Elígelo en este contexto únicamente si te sientes cómodo administrando DNS, una VPN o un proxy DoH/DoT, o si tienes una razón concreta para querer el ecosistema Pi-hole.
Tutorial de instalación de Pi-hole con Docker
Instalar Pi-hole en tu VPS Linux
Esta instalación utiliza la imagen Docker oficial de Pi-hole. Si todavía no tienes Docker instalado en tu VPS, empieza por nuestra guía Instalar Docker en Linux.
Primero haremos que Pi-hole escuche únicamente en 127.0.0.1. Así podrás comprobar que todo funciona sin exponer un servicio DNS recursivo a Internet. Después podrás elegir entre DNS clásico restringido, añadir un componente DoH/DoT o utilizar una red privada.
Crea el directorio de Pi-hole y una contraseña de administración aleatoria:
mkdir -p /opt/pihole/etc-pihole
cd /opt/pihole
printf 'PIHOLE_PASSWORD=%s\n' "$(openssl rand -hex 18)" > .env
chmod 600 .env
Ahora crea el archivo compose.yaml:
cat > compose.yaml <<'EOF'
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "127.0.0.1:53:53/tcp"
- "127.0.0.1:53:53/udp"
- "127.0.0.1:8080:80/tcp"
environment:
TZ: "Europe/Madrid"
FTLCONF_webserver_api_password: "${PIHOLE_PASSWORD}"
FTLCONF_dns_listeningMode: "ALL"
volumes:
- "./etc-pihole:/etc/pihole"
restart: unless-stopped
EOF
Pi-hole necesita FTLCONF_dns_listeningMode: "ALL" cuando funciona sobre la red bridge predeterminada de Docker, es decir, la red virtual privada que Docker crea para los contenedores. Esto no hace que tu DNS sea público: con esta configuración Docker sigue publicando los puertos DNS únicamente en 127.0.0.1 del VPS.
Inicia Pi-hole:
docker compose up -d
docker compose ps
En el primer arranque, Docker descarga la imagen y Pi-hole inicializa sus listas. Después de unos instantes, docker compose ps debería mostrar el contenedor como healthy.
También puedes comprobar directamente el estado del DNS:
docker exec pihole pihole status
Las líneas importantes deben indicar que FTL, el motor DNS de Pi-hole, escucha en el puerto 53 y que el bloqueo está activado.
Abrir la interfaz Web sin exponer el puerto de administración
La interfaz Web está vinculada intencionadamente a 127.0.0.1:8080. Desde tu ordenador, abre un túnel SSH hacia el VPS:
ssh -L 8080:127.0.0.1:8080 root@IP_DE_TU_VPS
Mantén abierta esa conexión SSH y visita http://127.0.0.1:8080/admin/ en tu navegador.
Para mostrar la contraseña generada durante la instalación:
cd /opt/pihole
grep '^PIHOLE_PASSWORD=' .env | cut -d= -f2-
Utiliza esa contraseña en la página de inicio de sesión de Pi-hole. El panel permite después seguir las consultas, los dominios bloqueados, los clientes y las listas de filtrado.
Comprobar que el bloqueo funciona
Si dig todavía no está disponible en tu VPS, instálalo y realiza dos consultas directamente contra Pi-hole:
apt update
apt install -y dnsutils
dig @127.0.0.1 pi-hole.net +short
dig @127.0.0.1 doubleclick.net +short
La primera orden debe devolver una dirección IP normal. Con las listas de bloqueo predeterminadas actuales, doubleclick.net está bloqueado y devuelve 0.0.0.0. Si una lista cambia más adelante, siempre puedes confirmar el resultado desde Query Log en la interfaz de Pi-hole.
Permitir que tus dispositivos utilicen Pi-hole
El archivo Compose mantiene deliberadamente el DNS en 127.0.0.1 durante la instalación. Después de validarlo, existen tres posibilidades:
- DNS clásico: publica el puerto 53 en la IPv4 del VPS únicamente para las direcciones permitidas por tu firewall.
- DNS cifrado: añade un componente DoH/DoT delante de Pi-hole, ya que no ofrece estos protocolos de forma nativa.
- Red privada: mantén el DNS en una dirección privada accesible mediante WireGuard u otra VPN.
Esta capa adicional necesaria para el DNS cifrado es precisamente lo que hace que Pi-hole resulte menos atractivo que nuestra recomendación AdGuard Home en un VPS.
Actualizar Pi-hole
Con Docker, la actualización es sencilla:
cd /opt/pihole
docker compose pull
docker compose up -d
El directorio /opt/pihole/etc-pihole conserva la configuración y los datos entre recreaciones del contenedor. El archivo /opt/pihole/.env contiene la contraseña de administración, así que mantenlo protegido y no lo compartas.
Configurar tu DNS filtrante en Windows, Android, iPhone y iPad
Hay tres métodos: DNS clásico con la dirección IP del VPS, DNS cifrado DoH/DoT con un nombre de dominio cuando el software lo permite, o una red privada, por ejemplo WireGuard, si prefieres mantener el DNS completamente privado.
Configurar el DNS en Windows, Android, iPhone y iPad
¿Qué dirección debes introducir?
Si utilizas DNS clásico, introduce la dirección IPv4 pública de tu VPS, por ejemplo 203.0.113.10. El puerto 53 debe ser accesible mediante UDP y TCP, los dos transportes utilizados por el DNS clásico.
Eso no significa que debas dejar el puerto 53 abierto a todo Internet. Limítalo en el firewall a las direcciones o redes autorizadas. En una conexión fija, por ejemplo, puedes permitir únicamente tu dirección IP pública actual.
Los archivos Compose de esta guía empiezan deliberadamente en 127.0.0.1. Si eliges DNS clásico, sustituye únicamente las dos publicaciones DNS por la IPv4 pública real de tu VPS, por ejemplo:
ports:
- "203.0.113.10:53:53/tcp"
- "203.0.113.10:53:53/udp"
Aplica después el cambio con docker compose up -d, pero solo cuando las restricciones del firewall ya estén configuradas.
Si tu dirección pública cambia a menudo, esta restricción resulta menos práctica. Las direcciones de origen en 4G/5G también cambian con frecuencia, por lo que DoH/DoT o WireGuard son más adecuados en ese caso.
Si utilizas DoH o DoT, normalmente introducirás un nombre como dns.example.com en lugar de la IP directa. Ese nombre debe apuntar al VPS y el servicio debe disponer de un certificado TLS válido.
Por último, si tu DNS permanece deliberadamente privado en una dirección como 10.66.66.1, tus dispositivos deberán unirse a esa red privada, por ejemplo mediante WireGuard.
Windows 10 y Windows 11: basta con cambiar el DNS
En Windows no necesitas instalar ningún programa adicional para utilizar DNS clásico.
Abre Configuración > Red e Internet, selecciona tu conexión Wi-Fi o Ethernet y abre sus propiedades. Según la versión de Windows, busca Asignación del servidor DNS o Editar configuración IP, selecciona Manual y activa IPv4.
En DNS preferido, introduce la dirección de tu VPS:
203.0.113.10
Deja vacío el DNS secundario o utiliza un segundo DNS filtrante que controles. Si introduces un resolvedor público normal como servidor secundario, algunas consultas podrían evitar tu filtrado.
En Windows 11 también puedes activar DNS sobre HTTPS si tu servidor ofrece DoH. Windows 10 no muestra este ajuste DoH directamente en la misma interfaz.
Después comprueba qué servidor DNS se está utilizando realmente:
nslookup pi-hole.net
nslookup doubleclick.net
La línea Server debe corresponder a tu DNS. Según el software elegido, un dominio bloqueado puede devolver 0.0.0.0 o NXDOMAIN.
Android: utiliza DNS privado nativo cuando DoT esté disponible
Android incluye un ajuste de DNS privado que funciona tanto con Wi-Fi como con datos móviles. Utiliza DoT, por lo que tu servidor debe ofrecer DNS-over-TLS.
Abre Ajustes > Red e Internet > DNS privado. La ruta puede variar ligeramente según el fabricante. Selecciona Nombre de host del proveedor de DNS privado e introduce únicamente el nombre de tu servidor, por ejemplo:
dns.example.com
No introduzcas https:// ni solamente la dirección IP: Android espera aquí el nombre de host del servidor DoT.
AdGuard Home y Technitium pueden ofrecer DoT directamente. Blocky también puede servir DoT cuando está configurado para ello. Pi-hole necesita un componente adicional u otro método.
Si prefieres utilizar DoH o gestionar el DNS mediante una aplicación, Rethink DNS es una alternativa open source. Su modo DNS puede enviar las consultas a un resolver DoH o DoT elegido por el usuario. Añade la URL DoH o el nombre de host DoT de tu propio servidor.
Con AdGuard Home, el ajuste nativo DNS privado de Android sigue siendo la opción más sencilla cuando DoT está activado en el VPS.
iPhone y iPad: cambio nativo de DNS en Wi-Fi
En una red Wi-Fi, iOS y iPadOS permiten cambiar el DNS sin instalar ninguna aplicación.
Abre Ajustes > Wi-Fi, toca el botón de información junto a la red conectada y después Configurar DNS > Manual > Añadir servidor.
Introduce la dirección IPv4 de tu VPS, por ejemplo:
203.0.113.10
Elimina los servidores DNS anteriores de esa configuración si quieres asegurarte de que las consultas utilicen tu DNS filtrante y guarda los cambios.
Este ajuste se aplica a esa red Wi-Fi concreta. Para aplicar DNS cifrado también en 4G/5G y otras redes, DNSecure es una aplicación open source dedicada a DoH y DoT en iOS y iPadOS.
En DNSecure, añade tu propio servidor DoH o DoT, activa Use This Server y selecciona DNSecure en los ajustes DNS de iOS o iPadOS. El DNS cifrado se aplica entonces a nivel del sistema y no solo en Safari.
TV, consolas y otros dispositivos
Si el dispositivo permite introducir manualmente un servidor DNS, utiliza la misma lógica que en Windows e indica la IPv4 de tu VPS para el DNS clásico, con el firewall correctamente limitado.
Si no ofrece un ajuste DNS útil, tu router puede permitir distribuir tu servidor DNS a todos los dispositivos de la red. Busca el ajuste DNS del servidor DHCP, el servicio del router que proporciona automáticamente a los dispositivos su dirección IP y sus parámetros de red. Con DNS clásico, mantén el puerto 53 del VPS limitado a la dirección IP pública de tu conexión doméstica.
¿Y WireGuard?
WireGuard sigue siendo útil si no quieres ningún servicio DNS accesible públicamente. En ese caso, mantén el puerto 53 vinculado únicamente a la dirección privada del VPS, por ejemplo 10.66.66.1, y conecta el dispositivo a la red WireGuard. Para instalar esta VPN, sigue nuestra guía Instalar una VPN en un VPS Linux: WireGuard vs OpenVPN.
La configuración cliente incluirá entonces, entre otros, estos valores:
[Interface]
DNS = 10.66.66.1
[Peer]
AllowedIPs = 10.66.66.0/24
La sección [Interface] contiene aquí los ajustes del dispositivo. La sección [Peer] describe el servidor WireGuard al que se conecta. AllowedIPs indica qué direcciones de red deben pasar por el túnel.
Con esta configuración, solo la red privada pasa por WireGuard. Es un split tunnel: la navegación normal por Internet sigue utilizando tu conexión habitual, mientras que el DNS llega al VPS mediante el túnel privado.
Si en cambio quieres enviar todo el tráfico de Internet por WireGuard, utiliza una configuración de VPN completa con AllowedIPs = 0.0.0.0/0 y configura también el enrutamiento y el NAT (Network Address Translation) en el VPS, el mecanismo que permite que el tráfico del túnel salga por la dirección pública del servidor. No es necesario para aprovechar únicamente el filtrado DNS.
Comprobar que el filtrado funciona
Después de cambiar el DNS, abre algunas páginas y revisa la interfaz o los registros de tu solución: Pi-hole, AdGuard Home y Technitium muestran las consultas DNS, mientras que Blocky las expone en sus registros y métricas.
Si no llega ninguna consulta, comprueba primero que el servicio escucha en la dirección utilizada por el dispositivo y que el firewall permite el protocolo correspondiente: puerto 53 para DNS clásico, 853 para DoT o el puerto HTTPS configurado para DoH.
Un DNS personal también puede evitar algunos bloqueos de tu proveedor de Internet
Otra ventaja de alojar el DNS en tu VPS es que dejas de depender del resolvedor proporcionado por tu proveedor de acceso a Internet. Cuando un sitio está bloqueado únicamente a nivel DNS, por ejemplo porque el DNS del proveedor se niega a resolver su dominio o devuelve una respuesta modificada, enviar las consultas DNS a tu propio VPS puede permitir que ese dominio vuelva a resolverse con normalidad.
Esto funciona en cuanto el dispositivo consulta realmente tu VPS en lugar del resolvedor del proveedor. Con DNS clásico, esas consultas siguen viajando sin cifrar. DoH, DoT o una red privada como WireGuard protegen además ese trayecto frente a la observación o modificación de las consultas DNS.
Sin embargo, un DNS personal no es una VPN y no evita todos los tipos de bloqueo. Si el filtrado se aplica directamente sobre la dirección IP, el enrutamiento o el SNI, es decir, el nombre del sitio visible al inicio de algunas conexiones TLS, o sobre otra capa de red, cambiar de DNS no será suficiente. DoH y DoT cifran las consultas DNS hasta tu VPS, no todo tu tráfico de Internet.
¿Qué DNS filtrante elegir para tu VPS Linux?
Para la gran mayoría de usuarios: AdGuard Home. Es nuestra recomendación por defecto. La instalación sigue siendo sencilla, la interfaz es clara y DoH, DoT y DoQ están integrados. Evitas acumular varios programas solo para obtener un DNS filtrante moderno en tu VPS.
Technitium: elígelo si quieres profundizar en DNS. Es muy potente, pero sus numerosos ajustes y sus funciones de servidor DNS completo son innecesarios si tu único objetivo es bloquear anuncios.
Blocky: elígelo si prefieres YAML y la automatización. Es ligero y limpio, pero la ausencia de una verdadera interfaz de administración lo hace más apropiado para perfiles DevOps.
Pi-hole: nuestra última opción para este escenario VPS. Su popularidad y su comunidad siguen siendo excelentes, pero la ausencia de DoH/DoT nativo en el servidor obliga a añadir otros componentes o una VPN. En un VPS, solo lo recomendamos a usuarios avanzados. Tiene más sentido en una red local o para alguien que quiera específicamente el ecosistema Pi-hole.
El recorrido recomendado en un VPS Linux
Sea cual sea el software elegido, la lógica de despliegue es similar.
- Prepara un VPS Linux con una dirección IPv4 dedicada y acceso
root. - Instala el software de forma nativa o mediante Docker.
- Mantén la interfaz de administración privada o muy restringida.
- Elige el método de acceso: DNS clásico restringido, DoH/DoT o una red privada como WireGuard.
- Configura las listas de bloqueo y las excepciones.
- Conecta progresivamente tus dispositivos al nuevo DNS.
- Comprueba desde Internet que el servidor no acepta consultas DNS recursivas clásicas desde cualquier dirección.
- Guarda una copia de la configuración antes de las actualizaciones importantes.
Si eliges Docker, nuestra guía Instalar Docker en Linux cubre la preparación del VPS antes de desplegar tu servicio DNS.
Un DNS filtrante no sustituye por completo a un bloqueador de contenido
El filtrado DNS actúa a nivel del nombre de dominio. Si tracker.example está bloqueado, el dispositivo no puede resolver ese dominio y la conexión falla antes de comenzar.
Este método es muy eficaz contra numerosos rastreadores, dominios publicitarios, servicios de telemetría y dominios maliciosos. También funciona en dispositivos donde es imposible instalar una extensión de navegador.
Sin embargo, el DNS no puede ver la URL completa de una petición HTTPS. Si un anuncio y el contenido legítimo se sirven desde exactamente el mismo dominio, el DNS no puede bloquear uno sin bloquear el otro. Por eso un DNS filtrante no siempre sustituye a un bloqueador de contenido en el navegador.
El mejor resultado suele consistir en combinar ambos enfoques: filtrado DNS para todos los dispositivos y bloqueo en el navegador cuando necesitas un control mucho más preciso sobre una página Web.
Si quieres empezar con la opción más sencilla en un VPS, AdGuard Home sigue siendo nuestra recomendación por defecto gracias a su interfaz y al soporte nativo de DoH, DoT y DoQ. Los VPS Linux de BoxToPlay incluyen una dirección IPv4 dedicada, acceso root, firewall configurable y compatibilidad con Docker para alojar tu DNS filtrante y otros servicios autoalojados.



Más Artículos
Cómo instalar Portainer en un VPS Linux
27 de agosto de 2026VPS Linux: comandos esenciales para empezar
06 de agosto de 2026Programa de socios de BoxToPlay
22 de julio de 2026Instalar una VPN en un VPS Linux: WireGuard vs OpenVPN
19 de julio de 2026