--- title: "Cómo instalar AdGuard Home en Ubuntu 24.04 con DoH y DoT" description: "Instala AdGuard Home en Ubuntu 24.04, bloquea anuncios con listas de filtros, limita quién lo usa y ofrece DNS-over-HTTPS y DNS-over-TLS con Let's Encrypt." category: "DNS Avanzado" language: es source: https://cubepath.com/es/docs/dns-avanzado/instalacion-y-configuracion-de-adguard-home updated: 2026-09-25 --- # Cómo instalar AdGuard Home en Ubuntu 24.04 con DoH y DoT AdGuard Home es un servidor DNS de código abierto que bloquea publicidad, rastreadores y dominios maliciosos para todos los dispositivos que lo usen. Se distribuye como un único binario con panel web propio y soporta de serie DNS cifrado: puede consultar a sus servidores de origen por DNS-over-HTTPS y también servir DNS-over-HTTPS (DoH) y DNS-over-TLS (DoT) a tus dispositivos. En este tutorial lo instalarás en Ubuntu 24.04, lo protegerás para que solo lo usen tus clientes, configurarás filtros y activarás DoH y DoT con un certificado de Let's Encrypt. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS y una IP fija, por ejemplo un VPS de CubePath, con al menos 512 MB de RAM. - Un usuario no root con privilegios `sudo`. - La IP pública de tu casa u oficina, que en los ejemplos aparece como `your_home_ip`. La del servidor aparece como `your_server_ip`. - Para la parte de DoH y DoT: un subdominio como `dns.your_domain` con un registro A que apunte a `your_server_ip`. > Advertencia: no dejes el puerto 53 abierto a todo Internet. Un resolvedor DNS abierto se usa para ataques de amplificación. En esta guía el DNS sin cifrar solo se permite desde `your_home_ip`. ## Paso 1: Instalar AdGuard Home El método oficial es el script de instalación del proyecto, que descarga la última versión estable en `/opt/AdGuardHome` y crea el servicio de systemd. Descárgalo y revísalo antes de ejecutarlo: ```bash curl -fsSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh -o install.sh less install.sh ``` Ejecútalo con la opción `-v` para ver lo que hace. El script pide la contraseña de `sudo` cuando la necesita: ```bash sh install.sh -v ``` Al terminar muestra la URL del asistente inicial en el puerto 3000. Todavía no lo abras: antes hay que liberar el puerto 53. Comprueba el servicio: ```bash systemctl status AdGuardHome --no-pager ``` La salida debe indicar `active (running)`. ## Paso 2: Liberar el puerto 53 `systemd-resolved` ocupa el puerto 53 en `127.0.0.53`, lo que impide a AdGuard Home escuchar en todas las interfaces. Desactiva su *stub listener* y haz que el propio servidor use AdGuard Home como DNS: ```bash sudo mkdir -p /etc/systemd/resolved.conf.d sudo nano /etc/systemd/resolved.conf.d/adguardhome.conf ``` ```ini [Resolve] DNS=127.0.0.1 DNSStubListener=no ``` Sustituye `/etc/resolv.conf` por el fichero que genera `systemd-resolved` con los servidores reales y reinicia el servicio: ```bash sudo mv /etc/resolv.conf /etc/resolv.conf.backup sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf sudo systemctl reload-or-restart systemd-resolved ``` Comprueba que ya no hay nada escuchando en el puerto 53: ```bash sudo ss -lntup 'sport = :53' ``` El comando no debe devolver ningún socket. El servidor no podrá resolver nombres hasta que termines el asistente del paso 4 y AdGuard Home empiece a escuchar en el puerto 53. ## Paso 3: Configurar el firewall Permite SSH y el DNS sin cifrar solo desde tu IP. El panel web no se abre: lo usarás a través de un túnel SSH. ```bash sudo ufw allow OpenSSH sudo ufw allow from your_home_ip to any port 53 sudo ufw enable sudo ufw status ``` ```output To Action From -- ------ ---- OpenSSH ALLOW Anywhere 53 ALLOW your_home_ip ``` ## Paso 4: Completar el asistente inicial Desde tu equipo, abre un túnel SSH hacia el puerto 3000 del servidor: ```bash ssh -L 3000:127.0.0.1:3000 your_user@your_server_ip ``` Con la sesión abierta, entra en `http://localhost:3000` y sigue el asistente: 1. **Admin Web Interface**: deja **All interfaces** y cambia el puerto a `8080`. Así los puertos 80 y 443 quedan libres para el certificado y para DoH. 2. **DNS server**: **All interfaces**, puerto `53`. 3. Crea el usuario administrador con una contraseña larga. Cuando termine, el asistente se cierra y el panel pasa al puerto 8080. Cierra el túnel y abre uno nuevo: ```bash ssh -L 8080:127.0.0.1:8080 your_user@your_server_ip ``` Entra en `http://localhost:8080` con el usuario que has creado. La configuración queda guardada en `/opt/AdGuardHome/AdGuardHome.yaml`. Es preferible cambiarla desde el panel: si editas el YAML a mano, detén antes el servicio con `sudo systemctl stop AdGuardHome`. ## Paso 5: Verificar el bloqueo Desde un equipo de tu casa u oficina, consulta un dominio normal y otro de publicidad: ```bash dig @your_server_ip cubepath.com +short dig @your_server_ip doubleclick.net +short ``` ```output 0.0.0.0 ``` AdGuard Home responde `0.0.0.0` a los dominios bloqueados. En el panel, **Query Log** muestra ambas consultas, con la segunda marcada como bloqueada por la lista **AdGuard DNS filter**, que viene activada por defecto. ## Paso 6: Configurar los servidores de origen y el acceso En **Settings > DNS settings**, sección **Upstream DNS servers**, define a quién reenvía AdGuard Home las consultas que no bloquea. Usar DoH hacia el origen cifra también ese tramo: ```text https://dns.quad9.net/dns-query https://cloudflare-dns.com/dns-query ``` En **Bootstrap DNS servers** pon resolvedores con IP, que AdGuard Home usa solo para resolver los nombres de los servidores DoH anteriores: ```text 9.9.9.9 1.1.1.1 ``` Pulsa **Test upstreams** y después **Apply**. En la misma página, **Access settings > Allowed clients** limita quién puede usar el servidor. Añade `your_home_ip` y guarda. Es una segunda barrera además de UFW, y será la única en el paso 9, cuando abras los puertos de DoH y DoT a Internet. ## Paso 7: Añadir listas de bloqueo y reglas propias En **Filters > DNS blocklists**, pulsa **Add blocklist > Choose from the list** y activa las listas que quieras del catálogo integrado, por ejemplo una de HaGeZi para publicidad y rastreo y una de malware. Cuantas más listas, más riesgo de bloquear algo legítimo; empieza con pocas. En **Filters > Custom filtering rules** puedes escribir reglas propias, una por línea: ```text ! Bloquea un dominio y todos sus subdominios ||telemetry.example.com^ ! Permite un dominio aunque esté en una lista de bloqueo @@||cdn.example.com^ ! Bloquea por expresión regular /^ads\./ ! Responde con una IP fija (sintaxis de /etc/hosts) 10.0.0.10 nas.internal ``` Las líneas que empiezan por `!` son comentarios. Guarda con **Apply** y comprueba con `dig @your_server_ip telemetry.example.com +short`, que debe devolver `0.0.0.0`. Para saber por qué se bloquea un dominio concreto, usa **Filters > Custom filtering rules > Check the filtering**, que indica qué regla y qué lista lo afectan. ## Paso 8: Ajustes por cliente En **Settings > Client settings** puedes registrar cada dispositivo por IP y aplicarle ajustes distintos de los globales: activar el control parental, forzar la búsqueda segura o bloquear servicios concretos (redes sociales, plataformas de vídeo o juegos) en la pestaña **Blocked services**. Si todos tus dispositivos salen a Internet con la misma IP pública, AdGuard Home no puede distinguirlos por IP; en ese caso usa los ClientID del paso 9. ## Paso 9: Activar DNS-over-HTTPS y DNS-over-TLS Con DoH y DoT tus dispositivos pueden usar AdGuard Home desde cualquier red, con las consultas cifradas. Primero necesitas un certificado válido para `dns.your_domain`. Abre el puerto 80 para la validación de Let's Encrypt y los puertos de DNS cifrado: ```bash sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 853/tcp ``` Instala Certbot y solicita el certificado. El modo `standalone` levanta un servidor web temporal en el puerto 80, que está libre porque el panel usa el 8080: ```bash sudo apt update sudo apt install certbot sudo certbot certonly --standalone -d dns.your_domain \ --deploy-hook "systemctl restart AdGuardHome" ``` El `--deploy-hook` se guarda en la configuración de renovación, así que AdGuard Home se reinicia y carga el certificado nuevo cada vez que Certbot lo renueva. El temporizador `certbot.timer` se encarga de las renovaciones. Ahora, en el panel, ve a **Settings > Encryption settings**: 1. Marca **Enable Encryption (HTTPS, DNS-over-HTTPS, and DNS-over-TLS)**. 2. **Server name**: `dns.your_domain`. 3. **HTTPS port**: `443`. **DNS-over-TLS port**: `853`. 4. En **Certificates**, elige **Set a certificates file path** y escribe `/etc/letsencrypt/live/dns.your_domain/fullchain.pem`. 5. En **Private key**, elige **Set a private key file** y escribe `/etc/letsencrypt/live/dns.your_domain/privkey.pem`. 6. Pulsa **Save configuration**. El servicio de AdGuard Home se ejecuta como root, así que puede leer los certificados directamente en `/etc/letsencrypt`. > Importante: con el cifrado activado, el panel de administración también es accesible en `https://dns.your_domain`. Usa una contraseña robusta para el usuario administrador. Como abriste DoH y DoT a Internet, la lista **Allowed clients** del paso 6 es ahora lo que impide que cualquiera use tu servidor. Para autorizar dispositivos con IP variable, usa un *ClientID*: un identificador que el dispositivo envía en la URL de DoH. Añade por ejemplo `my-phone` a **Allowed clients** y configura ese dispositivo con la URL: ```text https://dns.your_domain/dns-query/my-phone ``` ### Probar DoT y DoH Instala `kdig` en tu equipo y lanza una consulta por DoT desde tu IP autorizada: ```bash sudo apt install knot-dnsutils kdig @dns.your_domain +tls-ca +tls-hostname=dns.your_domain cubepath.com ``` La respuesta debe incluir `;; TLS session (TLS1.3)` y una sección `ANSWER` con la IP. Para DoH, envía con `curl` la consulta de ejemplo del RFC 8484 (el registro A de `www.example.com` codificado en base64url), usando el ClientID autorizado: ```bash curl -s -o /dev/null -w '%{http_code}\n' \ -H 'accept: application/dns-message' \ 'https://dns.your_domain/dns-query/my-phone?dns=AAABAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' ``` ```output 200 ``` ### Configurar los clientes - **Firefox**: Ajustes > Privacidad y seguridad > DNS sobre HTTPS > Protección máxima > Personalizado, con la URL `https://dns.your_domain/dns-query/my-phone`. - **Chrome y Edge**: Configuración > Privacidad y seguridad > Seguridad > Usar DNS seguro > Personalizado, con la misma URL. - **Windows 11 y macOS/iOS**: admiten DoH a nivel de sistema; en Apple se configura con un perfil `.mobileconfig`. En **Setup guide** del panel encontrarás las instrucciones para cada plataforma. ## Mantenimiento Cuando haya una versión nueva, el panel muestra un aviso con un botón para actualizar. Revisa los logs del servicio si algo falla: ```bash sudo journalctl -u AdGuardHome -n 100 --no-pager ``` Haz copia de seguridad del fichero `/opt/AdGuardHome/AdGuardHome.yaml`, que contiene toda la configuración (usuarios, listas, reglas y clientes). ## Solución de problemas - **AdGuard Home no arranca con "address already in use" en el puerto 53**: `systemd-resolved` sigue escuchando. Revisa el paso 2 y comprueba con `sudo ss -lntup 'sport = :53'`. - **Un cliente no obtiene respuesta**: comprueba que su IP o ClientID figura en **Allowed clients** y, para DNS sin cifrar, que su IP coincide con la regla de UFW. - **Certbot falla en la validación**: el registro A de `dns.your_domain` debe apuntar a `your_server_ip` y el puerto 80 debe estar libre y abierto en UFW. - **Una web ha dejado de funcionar**: busca en **Query Log** los dominios bloqueados de ese cliente y añade una regla `@@||dominio^` para permitir el necesario. ## Conclusión AdGuard Home ya filtra publicidad y rastreadores, consulta a sus servidores de origen de forma cifrada y sirve DNS-over-HTTPS y DNS-over-TLS a tus dispositivos, limitado a los clientes que has autorizado. Como siguientes pasos puedes instalar Unbound en el mismo servidor y usarlo como servidor de origen para resolver sin depender de terceros, o crear perfiles por cliente con control parental para los dispositivos de casa.