AdGuard Home: de la interfaz web al filtrado por cliente
Resultado
Sección titulada «Resultado»- AdGuard Home usa el puerto
53de OpenWrt; la interfaz web está en el3000. dnsmasqpasa al5353y sigue sirviendo DHCP.- Los clientes DHCP reciben
192.168.2.1como DNS. - Una regla de filtro personalizada bloquea un dominio de prueba mientras los nombres normales siguen resolviéndose.
- El disco de datos, la configuración de AGH y el filtro sobreviven a un reinicio.
Entorno aplicable y topología
Sección titulada «Entorno aplicable y topología»- PVE 9.2.2 con una sola NIC; OpenWrt 25.12.6 x86_64 VM 201 (1GB de RAM, disco de datos de 2GB).
- WAN
net0envmbr0(DHCP); LANnet1en unvmbr2aislado (192.168.2.0/24). - AGH 0.107.79 del feed
apkde OpenWrt. - No compartas un mismo puente entre dos VM de OpenWrt que ejecuten DHCP: en este laboratorio la VM 200 está en
vmbr1(192.168.1.0/24), así que la VM 201 debe usarvmbr2(192.168.2.0/24). De lo contrario, un cliente podría recibir una asignación de la subred equivocada.
| Puerto físico | Bridge de PVE | NIC virtual | Interfaz de OpenWrt | Función |
|---|---|---|---|---|
| nic0 | vmbr0 | net0 | wan DHCP | upstream 192.168.50.1 |
| — | vmbr2 | net1 | lan 192.168.2.1 | AGH + DHCP clients |
Puertos y responsabilidades
Sección titulada «Puertos y responsabilidades»| Puerto | Componente | Función |
|---|---|---|
| 53 | AdGuard Home | DNS de los clientes, filtrado, reenvío upstream |
| 3000 | AdGuard Home | interfaz web |
| 5353 | dnsmasq | DHCP y DNS local; ya no en el 53 |
No enlaces AGH y dnsmasq al 53 al mismo tiempo. No apuntes la opción 6 de DHCP a una dirección que no escuche en el 53.
Antes de cambiar nada
Sección titulada «Antes de cambiar nada»cp /etc/config/dhcp /etc/config/dhcp.bak.$(date +%F)cp /etc/config/adguardhome /etc/config/adguardhome.bak.$(date +%F) 2>/dev/null || truecat /etc/config/dhcpConserva el acceso por consola o LAN a OpenWrt. No hagas que la única vía de administración dependa del DNS que estás cambiando.
EsperadoPuedes restaurar la configuración de dnsmasq/AGH.
Pasos mínimos
Sección titulada «Pasos mínimos»
apk updateapk add adguardhome block-mount e2fsprogse2fsprogs aporta mkfs.ext4; block-mount aporta el servicio fstab. Un mirror local de OpenWrt es válido, pero los paquetes deben seguir pasando la comprobación de firmas.
Esperadoadguardhome, block-mount y e2fsprogs están instalados.
Ejecuta esto solo en un disco de datos de laboratorio que hayas confirmado que está vacío:
mkfs.ext4 -F /dev/sdbmkdir -p /opt/aghmount /dev/sdb /opt/aghblock info /dev/sdbUsa el UUID que muestra block info. En LuCI, en Mount Points, establece el destino de ese disco en /opt/agh y actívalo; o busca el @mount[n] correspondiente desde la CLI:
uci show fstab# find the @mount[n] whose uuid is <your-UUID>uci set fstab.@mount[n].target='/opt/agh'uci set fstab.@mount[n].enabled='1'uci commit fstab/etc/init.d/fstab enableblock mountmount | grep /opt/aghEste laboratorio usó el fstab.@mount[2] detectado automáticamente para el disco de datos de 2GB; cambiar su destino a /opt/agh y activarlo funcionó. No copies el [2]; busca el que coincida con tu UUID.
Esperado/opt/agh está en un disco separado y sobrevive al reinicio.
uci set dhcp.@dnsmasq[0].port='5353'uci commit dhcp/etc/init.d/dnsmasq restartnetstat -lnp | grep -E ':53|:5353'Los clientes no pueden resolver en el 53 hasta que AGH arranque.
EsperadoEl puerto 53 queda libre y DHCP sigue funcionando.
uci set adguardhome.config.work_dir='/opt/agh/work'uci commit adguardhomemkdir -p /opt/agh/workchown -R adguardhome:adguardhome /opt/agh /etc/adguardhome/etc/init.d/adguardhome enable/etc/init.d/adguardhome startsleep 3netstat -lnp | grep -E ':3000|:53'Abre http://192.168.2.1:3000/ y configura:
- puerto web
3000; - puerto DNS
53; - un usuario y contraseña de administrador;
- DNS upstream
192.168.50.1para este laboratorio; - desactiva DNSSEC si el upstream no lo valida.
Si no tienes navegador, usa la API de configuración de AGH; nunca subas la contraseña de administrador a un repositorio.
EsperadoLa interfaz web es accesible en el 3000.
uci add_list dhcp.lan.dhcp_option='6,192.168.2.1'uci commit dhcp/etc/init.d/dnsmasq restartuci show dhcp.lan | grep dhcp_optionCambiar solo el puerto de dnsmasq puede hacer que algunos clientes dejen de recibir DNS; establece la opción 6 de forma explícita.
EsperadoLos clientes reciben 192.168.2.1 como DNS.
En Filters → Custom filtering rules añade:
||blocked.example^Es un dominio de prueba reservado. Añade listas de filtros mantenidas más adelante para uso real. Verifica con nslookup, no con “la página parece rota”.
Esperadoblocked.example devuelve 0.0.0.0; los nombres normales siguen resolviéndose.
Verificación
Sección titulada «Verificación»
netstat -lnp | grep -E ':53|:3000|:5353'nslookup blocked.example 192.168.2.1nslookup openwrt.org 192.168.2.1Esperado: blocked.example devuelve 0.0.0.0 (IPv6 también puede mostrar ::); openwrt.org devuelve una dirección real.
EsperadoAGH escucha en 53/3000; dnsmasq en 5353.
ip addr showip routecat /etc/resolv.confnslookup blocked.examplenslookup openwrt.orgSi el DNS del cliente no es 192.168.2.1, vuelve a la opción 6 de DHCP y al puerto de dnsmasq.
EsperadoEl cliente obtiene 192.168.2.x y DNS 192.168.2.1.
rebootDespués de reiniciar:
mount | grep /opt/aghnetstat -lnp | grep -E ':53|:3000'nslookup blocked.example 192.168.2.1nslookup openwrt.org 192.168.2.1EsperadoEl disco de datos se monta, AGH arranca y la regla sobrevive.
Ramas de fallo y recuperación
Sección titulada «Ramas de fallo y recuperación»AGH no arranca / el puerto 53 está ocupado
Sección titulada «AGH no arranca / el puerto 53 está ocupado»logread | grep -i adguard | tail -50netstat -lnp | grep ':53'/usr/bin/AdGuardHome --check-config -c /etc/adguardhome/adguardhome.yamlSi dnsmasq sigue usando el 53, confirma dhcp.@dnsmasq[0].port='5353'. Si la configuración es incorrecta, restaura la copia de seguridad:
cp /etc/adguardhome/adguardhome.bak.YYYY-MM-DD /etc/adguardhome/adguardhome.yaml/etc/init.d/adguardhome restartLos clientes no pueden resolver nada
Sección titulada «Los clientes no pueden resolver nada»Devuelve temporalmente el DNS a dnsmasq:
uci set dhcp.@dnsmasq[0].port='53'uci -q delete dhcp.lan.dhcp_optionuci commit dhcp/etc/init.d/dnsmasq restart/etc/init.d/adguardhome stopRestaura primero la resolución básica y luego depura AGH capa por capa.
El disco de datos no está montado
Sección titulada «El disco de datos no está montado»mount | grep /opt/aghblock info /dev/sdblogread | grep -i fstabRevisa el UUID, el destino y el indicador enabled de fstab; monta manualmente y luego reinicia AGH.
El filtrado no funciona
Sección titulada «El filtrado no funciona»
- Confirma que el cliente realmente usa AGH como DNS.
- Confirma que la regla está en Custom filtering rules, no en una suscripción.
- Consulta a AGH directamente:
nslookup blocked.example 192.168.2.1. - El DoH del navegador o del sistema operativo puede saltarse AGH.
Prueba E2 de laboratorio (2026-10-20)
Sección titulada «Prueba E2 de laboratorio (2026-10-20)»- Entorno: PVE 9.2.2 con una sola NIC; OpenWrt 25.12.6 VM 201 (1GB/disco de datos de 2GB); AGH 0.107.79.
- Puertos: AGH
53+ web3000; dnsmasq5353; opción 6 de DHCP192.168.2.1. - Cliente: DHCP
192.168.2.166/24, DNS192.168.2.1;blocked.example→0.0.0.0,openwrt.org→64.226.122.113. - Reinicio:
/opt/aghmontado mediante fstab; AGH, dnsmasq y las reglas de filtrado se recuperaron; la web devolvió 302. - No probado: interacción real con la interfaz del navegador, listas de suscripción externas, clientes LAN físicos, IPv6, estabilidad a largo plazo.
Fuentes y revisión
Sección titulada «Fuentes y revisión»- Este es un registro de laboratorio E2; no ha sido revisado de forma independiente ni probado en una LAN física.
- Receta:
tests/recipes/agh-25.12-vm201.md; notas del entorno:docs/agh-e2-run.md. - Actualiza
testedVersionscuando cambie el paquete o la versión; no copies scripts de init entre versiones de firmware.
Fuentes
Notas independientes sobre OpenWrt. Cada página indica el firmware, el dispositivo, el gestor de paquetes y la vía de retorno.
Iconos: Solar by 480 Design, CC BY 4.0