tuto adguard home sync 2 serveurs dns
  • 20 avril 2026
  • ComputaSYS
  • 0


Le service DNS est essentiel sur un réseau local : s’il s’arrête de répondre, votre accès à Internet est interrompu pour l’ensemble de vos équipements. Si vous utilisez AdGuard Home en tant que DNS sur votre réseau, voici comment assurer la haute disponibilité de ce service DNS.

Que ce soit lors de la mise à jour de votre serveur principal ou suite à une défaillance matérielle inattendue, disposer d’un serveur secondaire AdGuard Home configuré à l’identique permet d’assurer une continuité de service auprès des utilisateurs.

AdGuard Home, en tant que résolveur DNS et bloqueur de publicités, centralise l’ensemble du trafic de votre réseau. Si vous n’avez qu’une seule instance et que celle-ci redémarre ou tombe en panne, vos machines ne peuvent plus traduire les noms de domaine en adresses IP. Vous perdez l’accès à Internet sur vos machines.

La solution consiste à déployer une deuxième instance AdGuard Home. Toutefois, maintenir manuellement deux configurations identiques (listes de filtrage, réécritures DNS, listes blanches, clients persistants….) est une tâche chronophage. Personne n’a envie de gérer ça. C’est ici qu’intervient le projet open source adguardhome-sync, qui automatise ce processus de réplication entre plusieurs instances.

Ainsi, sur vos appareils du réseau, vous pouvez préciser comme DNS les adresses IP correspondantes à vos deux instances AdGuard Home.

Pour suivre ce tutoriel, vous devez disposer de deux instances AdGuard Home fonctionnelles : une principale (192.168.1.151 pour ma part) et une secondaire (192.168.1.160 pour ma part). Peu importe s’il s’agit d’instances sur Raspberry Pi, NAS, ou une autre plateforme.

La solution adguardhome-sync

adguardhome-sync est un outil écrit en Go conçu pour synchroniser la configuration d’une instance AdGuard Home principale (désignée comme l’origine) vers une ou plusieurs instances secondaires (désignées comme réplicas).

L’outil se connecte aux interfaces de programmation (API) de vos instances AdGuard Home. Il lit la configuration de l’origine et l’applique aux réplicas. La synchronisation prend en charge de nombreux éléments, dont :

Les paramètres généraux (protection, filtrage, navigation sécurisée).

Les listes de filtres (blocage et listes blanches).

Les règles de filtrage personnalisées.

Les réécritures DNS (DNS rewrites).

Les paramètres de configuration DNS en amont (Upstream DNS).

La configuration des clients persistants (Clients settings).

Configuration AdGuard Home Sync

Je vais commencer par évoquer la configuration de l’outil AdGuard Home Sync puisqu’elle sera identique peu importe la façon dont est déployée cette solution.

Créez un fichier adguardhome-sync.yaml. Ce fichier définira la source, la destination et les paramètres à synchroniser. Voici le code à insérer dans ce fichier :

# Fichier adguardhome-sync.yaml
# Synchronisation toutes les 10 minutes
cron: “*/10 * * * *”
runOnStart: true

# Serveur AdGuard Home source
origin:
url: “http://192.168.1.151:80”
username: “user_sync”
password: “MotDePasseA”

# Serveur AdGuard Home destination (réplica)
replica:
url: “http://192.168.1.160:80”
username: “user_sync”
password: “MotDePasseB”

# Ce que vous souhaitez synchroniser
features:
generalSettings: true
queryLogConfig: true
statsConfig: true
dns:
accessLists: true
serverConfig: true
rewrites: true
filters: true
clientSettings: true
services: true
dhcp:
serverConfig: false
staticLeases: false

Les paramètres de configuration disponibles et leur signification est spécifiée sur le GitHub de ce projet.

Remplacez les adresses IP, les identifiants et les mots de passe par ceux correspondants à vos instances. Le paramètre cron détermine la fréquence d’exécution de la tâche de synchronisation, ici, ce sera une vérification toutes les 10 minutes. Cette configuration permet de synchroniser les paramètres DNS, les listes, les clients ou encore les paramètres généraux. Les paramètres du serveur DHCP ne seront pas synchronisés, tout simplement parce que je n’en fais pas l’usage.

Dans le fichier ci-dessus, je vous invite à déclarer un nom d’utilisateur AdGuard Home dédié à la synchronisation. Même s’il n’est pas possible de limiter ses permissions, cela permet d’avoir un compte dédié à la synchronisation. Vous devez ensuite déclarer ce fichier dans la configuration d’AdGuard Home.

Pour cela, il est nécessaire de spécifier le hash Bcrypt du mot de passe que vous choisirez. Vous pouvez l’obtenir via cette page en ligne :

Ensuite, éditez le fichier de configuration d’AdGuard Home (pas celui de l’outil de synchronisation).

sudo nano /opt/AdGuardHome/AdGuardHome.yaml

Puis, déclarez ce nouvel utilisateur à la suite de l’utilisateur déjà existant. Voici un exemple :

users:
– name: adm_fb
password: $2a$10$oU4Zr36IWpVXjijP.x/54uFdFrze.eGEm2jfRt89
– name: user_sync
password: $2a$10$QqQiQTqKPgiPjgljfw/VeOeboRsPf4.54uFdFrzML.peGEm2

Enregistrez la configuration.

Installation AdGuard Home Sync

Dans la suite de cet article, deux méthodes d’installation seront présentées : avec Docker et directement sur un Raspberry Pi (Linux), sans Docker.

Docker Compose pour AdGuard Home Sync

Si vous utilisez déjà Docker pour exécuter AdGuard Home, alors vous pouvez lancer un autre conteneur avec AdGuard Home Sync. Nous allons préparer un fichier docker-compose.yml qui sera stocké sous /opt/docker-compose/adguardhome-sync.

Dans ce dossier, créez le fichier docker-compose.yml suivant :

services:
adguardhome-sync:
image: ghcr.io/bakito/adguardhome-sync:latest
container_name: adguardhome-sync
command: run –config /config/adguardhome-sync.yaml
volumes:
– ./adguardhome-sync.yaml:/config/adguardhome-sync.yaml:ro
restart: unless-stopped

Ce fichier indique à Docker de télécharger l’image officielle du projet et de monter votre fichier de configuration en lecture seule (ro). Pensez à créer le fichier adguardhome-sync.yaml (partie précédente de ce tutoriel) avec la configuration souhaitée.

Ci-dessous, une autre configuration adaptée dans le cas où un réseau MacVlan est utilisé pour le conteneur AdGuard Home. Dans mon tutoriel d’installation sur un NAS Synology, j’avais connecté mon AdGuard Home à deux conteneurs : un MacVlan et un Bridge, ce second réseau étant utilisé par le NAS pour contacter AdGuard Home (une restriction Docker empêcher la sollicitation sur l’IP MacVlan). Ainsi, dans cet exemple, le conteneur AdGuard Home Sync est lui aussi connecté à ce réseau, il devra donc contacter l’instance AdGuard Home via l’IP du bridge et non l’IP externe (soit 10.10.10.2 au lieu de 192.168.1.151 dans mon cas).

services:
adguardhome-sync:
image: ghcr.io/bakito/adguardhome-sync:latest
container_name: adguardhome-sync
command: run –config /config/adguardhome-sync.yaml
volumes:
– /volume1/docker/adguard-home-sync/adguardhome-sync.yaml:/config/adguardhome-sync.yaml:ro
restart: unless-stopped
networks:
– adguard_bridge

networks:
adguard_bridge:
external: true
name: adguard-home_adguard_bridge

Une fois votre configuration prête, enregistrez et lancez la construction du projet.

docker-compose up -d

Installation AdGuard Home Sync sur un Raspberry Pi

Parlons maintenant de l’installation sur un Raspberry Pi, sachant que la méthode évoquée ci-dessous s’applique à Linux d’une façon générale. Premièrement, récupérez le type d’architecture de votre matériel via cette commande :

uname -m

armv7l

Cela vous indique quelle est la version d’AdGuard Home Sync à télécharger. Ici, armv7l m’oriente vers la version armv7. Il ne reste plus qu’à télécharger l’archive avec wget, comme ceci :

wget https://github.com/bakito/adguardhome-sync/releases/download/v0.9.0/adguardhome-sync_0.9.0_linux_armv7.tar.gz

Puis, nous allons décompresser cette archive dans /opt/adguardhome-sync/, après avoir créé ce dossier.

Exécutez ces commandes :

sudo mkdir -p /opt/adguardhome-sync
sudo tar -xzf adguardhome-sync_0.9.0_linux_armv7.tar.gz -C /opt/adguardhome-sync/
ls -l /opt/adguardhome-sync/

total 8212
-rwxr-xr-x 1 adm_fb adm_fb 8377436 Feb 27 19:33 adguardhome-sync
-rw-rw-r– 1 adm_fb adm_fb 11336 Mar 6 2023 LICENSE
-rw-rw-r– 1 adm_fb adm_fb 14761 Feb 27 19:24 README.md

Créez le fichier de configuration de l’outil et collez celle définie précédemment.

sudo nano /opt/adguardhome-sync/adguardhome-sync.yaml

Puis, créez ce fichier pour créer un service associé à cet outil. Cela permettra de le démarrer, de le redémarrer, de voir son statut, etc.

sudo nano /opt/adguardhome-sync/adguardhome-sync.service

Collez ce code dans ce fichier :

[Unit]
Description = AdGuardHome Sync
After = network.target

[Service]
ExecStart = /opt/adguardhome-sync/adguardhome-sync –config /opt/adguardhome-sync/adguardhome-sync.yaml run

[Install]
WantedBy = multi-user.target

Cela permet d’appeler le binaire adguardhome-sync en ciblant notre fichier de configuration pour démarer l’outil.

Exécutez ces commandes pour mettre en place le service, activer son démarrage automatique puis le démarrer immédiatement.

sudo cp /opt/adguardhome-sync/adguardhome-sync.service /etc/systemd/system/
sudo systemctl enable adguardhome-sync.service
sudo systemctl start adguardhome-sync.service

Validez l’opération en affichant le statut du service :

sudo systemctl status adguardhome-sync.service

Vous pouvez aussi afficher les journaux de ce service :

sudo journalctl -u adguardhome-sync -n 50 -f

Alors, on fait un essai ?

Tester la configuration

En réalité, dès que le service démarre, il commence la synchronisation ! Il y a donc des chances pour que les données de votre AdGuard source soit déjà synchronisées sur votre réplica. Rappelez-vous que la synchronisation est effectuée toutes les 10 minutes. Vous pouvez aussi forcer la synchronisation en relançant le service :

sudo systemctl restart adguardhome-sync.service

Dans les journaux, vous devriez voir des événements mettant en évidence la synchronisation de la configuration.

Voici un extrait :

Un rapide tour sur l’interface Web des deux instances AdGuard Home permet de voir que la magie a opérée ! La configuration est parfaitement synchronisée entre les deux AdGuard Home.

La configuration des clients du réseau

Les deux instances AdGuard Home sont prêtes à répondre aux requêtes des clients en appliquant les mêmes consignes. Autrement dit, les listes de blocage seront les mêmes, les clients détectés, etc… Mais, n’oubliez pas un point important : vos clients doivent aussi être en mesure de contacter la seconde instance. Ici, il n’y a pas d’adresses IP partagées entre les deux AdGuard.

Vous devez donc :

Mettre à jour la configuration de votre serveur DHCP pour distributer deux adresses IP de DNS,

Mettre à jour la configuration de vos machines configurées en statique pour définir les deux adresses IP de DNS

Autrement dit, l’instance AdGuard Home principale est le DNS primaire, tandis que l’instance secondaire est le DNS secondaire. En cas de panne d’une instance, les appareils de votre réseau continueront d’avoir accès à Internet.

Note : si vous utilisez Tailscale pour utiliser votre AdGuard Home à distance, vous pouvez joindre à votre réseau le second AdGuard Home et l’ajouter à la liste des DNS.

Conclusion

La mise en place d’un second serveur AdGuard Home revient à mettre en place un second serveur DNS, et cela me semble indispensable pour la pérenité de l’accès Internet depuis votre réseau local. Avec l’outil adguardhome-sync, la gestion de cette redondance est vraiment simplifiée, le seul bémol étant la nécessité de spécifier des identifiants en clair dans le fichier de configuration.

FAQ – Synchronisation AdGuard Home

Qu’est-ce qu’adguardhome-sync ?

C’est un outil open source en ligne de commande (souvent utilisé via Docker) qui permet de copier la configuration d’une instance AdGuard Home vers une ou plusieurs autres instances afin d’assurer une redondance.

Pourquoi ne pas configurer le second serveur manuellement ?

La configuration manuelle demande de reproduire chaque changement (ajout d’un domaine bloqué, création d’une règle DNS locale, ajout d’un client, etc.) sur le deuxième serveur. Cela prend du temps et augmente le risque de divergence entre les deux serveurs. La flemme quoi !

Faut-il installer adguardhome-sync sur le serveur principal ou secondaire ?

L’outil peut être installé sur n’importe quelle machine du réseau, à condition qu’elle puisse communiquer avec les deux instances AdGuard Home via HTTP/HTTPS.

À quelle fréquence la synchronisation s’exécute-t-elle ?

La fréquence dépend de la tâche planifiée (cron) définie dans le fichier de configuration. Elle peut s’exécuter toutes les minutes, toutes les heures, ou selon vos besoins spécifiques. Ici, nous avons déterminé une synchronisation toutes les 10 minutes.

L’outil peut-il synchroniser plus de deux instances ?

Oui. L’outil gère une instance d’origine et accepte une liste de plusieurs instances considérés comme des réplicas. Il appliquera la configuration de l’origine à tous les réplicas définis. Il y a un système d’index pour spécifier plusieurs serveurs réplicas, comme le mentionne la documentation sur GitHub.

Que se passe-t-il si le serveur principal est hors ligne pendant une synchronisation ?

Si adguardhome-sync n’arrive pas à joindre l’instance principale, il affichera une erreur dans ses journaux et ne modifiera pas la configuration du serveur secondaire. Les données existantes sur le serveur secondaire sont conservées. C’est tout l’intérêt, et surtout, c’est une synchronisation unidirectionnelle.

Peut-on exclure certains paramètres de la synchronisation ?

Oui, le bloc features du fichier YAML permet d’activer ou de désactiver la synchronisation des règles DNS, des listes de filtrage, des paramètres clients, etc. C’est du sur-mesure selon vos préférences.

Les statistiques et l’historique des requêtes sont-ils synchronisés ?

Non. adguardhome-sync gère uniquement la configuration. L’historique des requêtes DNS et les statistiques de blocage restent propres à chaque instance, en fonction du trafic qu’elles traitent réellement.

Ingénieur système et réseau, cofondateur d’IT-Connect et Microsoft MVP “Cloud and Datacenter Management”. Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.



Source link

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *