Last active 1 month ago

Guide simple : configurer AdGuard Home (DNS + blocage pubs)

adguard_config.md Raw

Guide simple : configurer AdGuard Home (DNS + blocage pubs)

  • Config Docker + DoH

Ce guide explique comment installer et configurer AdGuard Home pour un réseau domestique ou un petit serveur, avec une configuration solide, rapide et fiable.
Objectifs :

  • Bloquer pubs/trackers via DNS
  • Utiliser des DNS amont modernes (DoH = DNS over HTTPS)
  • Garder une config simple à maintenir
  • (Optionnel) Split-DNS pour accéder à des services locaux avec le même domaine
  • Check Command

1) Concepts rapides

AdGuard Home, c’est quoi ?

  • Un serveur DNS local : tes appareils l’utilisent comme DNS.
  • AdGuard filtre les domaines (listes, règles) et met en cache les réponses.
  • Si un domaine n’est pas bloqué, AdGuard le résout via des DNS amont (“upstream”).

DoH (DNS over HTTPS), c’est quoi ?

  • DNS classique : requêtes en clair sur UDP/TCP 53.
  • DoH : requêtes DNS envoyées dans HTTPS (port 443), chiffré.
  • Avantages : confidentialité sur le réseau, moins de blocages sur certains réseaux, config cohérente.

2) Installation Docker (recommandé)

Crée un dossier de travail :

mkdir -p /opt/adguardhome/{work,conf}
cd /opt/adguardhome

Option A — Mode host (souvent le plus simple pour un DNS)

docker-compose.yml :

services:
  adguardhome:
    image: adguard/adguardhome:latest
    container_name: adguardhome
    network_mode: host
    volumes:
      - ./work:/opt/adguardhome/work
      - ./conf:/opt/adguardhome/conf
    restart: unless-stopped

Démarrer :

docker compose up -d

Accès à l’assistant (setup) :

  • http://IP_DU_SERVEUR:3000

En mode host, AdGuard écoute directement sur la machine (DNS sur 53, etc.).

Option B — Mode “bridge” (si tu préfères mapper les ports)

docker-compose.yml :

services:
  adguardhome:
    image: adguard/adguardhome:latest
    container_name: adguardhome
    ports:
      - "3000:3000/tcp"   # setup
      - "53:53/tcp"
      - "53:53/udp"
      - "80:80/tcp"
      - "443:443/tcp"
    volumes:
      - ./work:/opt/adguardhome/work
      - ./conf:/opt/adguardhome/conf
    restart: unless-stopped

3) Vérifier que le port DNS 53 est libre

Sur Linux, le port 53 peut déjà être pris (ex: systemd-resolved, dnsmasq).

sudo ss -lntup | grep -E ':(53)\b'
sudo ss -lnup  | grep -E ':(53)\b'

S’il y a un service sur :53, il faut le désactiver ou changer sa config, sinon AdGuard ne pourra pas écouter.


4) Configuration dans l’assistant (premier lancement)

Dans l’UI de setup :

  • Interface web admin : IP du serveur + port (souvent 3000 au début)
  • Serveur DNS :
    • Interface : “toutes les interfaces” (ou l’IP LAN si tu veux limiter)
    • Port : 53

Une fois terminé, l’UI peut passer sur http://IP:80 ou https://IP:443 selon ton choix.


5) Config DNS “solide et rapide” (tout-DoH)

Dans l’UI : Paramètres → Paramètres DNS → Serveurs DNS amont

Upstream DoH recommandés (simples et efficaces)

Utilise 2 upstream max (plus que 2 = moins prévisible) : exemple avec ces bon dns

  • Cloudflare DoH : https://cloudflare-dns.com/dns-query
  • Quad9 DoH : https://dns.quad9.net/dns-query

Upstream

https://cloudflare-dns.com/dns-query
https://dns.quad9.net/dns-query

Bootstrap DNS

Le bootstrap sert à résoudre les noms des endpoints DoH au démarrage :

1.1.1.1
9.9.9.9

Fallback DNS

Secours si les upstream ne répondent pas :

1.1.1.1
9.9.9.9

Mode upstream (important)

Selon ta version, tu peux voir plusieurs modes :

  • parallel : interroge plusieurs upstream en même temps, garde le premier → très réactif
  • fastest_addr : choisit souvent la route la plus rapide
  • load_balance : répartit les requêtes entre les upstream

Recommandation :

  • parallel (si dispo) sinon load_balance.

6) Mettre le DNS du réseau sur AdGuard

Le plus propre : configurer le DHCP du routeur (ou contrôleur Unifi) pour annoncer :

  • DNS primaire : IP d’AdGuard (ex: 192.168.1.2)
  • DNS secondaire : optionnel (un public), mais idéalement garder AdGuard seul si tu veux un filtrage garanti.

Ensuite, renouvelle DHCP sur les clients (ou redémarre).

Vérifier côté client :

  • Windows :
    ipconfig /all
    
  • Linux :
    cat /etc/resolv.conf
    

7) Split-DNS (optionnel) : même domaine dedans/dehors

Utile si tu as :

  • un reverse proxy (Nginx Proxy Manager, Traefik…)
  • des domaines publics via Cloudflare/Internet
  • et tu veux qu’en LAN le domaine pointe sur une IP locale

Dans AdGuard : Filtres → Réécritures DNS (DNS rewrites)

Exemples :

  • prox.exemple.com192.168.1.10 (ton proxy local)
  • app.exemple.com192.168.1.10

Avantage : en LAN, tu évites le “hairpin NAT” et tu obtiens souvent plus de stabilité.


8) Dépannage rapide

“No such host” / Docker ne peut pas pull

Si la machine ne résout plus :

getent hosts registry-1.docker.io
cat /etc/resolv.conf

Tester AdGuard

Depuis un client :

dig @IP_ADGUARD google.com +short

Voir qui répond sur 53

sudo ss -lntup | grep -E ':(53)\b'
sudo ss -lnup  | grep -E ':(53)\b'

Vider le cache DNS

  • Windows :
    ipconfig /flushdns
    
  • Linux (varie selon le système) :
    • parfois rien à faire si pas de cache local
    • ou redémarrer le service DNS local si présent

9) Exemple de bloc YAML (si tu configures via fichier)

Dans AdGuardHome.yaml, sections typiques :

upstream_dns:
  - https://cloudflare-dns.com/dns-query
  - https://dns.quad9.net/dns-query

bootstrap_dns:
  - 1.1.1.1
  - 9.9.9.9

fallback_dns:
  - 1.1.1.1
  - 9.9.9.9

upstream_mode: parallel
fastest_timeout: 1s

Après modification :

docker restart adguardhome

Checks commande shell

Santé du conteneur

docker ps --filter name=adguardhome
docker logs --tail=200 adguardhome

Vérifier que le DNS écoute bien (53 TCP/UDP)

ss -lntup | grep -E ':(53)\b'
ss -lnup  | grep -E ':(53)\b'

Vérifier la config (YAML) : upstream / mode / rewrites

grep -nE 'upstream_dns:|bootstrap_dns:|fallback_dns:|upstream_mode:|rewrites:|rewrites_enabled:' /home/docker/adguard/conf/AdGuardHome.yaml
nl -ba /home/docker/adguard/conf/AdGuardHome.yaml | sed -n '15,80p'

Tester la résolution DNS via AdGuard

dig @192.168.32.150 google.fr +short
dig @192.168.32.150 registry-1.docker.io +short

Tester le DoH (indirectement)

Check si upstream sont bien des URLs DoH dans le YAML :

grep -n "https://.*dns-query" /home/docker/adguard/conf/AdGuardHome.yaml

Voir les rewrites actifs (split-DNS)

grep -n "domain:" /home/docker/adguard/conf/AdGuardHome.yaml

Vérifier que la machine utilise bien AdGuard (optionnel)

cat /etc/resolv.conf
getent hosts google.fr

10) Checklist “config propre”

  • AdGuard écoute sur :53 (UDP+TCP) et personne d’autre ne l’ocupe
  • Les clients utilisent AdGuard en DNS (DHCP routeur)
  • Upstreams en DoH (2 max) + bootstrap + fallback
  • Mode upstream = parallel/fastest_addr/load_balance selon version
  • (Optionnel) Split-DNS pour domaines internes
  • Tests dig OK

Bon DNS 🙂