A la hora de montar un DNS doméstico o de laboratorio con AdGuard Home, lo más habitual es empezar con un único nodo centralizado. Funciona bien… hasta que ese sistema se reinicia, se actualiza o simplemente falla. En ese momento, toda la red se queda sin resolución de nombres y, por extensión, sin acceso normal a Internet.
En este artículo veremos cómo añadir un segundo nodo de AdGuard Home que funcione de forma independiente, pero sincronizado con el nodo principal (master). La idea es sencilla y muy práctica: disponer de dos resolutores DNS activos, por ejemplo uno en el servidor principal y otro en una Raspberry Pi u otro equipo de bajo consumo, de forma que si el sistema principal cae, la red siga resolviendo DNS con normalidad.
Además de la alta disponibilidad, este enfoque permite:
- Mantener las mismas listas, reglas y configuraciones en ambos nodos.
- Evitar configuraciones manuales duplicadas.
- Mejorar la resiliencia de la red frente a reinicios, mantenimientos o fallos inesperados.
El resultado es una arquitectura DNS más robusta, pensada tanto para entornos domésticos avanzados como para homelabs o pequeñas infraestructuras, donde la continuidad del servicio es clave incluso cuando algo falla.
Usar una Raspberry Pi
Para montar este segundo nodo no necesitamos nada especialmente potente. La idea es utilizar un equipo pequeño, económico y de bajo consumo, que pueda estar encendido 24/7 sin impacto apreciable en la factura eléctrica.
En este tutorial usaremos una Raspberry Pi, pero el proceso es exactamente el mismo si utilizas otro dispositivo similar: una Raspberry Pi 3, una Raspberry Pi Zero / Nano, una Orange Pi o cualquier SBC (Single Board Computer) equivalente.
Lo importante no es el modelo concreto, sino que sea un sistema independiente del nodo principal, capaz de ejecutar AdGuard Home de forma estable y sincronizar su configuración con el nodo master para actuar como DNS secundario en caso de fallo.
Instalar ISO del sistema operativo base
Como que utilizaremos una Raspberry Pi, lo más recomendable es utulizar Raspberry Pi Imager para grabar la ISO de instalación del sistema operativo.
Si esto lo haces desde tu distribución favorita de GNU/Linux:
# Debian y/o Ubuntu
apt install rpi-imager
# Flatpak
flatpak install flathub org.raspberrypi.rpi-imager
flatpak run org.raspberrypi.rpi-imager
Tras su instalación, iniciamos el programa:

Una vez abierto Raspberry Pi Imager, el proceso es muy sencillo. Vamos a repasar las opciones que aparecen y cómo configurarlas para este escenario.
- Raspberry Pi Device: En Choose device seleccionamos el modelo de Raspberry Pi que vamos a utilizar. Esto permite que el imager aplique automáticamente las configuraciones y compatibilidades correctas para ese hardware.
- Operating System: Seleccionamos en el desplegable la opción de Other y luego Raspberry Pi OS Lite (64-bit o 32-bit, sin entorno gráfico)
- Storage: En Choose storage seleccionamos la microSD (o disco USB) donde se grabará el sistema.
Antes de grabar, Raspberry Pi Imager te ofrecerá configurar algunos valores iniciales. Aquí puedes adaptarlos a tu entorno, pero recomiendo especialmente:
- Habilitar SSH (muy importante) Para poder administrar la Raspberry Pi remotamente sin necesidad de teclado ni pantalla.
- Configurar usuario y contraseña.
- Zona horaria y distribución de teclado.
Iniciamos Raspberry Pi
A continuación lo que haremos será conectar la MicroSD a la Raspberry Pi y la conectamos a la red electrica junto con el cable de internet.
Como que ya usamos Adguard Home, esperaremos a que aparezca como dispositivo nuevo en la red. En un par de minutos veremos el dispositivo en la lista:

Aquí podremos asignarle una IP a través de DHCP (será necesario reiniciar) y un hostname si fuera necesario.
Una vez tengamos la IP configurada correctamente en nuestra Rapsberry Pi, actualizaremos repositorios:
apt update
apt upgradeInstalación de Adguard Home
El siguiente paso será instalar Adguard Home en la Raspberry Pi. Este proceso es muy sencilla ya que sólo tenemos que ejecutar un comando:
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -vEsperamos a que finalice el proceso y cuando acabe veremos lo siguiente:
2025/11/20 17:37:30 [info] service: AdGuard Home, version v0.107.69
2025/11/20 17:37:30 [info] service: control action=install
2025/11/20 17:37:34 [info] service: started
2025/11/20 17:37:34 [info] service: line_num=1 line="Almost ready!"
2025/11/20 17:37:34 [info] service: line_num=2 line="AdGuard Home is successfully installed and will automatically start on boot."
2025/11/20 17:37:34 [info] service: line_num=3 line="There are a few more things that must be configured before you can use it."
2025/11/20 17:37:34 [info] service: line_num=4 line="Click on the link below and follow the Installation Wizard steps to finish setup."
2025/11/20 17:37:34 [info] service: line_num=5 line="AdGuard Home is now available at the following addresses:"
2025/11/20 17:37:34 [info] go to http://127.0.0.1:3000
2025/11/20 17:37:34 [info] go to http://[::1]:3000
2025/11/20 17:37:34 [info] go to http://192.168.1.107:3000En este punto ya podremos acceder a través del puerto 3000.
Accediendo a través de la interfaz web
Abrimos nuestro navegador y ponemos la IP y el puerto para acceder a Adguard Home:

Le damos a siguiente y configuramos las interfaces. Marcaremos todas las interfaces por el puerto 80:

Luego configuraremos un usuario y contraseña:

Finalmente saldrá las configuraciones que hay que hacer en los diferentes dispositivos, pero no es nuestro caso.

Listo! Ya tenemos acceso a la interfaz de siempre de AdGuard Home:

Configurar la sincronización de AdGuard Home
Para sincronizar el AdGuard Home principal con el secundario, tendremos que usar un contenedor de docker llamado AdGuardHome-Sync:
Este servicio viene montado con Docker, por lo que necesitarás usar Docker para hacer la sincronización. Puedes montar este contenedor en una MV dentro de Proxmox (si ya tienes algo con Docker genial), o directamente en el NAS.
Usaremos el fichero compose que viene por defecto para levantarlo, en mi caso he usado Portainer que tengo instalado en mi NAS de Ugreen.

Para la instalación de Docker
Si necesitáis un tutorial sobre como instalar Docker en alguna distribución de GNU/Linux os dejo este tutorial:

Para la instalación de Portainer
Si ya tenéis Docker instalado y queréis usar Portainer, os dejo este otro tutorial:

Configuración del Stack en Portainer
Para crear el stack en Portainer le añadiremos un nombre y usaremos esta configuración:
---
version: "2.1"
services:
adguardhome-sync:
image: ghcr.io/bakito/adguardhome-sync
container_name: adguardhome-sync
command: run
environment:
TZ: Europe/Madrid
LOG_LEVEL: info
ORIGIN_URL: http://192.168.1.10
ORIGIN_USERNAME: t3rr0rz0n3
ORIGIN_PASSWORD: PASS
REPLICA1_URL: http://192.168.1.9
REPLICA1_USERNAME: t3rr0rz0n3
REPLICA1_PASSWORD: PASS
CRON: 0 */10 * * *
RUN_ON_START: "true"
API_PORT: 8080
ports:
- 8080:8080
restart: unless-stoppedDe esta configuración tenemos que tener claro primero las variables que son del AdGuard Home principal:
- ORIGIN_URL: La IP de acceso al AdGuard Home con HTTP.
- ORIGIN_USERNAME: Usuario de acceso.
- ORIGIN_PASSWORD: Contraseña del usuario.
Luego al añadir la replica, que será nuestro AdGuard Home secundario, tendremos que configurar estas otras variables:
- REPLICA1_URL: La IP de acceso al AdGuard que hemos configurado en Raspberry PI.
- REPLICA1_USERNAME: Usuario de acceso.
- REPLICA1_PASSWORD: Contraseña de acceso.
API_PORT y PORTS tienen que ser lo mismo.Una vez hemos configurado todo, podremos iniciar los contenedores. Inmediatamente revisaremos los logs del contenedor para revisar si funciona correctamente la sincronización:
2025-11-20T18:49:16.158+0100 INFO sync sync/sync.go:41 AdGuardHome sync {"version": "v0.8.2", "build": "2025-10-24T17:14:03Z", "os": "linux", "arch": "amd64"}
2025-11-20T18:49:16.159+0100 INFO sync types/features.go:61 Disabled features {"features": ["TLSConfig"]}
2025-11-20T18:49:16.159+0100 INFO sync sync/sync.go:66 Setup cronjob {"cron": "0 */10 * * *", "next-execution": "2025-11-20T20:00:00.000+0100"}
2025-11-20T18:49:16.159+0100 INFO sync sync/http.go:101 Starting API server {"port": 8081}
2025-11-20T18:49:16.159+0100 INFO sync sync/sync.go:88 Running sync on startup
2025-11-20T18:49:16.215+0100 INFO sync sync/sync.go:183 Connected to origin {"from": "192.168.1.10", "version": "v0.107.69"}
2025-11-20T18:49:16.942+0100 INFO sync sync/sync.go:291 Start sync {"from": "192.168.1.10", "to": "192.168.1.9"}
2025-11-20T18:49:17.407+0100 INFO sync sync/sync.go:312 Connected to replica {"from": "192.168.1.10", "to": "192.168.1.9", "version": "v0.107.69"}AdGuardHome-sync dispone de una interfaz web propia, accesible por defecto a través del puerto 8080. Desde esta interfaz podemos consultar información detallada del estado de la sincronización entre nodos y, si lo necesitamos, forzar una sincronización manual de forma inmediata.

Es especialmente útil para verificar que el nodo secundario está recibiendo correctamente la configuración del principal y para realizar comprobaciones rápidas sin necesidad de usar la línea de comandos.
Si pulsamos sobre el botón Syncronize se iniciará la sincronización y podremos ver en los logs que se están copiando los datos del AdGuard Home principal al secundario:
2025-11-20T18:49:19.466+0100 INFO client client/client.go:417 Set dns config list {"host": "192.168.1.9"}
2025-11-20T18:49:21.713+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "ssl.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:22.635+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "pulse.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:23.515+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "dash.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:24.388+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "ptm.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:25.282+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "frgt.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:26.189+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "mmch.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:27.084+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "dns.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:27.106+0100 INFO sync sync/http.go:26 Starting sync from API {"remote-addr": "192.168.1.44:35684"}
2025-11-20T18:49:27.106+0100 INFO sync sync/sync.go:154 Sync already running
2025-11-20T18:49:28.014+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "dckr.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:28.899+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "trrnt.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:29.793+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "upload.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:30.671+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "box.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:31.568+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "s3.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:32.447+0100 INFO client client/client.go:205 Add DNS rewrite entry {"host": "192.168.1.9", "domain": "console.dominio.com", "answer": "192.168.1.11"}
2025-11-20T18:49:33.810+0100 INFO client client/client.go:265 Add filter {"host": "192.168.1.9", "url": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_24.txt", "whitelist": false, "enabled": false}
2025-11-20T18:49:36.180+0100 INFO client client/client.go:265 Add filter {"host": "192.168.1.9", "url": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_70.txt", "whitelist": false, "enabled": false}
2025-11-20T18:49:45.635+0100 INFO client client/client.go:265 Add filter {"host": "192.168.1.9", "url": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_4.txt", "whitelist": false, "enabled": false}Una vez finalice la sincronización, podremos verificar que el proceso se ha completado correctamente, comprobando que la configuración, listas y reglas del nodo principal se han replicado en el nodo secundario sin errores.
2025-11-20T18:51:05.246+0100 INFO sync sync/sync.go:301 Sync done {"from": "192.168.1.10", "to": "192.168.1.9", "duration": "4.95e-07s"}Y si volvemos a la interfaz de Adguard Home del secundario podremos observar que tiene la misma configuración y datos que el principal.

Conclusión
Con esta configuración ya disponemos de dos servidores DNS con AdGuard Home, sincronizados entre sí y funcionando de manera independiente. El nodo secundario replica automáticamente la configuración del nodo principal, evitando duplicar tareas y asegurando que ambos mantengan las mismas reglas, listas y políticas.
El principal beneficio de este enfoque es la alta disponibilidad: si el nodo principal se reinicia, se actualiza o deja de funcionar por cualquier motivo, la resolución de nombres continuará sin interrupciones gracias al segundo servidor. De este modo, la red seguirá teniendo acceso a Internet con normalidad, sin cortes ni comportamientos extraños.
En definitiva, pasamos de un único punto de fallo a una infraestructura DNS más robusta y resiliente, ideal tanto para entornos domésticos avanzados como para homelabs, donde la estabilidad y la continuidad del servicio son clave.
Más sobre ./voidNull
- 📖 Aprende todos sobre los comandos de GNU/Linux en nuestro Diccionario "De la A a la Z: Los comandos de GNU/Linux"
- 💪 ¡Forma parte de la Comunidad de ./voidNull!
- 🤖 Disfruta de todos nuestros Cursos sobre Ansible, Proxmox, Home Assistant entre otros.
- 📩 Mantente actualizado con lo último en GNU/Linux y Software Libre. Recibe nuestra Newsletter mensual.



Comentarios