Mini-PC étiqueté AdGuard Home relié par Ethernet à un routeur, avec tablette, smartphone et téléviseur dans un salon.

AdGuard Home sur Linux : installer avec Docker Compose et bloquer les pubs sur tout le réseau

User avatar placeholder
Écrit par Vincent

Mis à jour le 23 septembre 2026

AdGuard Home est un serveur DNS libre (licence GPL-3.0) et gratuit qui bloque la publicité et les traqueurs pour tous les appareils de votre réseau, sans rien installer sur chacun d’eux. Contrairement à Pi-hole, il intègre nativement le DNS chiffré, le contrôle parental et la recherche sécurisée forcée. En Docker Compose sur Linux, il s’installe en vingt minutes ; la vraie difficulté est de faire accepter son adresse par votre box.

L’essentiel
Image : adguard/adguardhome (AdGuard Home v0.107.79, publiée le 18 août 2026)
Mode réseau : host, pour voir les vraies IP des appareils et pouvoir activer le DHCP
Freebox : DNS personnalisés dans le DHCP de la box, IPv6 compris
Livebox 4, 5 et 6 : DNS non modifiable selon les sources communautaires, passage par le DHCP d’AdGuard Home
Vérifié le 23 septembre 2026 · fichiers Compose validés par docker compose config

Les étapes en bref. 1. Libérer le port 53. 2. Lancer AdGuard Home en network_mode: host. 3. Passer l’assistant sur le port 3000, en écoutant sur toutes les interfaces. 4. Choisir des DNS chiffrés en amont et lever la limite de débit. 5. Faire distribuer son adresse par la box (Freebox) ou par son propre DHCP (Livebox). 6. Vérifier avec dig.

AdGuard Home ou Pi-hole ? Les deux bloquent aussi bien au niveau DNS. AdGuard Home réunit tout dans un seul programme ; Pi-hole s’assemble brique par brique. Le comparatif détaillé est dans notre guide d’installation de Pi-hole avec Docker Compose.

Prérequis

Il faut une machine Linux allumée en permanence (mini-PC, Raspberry Pi, serveur, machine virtuelle) avec Docker et Docker Compose, installés comme dans notre guide Docker pour Debian, Ubuntu, Fedora, Arch et openSUSE.

Condition Pourquoi Vérification
IP fixe réglée sur la machine elle-même Tout le réseau va l’utiliser comme DNS ; une réservation dans la box disparaît si vous coupez le DHCP de la box ip -4 addr show : dynamic signale une adresse obtenue par DHCP
Port 53 libre Port du service DNS Étape 1
Accès à l’administration de la box Pour changer le DNS distribué ou couper le DHCP Étape 5

Les commandes docker sont écrites sans sudo, ce qui suppose que votre utilisateur appartient au groupe docker.

Étape 1 – Libérer le port 53

Sur Ubuntu, et sur Fedora depuis la version 33, systemd-resolved occupe déjà le port 53 avec son « stub listener » en 127.0.0.53. Quelle que soit votre distribution, vérifiez :

# Lister les processus qui écoutent sur le port 53
sudo ss -tulpn | grep ':53 '

Aucune sortie : passez à l’étape 2. Si systemd-resolved apparaît, téléchargez d’abord l’image, tant que la machine résout encore les noms :

# Par précaution : récupérer l'image tant que la résolution DNS de l'hôte fonctionne
docker pull adguard/adguardhome

Appliquez ensuite la procédure officielle d’AdGuard. La ligne DNS=127.0.0.1 est nécessaire selon la documentation : sans elle, le serveur de noms resterait 127.0.0.53, qui ne répond plus une fois le stub listener désactivé.

Avertissement. Ces commandes modifient la résolution DNS de la machine. Gardez /etc/resolv.conf.backup pour revenir en arrière.

# Créer le dossier de configuration de systemd-resolved si besoin
sudo mkdir -p /etc/systemd/resolved.conf.d

# Désactiver le stub listener et déclarer 127.0.0.1 comme serveur DNS
printf '[Resolve]\nDNS=127.0.0.1\nDNSStubListener=no\n' | sudo tee /etc/systemd/resolved.conf.d/adguardhome.conf

# Utiliser le resolv.conf généré par systemd-resolved
sudo mv /etc/resolv.conf /etc/resolv.conf.backup
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

# Appliquer
sudo systemctl reload-or-restart systemd-resolved

Relancez sudo ss -tulpn | grep ':53 ' : systemd-resolved ne doit plus apparaître.

Étape 2 – Écrire le fichier compose.yaml

En mode bridge, celui de Docker par défaut, AdGuard Home ne voit qu’une adresse du type 172.17.0.1 pour tous vos appareils. La documentation officielle impose network_mode: host pour voir les IP d’origine et pour utiliser le serveur DHCP, indispensable aux abonnés Livebox. Le réseau macvlan de certains tutoriels complique tout : selon la documentation Docker, un conteneur macvlan ne peut pas communiquer directement avec l’hôte.

mkdir -p ~/adguardhome && cd ~/adguardhome
nano compose.yaml
# compose.yaml — AdGuard Home en mode réseau host
services:
  adguardhome:
    image: adguard/adguardhome:latest
    container_name: adguardhome
    network_mode: host
    volumes:
      - ./work:/opt/adguardhome/work   # données : journal des requêtes, statistiques, listes
      - ./conf:/opt/adguardhome/conf   # configuration : AdGuardHome.yaml
    restart: unless-stopped

Aucune section ports: : en mode host, le conteneur partage la pile réseau de la machine. Ce mode ne fonctionne que sur un hôte Linux, pas sous Docker Desktop. Le fichier le plus répandu sur le web, y compris dans l’aperçu IA de Google, commence par version: "3.8" et publie les ports 67 et 68 en bridge : les versions récentes de Compose signalent the attribute version is obsolete, et le DHCP ne fonctionne pas en bridge.

Pare-feu. En mode host, aucune règle NAT de Docker n’est créée : ce sont vos règles qui s’appliquent. Avec UFW en refus par défaut, ouvrez depuis le réseau local les ports 53, 3000, le port d’administration choisi à l’étape 3, et 67/udp si vous activez le DHCP. Par exemple sudo ufw allow from 192.168.1.0/24 to any port 53, avec votre propre sous-réseau, plus sudo ufw allow in on tailscale0 to any port 53 si vous utilisez Tailscale. Détails dans notre guide du pare-feu UFW.

Étape 3 – Premier lancement et assistant de configuration

docker compose up -d
docker compose logs -f   # Ctrl+C pour quitter l'affichage des journaux

Ouvrez http://IP-DE-LA-MACHINE:3000. L’assistant demande deux interfaces d’écoute et deux ports.

Écran de l'assistant AdGuard Home : choix de l'interface et du port pour l'interface d'administration et pour le serveur DNS
Capture officielle du projet AdGuard Home — adguard-dns.io

Admin Web Interface. Le port proposé est 80. Si Nginx Proxy Manager ou un autre serveur web tourne sur la machine, choisissez par exemple 8080 : en mode host, les deux se disputeraient réellement le port 80.

DNS server. Gardez le port 53 et choisissez « toutes les interfaces », pas lo - 127.0.0.1. L’assistant n’accepte qu’un choix, or AdGuard Home doit répondre à la machine elle-même (étape 1), au réseau local, et éventuellement à l’IPv6 ou à Tailscale. Ce choix est sans risque tant que le port 53 n’est pas joignable depuis Internet, ce qui est le cas derrière une box sans redirection de port.

Créez l’utilisateur administrateur : l’interface bascule sur le port choisi. Les menus cités ensuite sont ceux de l’interface en anglais, tels que les nomme la documentation.

Étape 4 – Choisir les DNS en amont et lever la limite de débit

AdGuard Home transmet les requêtes non bloquées à des serveurs « en amont », réglés dans Settings → DNS settings. Le chiffrement s’y active sans logiciel supplémentaire, par le préfixe de l’adresse : tls:// (DNS-over-TLS), https:// (DNS-over-HTTPS), quic:// (DNS-over-QUIC). Choisissez des serveurs non filtrants : AdGuard Home filtre déjà, un second filtrage rendrait les blocages difficiles à diagnostiquer.

Fournisseur DNS-over-TLS DNS-over-HTTPS
Quad9 (Suisse) tls://dns10.quad9.net https://dns10.quad9.net/dns-query
DNS4EU (cofinancé par l’Union européenne) tls://unfiltered.joindns4.eu https://unfiltered.joindns4.eu/dns-query
AdGuard DNS tls://unfiltered.adguard-dns.com https://unfiltered.adguard-dns.com/dns-query

Adresses relevées le 23 septembre 2026 dans la liste officielle des fournisseurs d’AdGuard ; les exemples de sa page de configuration utilisent encore d’anciens noms en adguard.com. Les serveurs Bootstrap DNS, qui résolvent le nom de ces serveurs, n’acceptent que des adresses IP.

Limite de débit. Par défaut, AdGuard Home accepte 20 requêtes UDP par seconde et ignore les suivantes sans message. Le code source applique ce plafond par sous-réseau /24 : tous les appareils d’une box en 192.168.1.x se le partagent. La documentation indique qu’on peut désactiver cette limite sans risque si le serveur n’est pas joignable depuis Internet. Mettez-la à 0 dans les réglages de limite de débit de Settings → DNS settings.

Sans fournisseur tiers. Unbound résout les noms lui-même, installé sur l’hôte comme dans la section Unbound de notre article Pi-hole. En mode host, 127.0.0.1 désigne bien l’hôte : le serveur en amont s’écrit simplement 127.0.0.1:5335.

Étape 5 – Faire utiliser AdGuard Home par tout le réseau

Tant que vos appareils interrogent le DNS de la box, AdGuard Home ne filtre rien. La documentation le dit : quand un routeur ne permet pas de définir un DNS personnalisé, faire d’AdGuard Home le serveur DHCP du réseau peut aider.

Votre box Champ DNS dans le DHCP Méthode
Freebox (Révolution, Pop, Delta, Ultra) Oui, IPv4 et IPv6 (sources tierces) Remplacer les DNS distribués par la box
Livebox 4, 5, 6 Non (sources communautaires) Couper le DHCP de la box, activer celui d’AdGuard Home
Bbox, box SFR Non vérifié Chercher le champ ; à défaut, méthode Livebox
Infographie AdGuard Home : Freebox ou Livebox, ce qu'il faut régler pour que tout le réseau utilise le serveur DNS

Freebox : changer le DNS distribué

Dans Freebox OS, ouvrez Paramètres de la Freebox, passez en mode avancé, puis Réseau local → DHCP. Remplacez les serveurs DNS par l’IP de la machine AdGuard Home. Laissez le DHCP de la Freebox actif : un utilisateur rapporte que ces DNS ne sont plus distribués sinon. Reconnectez vos appareils pour qu’ils prennent le nouveau DNS sans attendre la fin de leur bail.

Ne laissez jamais l’adresse de la Freebox en DNS secondaire : les appareils l’interrogeraient une partie du temps, hors filtrage. En IPv6, la Freebox annonce son propre DNS ; dans Configuration IPv6, onglet DNS IPv6, forcez des serveurs personnalisés avec une adresse IPv6 stable de la machine (pas une adresse temporary de ip -6 addr show).

Livebox : passer par le DHCP d’AdGuard Home

Aucune documentation Orange ne traite le sujet, mais les sources communautaires concordent pour les Livebox 4, 5 et 6 : le DNS distribué par leur DHCP n’est pas modifiable. On coupe donc le DHCP de la Livebox et on confie ce rôle à AdGuard Home, qui s’annonce lui-même comme DNS.

Avertissement. Deux serveurs DHCP actifs sur le même réseau distribuent des adresses contradictoires. Coupez celui de la box au moment où vous activez celui d’AdGuard Home, et gardez un ordinateur en IP fixe pour pouvoir revenir à l’interface de la box.

Dans Settings → DHCP settings, choisissez l’interface, la passerelle (l’adresse de la Livebox), le masque et une plage qui ne recouvre pas l’IP de la machine. AdGuard Home s’y désigne par défaut comme DNS, avec des baux de 24 heures.

Décodeur TV Orange. Sans la Livebox comme serveur DHCP, deux tutoriels communautaires de 2024 rapportent une erreur ou un écran noir sur le décodeur, corrigés par l’option DHCP n° 125. Si la télévision compte chez vous, n’appliquez pas cette méthode sans cette option, ou filtrez d’abord appareil par appareil (DNS manuel).

Vérifier que tout fonctionne

Depuis un appareil du réseau, interrogez AdGuard Home sur un domaine publicitaire connu :

# Interroger directement AdGuard Home
dig +short doubleclick.net @IP-DE-LA-MACHINE

Si le domaine figure dans vos listes de blocage, la réponse est l’adresse nulle, comportement par défaut documenté par AdGuard :

0.0.0.0

Puis vérifiez que l’appareil l’utilise sans qu’on le lui impose :

# Sans @ : l'appareil passe par le DNS que le réseau lui a distribué
dig +short doubleclick.net

La même réponse confirme que le réseau distribue AdGuard Home. Sous Windows, nslookup doubleclick.net IP-DE-LA-MACHINE joue le même rôle. Le journal des requêtes doit afficher les IP réelles de vos appareils, pas une adresse 172.x.

Infographie du trajet d'une requête DNS avec AdGuard Home en Docker Compose : appareils, DHCP, filtrage, DNS chiffré en amont et noms locaux

Donner des noms locaux à vos services

Si vos services passent par Nginx Proxy Manager, une seule réécriture suffit, dans Filters → DNS rewrites : domaine *.home.arpa, réponse l’IP de la machine NPM. Créez ensuite un hôte proxy par service (photos.home.arpa…). Le joker couvre tous les sous-domaines, mais pas home.arpa lui-même.

Le domaine home.arpa est réservé aux réseaux domestiques par la RFC 8375 : aucune collision possible avec un domaine public, ni avec le suffixe .lan que le DHCP d’AdGuard Home donne aux appareils. Revers : Let’s Encrypt ne délivre pas de certificat pour ce domaine.

Filtrer différemment selon l’appareil

Dans Settings → Client settings, un appareil s’identifie par son IP, une plage CIDR ou, si AdGuard Home fait office de DHCP, son adresse MAC. Chacun reçoit ses réglages : services bloqués, recherche sécurisée forcée, contrôle parental, serveurs en amont. Le calendrier des services bloqués définit des pauses du blocage : pour autoriser les réseaux sociaux de 17 h à 21 h seulement, bloquez-les et déclarez une pause sur cette plage.

Éviter la panne unique et utiliser AdGuard Home à distance

Si la machine AdGuard Home s’arrête, plus aucun site ne s’ouvre. Mettre la box en DNS secondaire n’y change rien de bon : le filtrage deviendrait aléatoire. La solution est une seconde instance sur une autre machine, synchronisée avec l’outil communautaire adguardhome-sync. Par défaut, il synchronise aussi la configuration DHCP : désactivez-la, un seul serveur DHCP doit répondre.

Avec Tailscale sur Linux, vos appareils profitent du filtrage partout. Dans la console Tailscale, page DNS, ajoutez un serveur Custom avec l’IP Tailscale de la machine AdGuard Home et activez Override DNS servers. Sur la machine AdGuard Home elle-même :

# Ne modifie que ce réglage, sans toucher aux autres options du nœud
sudo tailscale set --accept-dns=false

Mettre à jour et sauvegarder

La mise à jour automatique est désactivée dans l’image Docker : on met à jour l’image. Chaque version publiée entre mai et août 2026 comporte des correctifs de sécurité.

cd ~/adguardhome
docker compose pull      # télécharger la nouvelle image
docker compose up -d     # recréer le conteneur avec cette image

Toute la configuration tient dans conf/AdGuardHome.yaml, qu’AdGuard Home réécrit pendant qu’il tourne : arrêtez le conteneur le temps de la copie. Les dossiers créés par Docker appartiennent à root, d’où sudo :

cd ~/adguardhome
docker compose stop
sudo tar czf ~/adguardhome-conf-$(date +%F).tar.gz conf
docker compose start

Désinstaller / revenir en arrière

Rendez d’abord le DNS au réseau, puis arrêtez le conteneur, sinon tous les appareils perdent leur résolution de noms.

  1. Sur la box : remettez les DNS d’origine et décochez les DNS IPv6 personnalisés (Freebox), ou réactivez le DHCP de la box et coupez celui d’AdGuard Home (Livebox).
  2. Laissez AdGuard Home tourner le temps que les appareils renouvellent leur bail (jusqu’à 24 heures), ou reconnectez-les.
  3. Arrêtez et supprimez le conteneur :
cd ~/adguardhome
docker compose down
  1. Si vous aviez modifié systemd-resolved, restaurez la configuration d’origine :
sudo rm /etc/systemd/resolved.conf.d/adguardhome.conf
sudo rm /etc/resolv.conf
sudo mv /etc/resolv.conf.backup /etc/resolv.conf
sudo systemctl reload-or-restart systemd-resolved

Avertissement. La commande suivante efface définitivement configuration, statistiques et journal des requêtes.

sudo rm -rf ~/adguardhome

Erreurs courantes

bind: address already in use sur le port 53 Un autre service occupe le port, le plus souvent systemd-resolved : reprenez l’étape 1. Sur le port 80, c’est un serveur web : changez le port d’administration dans la section http de conf/AdGuardHome.yaml, conteneur arrêté.

AdGuard Home ne bloque rien ou presque Si l’appareil n’apparaît pas dans le journal des requêtes, il n’utilise pas AdGuard Home : DNS IPv6 annoncé par la box, DNS sécurisé du navigateur (Firefox, Chrome) ou « DNS privé » d’Android réglé sur un fournisseur précis. S’il apparaît sans blocage, vérifiez qu’une liste est activée dans Filters → DNS blocklists. Un appareil garde aussi en cache les réponses déjà obtenues.

Plus aucun site ne s’ouvre quand AdGuard Home est arrêté C’est attendu s’il est le seul DNS du réseau : voir la seconde instance. Sur la machine elle-même, la panne survient aussi s’il n’écoute pas sur 127.0.0.1 après l’étape 1 : choisissez « toutes les interfaces ».

L’assistant réapparaît à chaque redémarrage AdGuard Home ne retrouve pas AdGuardHome.yaml. Vérifiez les deux lignes volumes: et lancez docker compose depuis le dossier qui contient compose.yaml.

Un site ne marche plus depuis l’installation Repérez le domaine bloqué dans le journal des requêtes et autorisez-le dans Filters → Custom filtering rules, par exemple @@||exemple.com^.

Mot de passe de l’interface perdu Générez un hachage bcrypt avec htpasswd. La documentation propose le paquet apache2, qui installerait un serveur web sur le port 80 ; préférez apache2-utils :

sudo apt install apache2-utils          # Debian, Ubuntu
sudo dnf install httpd-tools            # Fedora
htpasswd -B -C 10 -n admin              # demande le mot de passe deux fois

Conteneur arrêté, remplacez la valeur password de votre utilisateur dans la section users de conf/AdGuardHome.yaml par le hachage affiché après admin:.

FAQ

AdGuard Home est-il gratuit ? Oui. C’est un logiciel libre sous licence GPL-3.0, sans abonnement, à ne pas confondre avec les applications AdGuard payantes qui filtrent un seul appareil.

AdGuard Home est-il fiable ? AdGuard est-elle une société russe ? Il est maintenu activement : cinq versions entre mai et août 2026, toutes avec des correctifs de sécurité. L’éditeur, Adguard Software Limited, a été fondé en 2009 à Moscou et a son siège à Limassol, à Chypre. Le code est public, et vos requêtes partent vers les serveurs en amont que vous choisissez.

Quelle différence entre AdGuard Home et AdGuard DNS ? AdGuard Home est un logiciel que vous hébergez. AdGuard DNS est un service public qui filtre sans rien installer, par exemple aux adresses 94.140.14.14 et 94.140.15.15, mais vos requêtes passent alors par les serveurs d’AdGuard.

Peut-on l’installer sur un Raspberry Pi, un NAS, Proxmox ou Home Assistant ? Oui. AdGuard Home est publié pour ARM (ARMv6, ARMv7, 64 bits). Sur un NAS, vérifiez que le mode host est disponible avant de compter sur le DHCP. Sur Proxmox, la documentation présente la machine virtuelle comme une pratique recommandée pour Docker. Pour Home Assistant, un module communautaire maintenu par frenck existe, classé non officiel par AdGuard.

AdGuard Home bloque-t-il les publicités YouTube ? Non. Le dépôt officiel cite les publicités YouTube et Twitch, et les publications sponsorisées des réseaux sociaux, parmi ce qu’un bloqueur DNS ne peut pas bloquer : elles viennent des mêmes domaines que le contenu.

Quel est le bloqueur de publicité DNS le plus efficace ? À listes identiques, AdGuard Home et Pi-hole bloquent les mêmes domaines : l’efficacité dépend des listes. La différence tient aux fonctions intégrées, natives dans AdGuard Home.

Conclusion

AdGuard Home en Docker Compose tient en un fichier de dix lignes, à condition d’utiliser le mode réseau host. La vraie décision dépend de votre box : une Freebox accepte un DNS personnalisé, IPv6 compris ; une Livebox impose de confier le DHCP à AdGuard Home, avec l’option 125 si vous avez le décodeur TV. Une fois le filtrage en place, regroupez vos services derrière Nginx Proxy Manager avec des noms en home.arpa, et surveillez vos conteneurs avec Portainer.

Comment ces commandes ont été vérifiées

Élément Niveau Vérification
Fichier compose.yaml (mode host, deux volumes) Testé (validation) docker compose config (Docker 29.4.3, Compose v5.1.3) ; contre-épreuve : un fichier malformé est rejeté
Attribut version: obsolète Testé Avertissement the attribute version is obsolete avec Compose v5.1.3
Fichier adguardhome.conf écrit par printf Testé Relu avec od -c : trois lignes exactes
Filtre grep ':53 ' sur ss -tulpn Testé Port 53 occupé : détecté ; port libre : aucune sortie ; port 5353 : pas de faux positif
Règles UFW (sous-réseau et tailscale0) Testé (simulation) ufw --dry-run : règles TCP et UDP générées
Sauvegarde sudo tar Testé (cycle complet) Archive restaurée, diff -r identique
htpasswd -B -C 10 via apache2-utils Testé Sortie au format bcrypt $2y$10$ sur Debian
Procédure systemd-resolved, mode host, assistant sur le port 3000, DHCP, clients, réécritures, blocage 0.0.0.0 Conforme à la documentation officielle Base de connaissances AdGuard Home, consultée le 23/09/2026
Limite de débit (20 requêtes UDP/s par /24) Conforme à la documentation et au code source Page « Configuration » et module ratelimit de dnsproxy
Serveurs en amont, version v0.107.79, correctifs de sécurité Conforme aux sources officielles Liste des fournisseurs DNS d’AdGuard, journal des versions
Tailscale, macvlan, Fedora 33 Conforme aux documentations officielles tailscale.com, docs.docker.com, fedoraproject.org
Réglages Freebox et Livebox, décodeur TV Variable, sources communautaires skyminds.net, azurs.net, lafibre.info, communauté Orange, NAS-Forum, Jeedom, PC Astuces

Ce qui n’a pas été exécuté. Les éléments marqués « conforme à la documentation » (démarrage du conteneur, blocage effectif, commandes dig, DHCP, mise à jour, réglages de box) suivent la documentation officielle et les sources citées, sans avoir été exécutés sur une installation réelle pour cet article.

Sources officielles

Vincent

Vincent est le créateur de MémoLinux. Venu de Windows par curiosité, il est resté sur Linux pour sa logique et le plaisir de comprendre ce qui se passe sous le capot. Il documente ici les commandes et les procédures qu’il utilise lui-même, avec leurs sources officielles et leur date de vérification.

Laisser un commentaire