Instalación y Configuración de AdGuard Home
AdGuard Home es un servidor DNS con bloqueo de anuncios centrado en la privacidad que ofrece DNS-over-HTTPS y DNS-over-TLS nativos, filtrado parental y gestión detallada de clientes, con una interfaz web más moderna que Pi-hole. Su instalación como binario único sin dependencias lo hace más fácil de desplegar en cualquier distribución Linux, y sus capacidades de cifrado DNS nativas lo posicionan como una alternativa superior para entornos orientados a la privacidad. Esta guía cubre la instalación completa de AdGuard Home y su configuración avanzada.
Requisitos Previos
- Servidor Linux (Ubuntu 22.04/Debian 12 o CentOS 9/Rocky 9)
- Mínimo 256 MB de RAM (512 MB recomendado)
- IP estática en el servidor
- Puerto 53 disponible (deshabilitar systemd-resolved en Ubuntu)
- Para DoH/DoT: certificado TLS válido y puertos 443/853 accesibles
Instalación de AdGuard Home
# Descargar e instalar AdGuard Home con el script oficial
curl -fsSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
# O instalación manual (más control)
# Obtener la última versión
AGH_VERSION=$(curl -s https://api.github.com/repos/AdguardTeam/AdGuardHome/releases/latest | \
grep '"tag_name"' | cut -d'"' -f4)
# Descargar el binario para Linux amd64
wget "https://github.com/AdguardTeam/AdGuardHome/releases/download/${AGH_VERSION}/AdGuardHome_linux_amd64.tar.gz"
tar xzf AdGuardHome_linux_amd64.tar.gz
# Instalar como servicio del sistema
cd AdGuardHome
./AdGuardHome -s install
# El instalador crea el servicio systemd automáticamente
systemctl status AdGuardHome
Deshabilitar systemd-resolved en Ubuntu antes de usar el puerto 53:
# Configurar systemd-resolved para no usar el puerto 53
mkdir -p /etc/systemd/resolved.conf.d
cat > /etc/systemd/resolved.conf.d/nolisten.conf << 'EOF'
[Resolve]
DNSStubListener=no
DNS=1.1.1.1
EOF
systemctl restart systemd-resolved
rm -f /etc/resolv.conf
echo "nameserver 127.0.0.1" > /etc/resolv.conf
Configuración Inicial
# AdGuard Home expone el asistente de configuración en el puerto 3000
# Acceder a: http://IP-del-servidor:3000
# La configuración se guarda en /opt/AdGuardHome/AdGuardHome.yaml
# Ubicación del directorio de trabajo (varía según el método de instalación)
ls /opt/AdGuardHome/
# AdGuardHome AdGuardHome.yaml data/
# Ver el estado del servicio
systemctl status AdGuardHome
journalctl -u AdGuardHome -f
Configuración mínima en AdGuardHome.yaml para uso en producción:
# /opt/AdGuardHome/AdGuardHome.yaml (fragmento relevante)
# ATENCIÓN: Este archivo se gestiona mejor desde la interfaz web
# Editar manualmente solo cuando sea necesario
http:
address: 0.0.0.0:80
dns:
bind_hosts:
- 0.0.0.0
port: 53
# Servidores upstream para resolver consultas no bloqueadas
upstream_dns:
- https://dns.cloudflare.com/dns-query
- https://dns.google/dns-query
# Bootstrap DNS (para resolver los DoH/DoT upstream)
bootstrap_dns:
- 1.1.1.1
- 8.8.8.8
# Caché
cache_size: 4194304 # 4 MB
cache_ttl_min: 0
cache_ttl_max: 0
cache_optimistic: true
# Opciones de privacidad
anonymize_client_ip: false
Filtros y Listas de Bloqueo
# Las listas de filtros se gestionan desde la interfaz web:
# Filters > DNS Blocklists > Add Blocklist
# También se pueden gestionar editando el YAML o via CLI
# Listas recomendadas para añadir:
# Via interfaz web, añadir estas URLs en Filters > DNS Blocklists:
# - AdGuard DNS filter: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt
# - EasyList: https://easylist.to/easylist/easylist.txt
# - EasyPrivacy: https://easylist.to/easylist/easyprivacy.txt
# - Malware URL Blocklist: https://malware-filter.gitlab.io/malware-filter/urlhaus-filter-agh.txt
# Actualizar todas las listas de filtros desde CLI
curl -s "http://localhost:3000/control/filtering/refresh" \
-H "Authorization: Basic $(echo -n 'admin:password' | base64)"
# Ver estadísticas de filtrado
curl -s "http://localhost:3000/control/stats" \
-H "Authorization: Basic $(echo -n 'admin:password' | base64)" | \
python3 -m json.tool
Reglas de filtrado personalizadas (sintaxis similar a hosts y ad-blocking):
# Añadir reglas personalizadas en Filters > Custom Filtering Rules:
# Bloquear un dominio:
# ||anuncios-empresa.com^
# Bloquear todos los subdominios de un dominio:
# ||*.anuncios-empresa.com^
# Permitir un dominio bloqueado por una lista (lista blanca):
# @@||api-servicio-util.com^
# Bloquear por regex:
# /^ads\..+\.com$/
# Redirigir dominio a IP local:
# 192.168.1.100 servidor-local.com
DNS-over-HTTPS y DNS-over-TLS
AdGuard Home puede servir DoH y DoT a los clientes, cifrando sus consultas DNS:
# Obtener certificados TLS (necesario para DoH y DoT)
apt-get install -y certbot
# Si usas un dominio público:
certbot certonly --standalone -d dns.tudominio.com \
--email [email protected] --agree-tos --non-interactive
# Copiar los certificados al directorio de AdGuard
cp /etc/letsencrypt/live/dns.tudominio.com/fullchain.pem /opt/AdGuardHome/
cp /etc/letsencrypt/live/dns.tudominio.com/privkey.pem /opt/AdGuardHome/
chown -R $(stat -c '%U:%G' /opt/AdGuardHome/AdGuardHome) /opt/AdGuardHome/*.pem
Configurar DoH/DoT en la interfaz web:
- Ve a Settings > Encryption
- Activa Enable Encryption
- Configura el nombre de servidor:
dns.tudominio.com - Ruta del certificado:
/opt/AdGuardHome/fullchain.pem - Ruta de la clave:
/opt/AdGuardHome/privkey.pem - Guarda la configuración
# Verificar que DoH y DoT funcionan
# DoT (puerto 853)
kdig -d @dns.tudominio.com +tls-ca google.com
# DoH (puerto 443)
curl -s "https://dns.tudominio.com/dns-query?name=google.com&type=A" \
-H "Accept: application/dns-json" | python3 -m json.tool
# Configurar DoH en dispositivos cliente:
# Navegadores: Settings > Privacy > Use secure DNS > Custom > https://dns.tudominio.com/dns-query
# Android: Settings > Network > Private DNS > dns.tudominio.com
# iOS: Perfil de configuración .mobileconfig con DoH
Gestión de Clientes
AdGuard Home permite configurar políticas por dispositivo:
# Los clientes se identifican por IP, MAC o nombre de cliente DHCP
# Gestión desde: Settings > Client Settings
# Via API (documentada en http://localhost:3000/swagger)
# Añadir un cliente con configuración personalizada
curl -X POST "http://localhost:3000/control/clients/add" \
-H "Authorization: Basic $(echo -n 'admin:password' | base64)" \
-H "Content-Type: application/json" \
-d '{
"name": "PC-trabajo",
"ids": ["192.168.1.100"],
"use_global_settings": false,
"filtering_enabled": true,
"parental_enabled": false,
"safebrowsing_enabled": true,
"safesearch": {"enabled": false},
"blocked_services": ["youtube", "tiktok"]
}'
# Ver todos los clientes configurados
curl -s "http://localhost:3000/control/clients" \
-H "Authorization: Basic $(echo -n 'admin:password' | base64)" | \
python3 -m json.tool
Filtrado Parental y Servicios Seguros
# Activar búsqueda segura (SafeSearch) para todos los clientes
# Settings > DNS Settings > Security > Force Safe Search
# Activar la protección parental para un cliente específico
# (bloquea contenido para adultos)
# Client Settings > Seleccionar cliente > Enable parental control
# Bloquear servicios específicos por cliente (redes sociales, etc.)
# Los servicios disponibles incluyen: youtube, facebook, instagram, tiktok, etc.
# Client Settings > Seleccionar cliente > Block services
# Lista de servicios bloqueables disponibles
curl -s "http://localhost:3000/control/blocked_services/all" \
-H "Authorization: Basic $(echo -n 'admin:password' | base64)" | \
python3 -c "import sys,json; [print(s['id']) for s in json.load(sys.stdin)]"
# Activar Safe Browsing (bloqueo de dominios maliciosos conocidos)
# Settings > DNS Settings > Security > Enable browsing security
Solución de Problemas
# Ver logs del servicio
journalctl -u AdGuardHome -f
# Reiniciar AdGuard Home
systemctl restart AdGuardHome
# Verificar que el puerto 53 está escuchando
ss -ulnp | grep ':53 '
# Probar resolución DNS
dig @127.0.0.1 google.com # Debe resolver normalmente
dig @127.0.0.1 ads.doubleclick.net # Debe ser bloqueado (NXDOMAIN)
# Ver estadísticas via API
curl -s "http://localhost:3000/control/stats_history" \
-H "Authorization: Basic $(echo -n 'admin:password' | base64)"
# Restablecer contraseña del panel (si se olvidó)
# Detener AdGuard Home, editar AdGuardHome.yaml y cambiar:
# password: "" (o generar un hash bcrypt con: htpasswd -bnBC 10 "" "newpassword")
systemctl stop AdGuardHome
# Editar /opt/AdGuardHome/AdGuardHome.yaml y cambiar el campo password
systemctl start AdGuardHome
# Actualizar AdGuard Home a la última versión
/opt/AdGuardHome/AdGuardHome -s stop
wget -O /tmp/agh-new.tar.gz "https://github.com/AdguardTeam/AdGuardHome/releases/latest/download/AdGuardHome_linux_amd64.tar.gz"
# Extraer y reemplazar el binario, luego iniciar el servicio
Conclusión
AdGuard Home destaca frente a otras soluciones de bloqueo DNS por su soporte nativo de protocolos DNS cifrados (DoH/DoT) tanto para upstream como para clientes, y su gestión granular por dispositivo, todo en un único binario sin dependencias externas. Para entornos donde la privacidad y el cifrado DNS son prioritarios, AdGuard Home ofrece una experiencia más completa y moderna que soluciones alternativas, con una curva de aprendizaje muy reducida gracias a su interfaz intuitiva.


