Cómo configurar AdGuard Home en un VPS
Instalar AdGuard Home en Ubuntu, completar el asistente inicial, proteger la interfaz web, activar DNS-over-HTTPS y DNS-over-TLS, apuntar los dispositivos a tu resolver y evitar operar un servidor DNS abierto que toda internet pueda abusar.

AdGuard Home es un sumidero DNS autoalojado y un resolver de estilo recursivo con interfaz web. Puede bloquear anuncios, rastreadores y dominios de malware en todos los dispositivos que lo usen como DNS: móviles, portátiles, televisores inteligentes y otros proyectos en el VPS. A diferencia de una extensión del navegador, funciona incluso con aplicaciones que ignoran los ficheros hosts. Ejecutarlo en un VPS sirve cuando quieres el mismo filtrado fuera de casa, o cuando no quieres un Raspberry Pi en la red doméstica.
El valor por defecto peligroso que no debes publicar es un resolver abierto: si UDP/TCP 53 es alcanzable desde toda internet sin control de acceso, extraños usarán tu VPS para amplificación DNS y recibirás quejas de abuso. Esta guía instala AdGuard Home en Ubuntu, enlaza el DNS a localhost o a una interfaz WireGuard privada salvo que expongas a propósito el DNS cifrado, pone el panel de control en HTTPS y muestra cómo portátiles y móviles pueden usar DNS-over-HTTPS (DoH) o DNS-over-TLS (DoT) sin abrir el puerto 53 clásico al mundo.
Para qué sirve bien AdGuard Home
Pi-hole es la comparación habitual. AdGuard Home es un único binario con interfaz web integrada, frontales DNS cifrados opcionales y ajustes por cliente. Puedes ejecutarlo en Docker o como servicio systemd. En un VPS Hiddence encaja bien con una VPN privada: los dispositivos entran en WireGuard, envían el DNS al VPS por el túnel y nunca exponen el puerto 53 en público.
- Bloqueo en toda la red sin instalar una aplicación en cada dispositivo
- DoH (443) y DoT (853) para que el DNS no vaya en claro en Wi-Fi públicas
- Registro de consultas y estadísticas para ver qué dispositivo habla con qué dominio
- Upstreams personalizados (Quad9, Cloudflare o tu propio Unbound)
- Huella pequeña: un VPS de 1 GB puede filtrar un hogar más unos cuantos clientes extra
Requisitos
Necesitas un dominio si quieres un certificado de confianza para DoH/DoT y para el panel. Puedes probar primero en HTTP y con la IP del servidor, pero no lo dejes así. Si systemd-resolved ya posee el puerto 53 en Ubuntu, lo liberaremos antes de que AdGuard Home enlace el DNS.
- VPS Ubuntu 22.04 o 24.04 con root/sudo
- 1 GB de RAM basta para uso personal
- Un dominio o subdominio (dns.example.com) con un registro A hacia el VPS
- Acceso SSH; WireGuard opcional si quieres DNS solo dentro de un túnel
Paso 1: Liberar el puerto 53 e instalar AdGuard Home
Ubuntu Server suele ejecutar systemd-resolved como stub en 127.0.0.53:53. AdGuard Home quiere el 53 en las interfaces que elijas. El instalador puede hacerlo, pero hacerlo de forma explícita evita un DNS a medias en el propio VPS (el servidor sigue necesitando resolver paquetes).
ssh root@YOUR_VPS_IP
apt update && apt -y upgrade
apt -y install curl ca-certificates
# See who owns port 53:
ss -tulpn | grep ':53'
# Typical Ubuntu fix: stop stub listener, point the OS at a temporary resolver
mkdir -p /etc/systemd/resolved.conf.d
cat >/etc/systemd/resolved.conf.d/adguardhome.conf <<'EOF'
[Resolve]
DNS=1.1.1.1
DNSStubListener=no
EOF
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl restart systemd-resolved
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -vPaso 2: Asistente de primer arranque
El instalador imprime una URL, normalmente http://YOUR_IP:3000/. Ábrela, crea un usuario administrador con una contraseña larga y elige las direcciones de escucha. Para un VPS público, un primer montaje seguro es: Admin Web en 127.0.0.1:3000 (Caddy delante) o en 80/443 tras TLS; escucha DNS en 127.0.0.1:53 más una interfaz VPN, no en 0.0.0.0:53. Si de verdad necesitas DNS estilo LAN para amigos, prefiere DoH/DoT en 443/853 con autenticación, no un 53/udp abierto.
Elige servidores DNS upstream en los que confíes. Mucha gente usa https://dns.quad9.net/dns-query o Cloudflare. Activa peticiones en paralelo si quieres una conmutación más rápida. Enciende las listas de filtros por defecto y añade más después: cincuenta listas el primer día hacen imposible depurar cuando un sitio se rompe.
Paso 3: Proxy inverso y HTTPS para el panel de control
Cuando termina el asistente, AdGuard Home suele mover la interfaz al puerto 80. Eso choca con Caddy o Nginx si también alojas sitios. Un patrón limpio: web de AdGuard Home en 127.0.0.1:8080, DNS en 127.0.0.1:53, Caddy en 443 para el panel y el DoH.
# In AdGuard Home settings, bind the web UI to 127.0.0.1:8080
# Example Caddyfile:
dns.example.com {
reverse_proxy 127.0.0.1:8080
}
# After Caddy is up:
curl -I https://dns.example.comPaso 4: Activar DNS-over-HTTPS y DNS-over-TLS
En los ajustes de cifrado, actívalo, pon el nombre de servidor en dns.example.com y apunta AdGuard Home a tus ficheros de certificado: los que guarda Caddy, o certificados que AdGuard Home obtiene él mismo si escucha en 443. DoH suele ser https://dns.example.com/dns-query. DoT es dns.example.com:853. Si Caddy ya posee el 443, deja que Caddy termine TLS y haga proxy inverso de la ruta DoH hacia el puerto DoH HTTP en claro de AdGuard Home, o deja que AdGuard Home escuche en 443 y pon el panel en otro subdominio.
Verifica con un cliente antes de cambiar todos los dispositivos. En un portátil con un curl moderno:
curl -H 'accept: application/dns-json' 'https://dns.example.com/dns-query?name=example.com&type=A'
# DoT test (kdig from knot-dnsutils, if installed):
# kdig @dns.example.com +tls-ca +tls-host=dns.example.com example.comPaso 5: Apuntar dispositivos reales a tu resolver
Windows 11 y las versiones recientes de Android pueden usar una plantilla DoH. iOS puede usar un perfil de configuración o un cliente compatible con DoH. Firefox y Chromium también permiten una URL DoH personalizada. En un router doméstico, configura el DNS WAN solo si el router admite DoT/DoH; si no, ejecuta WireGuard y pon el DNS en la IP VPN del VPS para que el DNS clásico nunca cruce internet.
- Android 9+: DNS privado (DoT) → dns.example.com
- Firefox: Ajustes → Red → DNS over HTTPS → URL personalizada https://dns.example.com/dns-query
- Dispositivos Apple: un mobileconfig firmado o una aplicación con DoH/DoT
- Otros VPS: configura resolv.conf o systemd-resolved hacia la IP WireGuard de esta instancia de AdGuard
- Evita poner la IP de este VPS como DNS en redes públicas aleatorias sin cifrado
Paso 6: Cortafuegos: cerrar el DNS recursivo abierto
Esta sección evita una sorpresa desagradable. Permite SSH, HTTPS y, de forma opcional, 853/tcp para DoT. No permitas 53/udp desde 0.0.0.0/0 salvo un diseño muy concreto, con límite de tasa y autenticado; y aun así, probablemente no deberías.
ufw allow OpenSSH
ufw allow 443/tcp comment 'dashboard + DoH'
ufw allow 853/tcp comment 'DoT'
# If DNS is only on WireGuard (example iface wg0, 10.8.0.1):
# ufw allow in on wg0 to any port 53 proto udp
ufw enable
ufw status verbose
# Confirm 53 is not public:
ss -tulpn | grep ':53'Filtros, listas de permitidos y clientes
Empieza con el filtro DNS por defecto de AdGuard y una lista de malware. Cuando un sitio se comporte mal, revisa el registro de consultas y añade una regla concreta de lista blanca en lugar de desactivar todo el bloqueo. Usa nombres de cliente (por IP o por ClientID en la URL DoH) para aplicar listas más estrictas a un televisor inteligente y más flexibles a un portátil de trabajo. Activa la búsqueda segura solo si de verdad la quieres: sorprende a quien no pidió resultados de Google reescritos.
- Registro de consultas: encuentra el dominio bloqueado y ponlo en lista blanca si es un falso positivo
- Ajustes de cliente: distintas listas de bloqueo por dispositivo
- Clientes no permitidos: bloquea rangos que no te pertenecen
- Limitación de tasa: actívala si alguna vez expones a más que un puñado de usuarios
Resolución de problemas
Si el propio VPS no puede hacer apt update, rompiste el DNS local al liberar el puerto 53: pon un resolver estático en resolved.conf como se muestra arriba. Si los dispositivos «tienen internet» pero los anuncios siguen cargando, están eludiendo tu DNS (resolvers fijos, DoH en el navegador o una aplicación con su propio DNS). Si el panel está vacío, miras la instancia equivocada o sigues golpeando el puerto 3000 después de que el asistente movió la interfaz.
- apt falla: revisa /etc/resolv.conf y systemd-resolved
- Puerto 53 en uso: ss -tulpn, desactiva el listener stub
- Errores de certificado DoH: el nombre de host debe coincidir con el SAN del certificado
- Anuncios visibles: el DoH del navegador hacia otro proveedor anula el del sistema
- Mucha RAM: registro de consultas + demasiadas listas de filtros; recorta listas y acorta la retención de registros
Lista de comprobación de seguridad
La interfaz web es un panel de administración. Contraseña única, solo HTTPS y no publiques la URL. Mantén AdGuard Home actualizado; el script de instalación y la interfaz exponen ambos una vía de actualización. Restringe 443 si solo tus dispositivos deben usar DoH: autenticación HTTP básica en la ruta DoH o acceso solo por WireGuard es mucho más seguro que un resolver abierto famoso.
- Sin 53/udp público
- HTTPS en el panel de control
- Contraseña de administrador fuerte, guardada en un gestor de contraseñas
- Prefiere WireGuard + DNS interno para dispositivos familiares
- Copia de seguridad de AdGuardHome.yaml fuera del servidor
Consejos
- Haz copia de /opt/AdGuardHome/AdGuardHome.yaml antes de cada actualización
- Usa un subdominio dedicado; no lo compartas con un CMS ajeno
- Si ya ejecutas Caddy, deja que Caddy posea el 443 y mantén AdGuard Home en localhost
- Documenta la URL DoH de tus dispositivos: la olvidarás
- Combínalo con las guías de endurecimiento SSH y cortafuegos para que el VPS no sea solo «seguro en DNS»
AdGuard Home en un VPS es directo: libera el puerto 53 en local, ejecuta el instalador, termina el asistente con una contraseña de administrador fuerte, pon la interfaz en HTTPS, activa DoH/DoT y mantén el DNS clásico fuera de internet pública. Apunta los dispositivos a tu extremo cifrado o a una IP VPN, empieza con un conjunto pequeño de filtros y usa el registro de consultas cuando algo se rompa. Eso es un resolver privado que controlas de verdad, no un DNS abierto público que meterá tu VPS en bases de abuso.