Sincronizzare più istanze di AdGuard Home
AdGuard Home è un software fantastico, ma la macchina che lo ospita può non essere infallibile. In questo articolo vedremo come rendere più resistente la nostra infrastruttura creando più istanze di AdGuard.
Non hai ancora installato AdGuard Home?
Non ti preoccupare, ho scritto un articolo intero su come fare!
Introduzione
AdGuard Home è un software fantastico, ma la macchina che lo ospita può non essere infallibile.
In caso di guasto della macchina, perdere le funzionalità di risoluzioni dei nomi a livello di rete è un vero e proprio disastro! E buona fortuna a cercare su Google come riparare un sistema operativo rotto... non potrete risolvere nemmeno il nome di Google.com se non navigando da smartphone.
Per rendere più affidabile AdGuard possiamo prevedere dei meccanismi di sicurezza:
- Creare un Load Balancer per DNS con NGINX, in modo da usare il Gateway come server DNS se AdGuard si rompe.
- Creare più istanze di AdGuard, sincronizzate tra loro, e renderle entrambe server DNS a livello di rete.
Oppure, ancora meglio, possiamo fare entrambe le cose!
Prima di tutto, creeremo due instanze di AdGuard Home e le metteremo in sincronizzazione tra di loro.
In seguito, creeremo un Load Balancing DNS tramite NGINX in modo da poterle usare entrambe con distribuzione del carico.
Installazione
Il software adguardhome-sync creato dall'utente GitHub bakito permette di designare un server AdGuard Home come principale, e di replicare le sue configurazioni periodicamente su altri server AdGuard.
Nel dettaglio, adguardhome-sync ci permetterà di sincronizzare:
- Impostazioni generali
- Filtri
- Riscritture DNS
- Servizi bloccati
- Client censiti
- Configurazioni DNS
- Configurazioni DHCP
- Temi
Prerequisiti
Ci sono vari modi possibili per installare adguardhome-sync:
- Tramite un container Docker
- sarà quindi necessario avere una macchina con Docker
- Come eseguibile su Linux o su Windows
Non tratterò in questa guida l'installazione su Windows, in quanto la trovo poco sensata. Sarebbe uno spreco usare una macchina Windows solamente per svolgere questo compito, e non sarebbe ottimale nemmeno farlo svolgere ad una macchina Windows che ha molti altri task da elaborare.
Ad ogni modo, per configurare adguardhome-sync è necessario che tutte le istanze di AdGuard da gestire siano state installate e che sia stata seguita la procedura di installazione iniziale.
Creazione del file di configurazione
Creare una cartella adguardhome-sync con un file adguardhome-sync.yaml al suo interno, sulla macchina Docker o sulla macchina Linux, a seconda della tipologia di installazione scelta. Nei comandi seguenti questa cartella si trova in /home/firenetwork/adguardhome-sync
Modificare il file adguardhome-sync.yaml appena creato seguendo il seguente formato
# indicare ogni quanto eseguire la sincronizzazione, usando la sintassi CRON
cron: "0 */2 * * *"
# impostare a true per eseguire una sincronizzazione appena si avvia il container
runOnStart: true
# impostare a true se al verificarsi di un errore il programma deve continuare la sincronizzazione e loggare l'errore
continueOnError: false
origin:
url: http://192.168.1.2:3000 # url dell'istanza AdGuard da cui copiare i parametri (compresa la porta)
insecureSkipVerify: false # impostare a true per saltare la verifica TLS
username: # indicare l'username per autenticarsi su AdGuard
password: # indicare la password per autenticarsi su AdGuard
replicas:
# ripetere per ogni istanza di AdGuard che deve ricevere gli aggiornamenti
- url: http://192.168.0.27 # url dell'istanza AdGuard che deve ricevere gli aggiornamenti
username: # indicare l'username per autenticarsi su AdGuard
password: # indicare la password per autenticarsi su AdGuard
# Questa sezione è relativa alla pagina web di gestione del servizio. Se lasciata abilitata, sarà possibile monitorare lo stato della sincronizzazione accedendo tramite browser web all'IP del servizio, con la porta indicata di seguito.
api:
port: 8080
# configurando username e password, per accedere alla pagina web sarà necessario autenticarsi
username: # indicare l'username per autenticarsi sulla pagina di stato
password: # indicare la password per autenticarsi sulla pagina di stato
darkMode: true # impostare a false per passare al tema chiaro
# Opzionalmente, disabilitare le parti della configurazione che si desidera non sincronizzare
features:
generalSettings: true
queryLogConfig: true
statsConfig: true
clientSettings: true
services: true
filters: true
dhcp:
serverConfig: true
staticLeases: true
dns:
serverConfig: true
accessLists: true
rewrites: trueOpzione 1: Container Docker
Eseguire il seguente comando docker run modificando, opzionalmente, la porta dell'host (quella a sinistra dei due punti) ed indicando il path corretto al file adguardhome-sync.yaml creato in precedenza
docker run -d \
--name=adguardhome-sync \
-p 8080:8080 \
-v /home/firenetwork/adguardhome-sync/adguardhome-sync.yaml:/config/adguardhome-sync.yaml \
--restart unless-stopped \
ghcr.io/bakito/adguardhome-sync:latestIn alternativa è possibile usare il seguente file docker-compose.yml per creare il container di Docker.
---
version: "2.1"
services:
adguardhome-sync:
image: ghcr.io/bakito/adguardhome-sync
container_name: adguardhome-sync
command: run --config /config/adguardhome-sync.yaml
volumes:
- /home/firenetwork/adguardhome-sync/adguardhome-sync.yaml:/config/adguardhome-sync.yaml
ports:
- 8080:8080
restart: unless-stoppedOpzione 2: Installazione su Linux
(testato con Ubuntu Server 24.04)
Spostarsi nella cartella adguardhome-sync creata precedentemente (quella dove si è creato il file adguardhome-sync.yaml)
cd /home/firenetwork/adguardhome-syncScaricare l'ultima versione di adguardhome-sync (sostituire il link con quello dell'ultima release disponibile nella pagina delle release)
sudo wget https://github.com/bakito/adguardhome-sync/releases/download/v0.7.6/adguardhome-sync_0.7.6_linux_amd64.tar.gzScompattarlo
sudo tar xvf adguardhome-sync_0.7.6_linux_amd64.tar.gzCancellare il file compresso appena scompattato
sudo rm adguardhome-sync_0.7.6_linux_amd64.tar.gzCreare il file del servizio di adguardhome-sync (in questo esempio userò systemd)
sudo nano /etc/systemd/system/adguardhome-sync.serviceCompilarlo come segue
[Unit]
Description = AdGuardHome Sync
After = network.target
[Service]
ExecStart = /home/firenetwork/adguardhome-sync/adguardhome-sync --config /home/firenetwork/adguardhome-sync/adguardhome-sync.yaml run
[Install]
WantedBy = multi-user.target- cambiare il path di ExecStart con il percorso in cui è presente l'eseguibile di adguardhome-sync, scaricato e scompattato nei passaggi precedenti.
- cambiare il path di --config indicando il percorso del file adguardhome-sync.yaml creato nel capitolo precedente.
Installare ed avviare il servizio, poi controllarne lo stato
sudo systemctl enable adguardhome-sync.service
sudo systemctl start adguardhome-sync.service
sudo systemctl status adguardhome-sync.serviceControllare lo stato della sincronizzazione
Ora che adguardhome-sync è installato, configurato ed avviato, se nel file di configurazione è stata abilitata la sezione api, sarà possibile accedere alla pagina di status da cui monitorare lo stato della sincronizzazione.

E ora?
Ora che hai messo in comunicazione insieme più istanze di AdGuard, puoi censirle entrambe come server DNS della tua rete, oppure puoi metterle in load balancing con NGINX... L'idea non ti alletta?
Ora che hai messo in sincronizzaizone più istanze di AdGuard, puoi creare un Load Balancing DNS con NGINX!
