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.

Condividi
Sincronizzare più istanze di AdGuard Home

Non hai ancora installato AdGuard Home?
Non ti preoccupare, ho scritto un articolo intero su come fare!

Vai all'articolo

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
❕
Alcuni dei passaggi di seguito illustrati sono tratti direttamente dal readme presente sulla repository GitHub del progetto.

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: true
💡
Se durante la configurazione guidata di AdGuard è stata indicata una porta di management diversa dalla 3000, indicarla nel file di configurazione.

Opzione 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:latest

In 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-stopped

Opzione 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-sync

Scaricare 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.gz

Scompattarlo

sudo tar xvf adguardhome-sync_0.7.6_linux_amd64.tar.gz

Cancellare il file compresso appena scompattato

sudo rm adguardhome-sync_0.7.6_linux_amd64.tar.gz

Creare il file del servizio di adguardhome-sync (in questo esempio userò systemd)

sudo nano /etc/systemd/system/adguardhome-sync.service

Compilarlo 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.service

Controllare 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.

Schermata principale della pagina di adguardhome-sync
Schermata principale della pagina di adguardhome-sync

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!

Vai all'articolo