🛡️ LAB : Maîtrise du flux DNS et Sécurisation avec AdGuard Home
_ _ ___ _
/_\ __| | / _ \_ _ __ _ _ __ __| |
//_\\ / _` |/ /_\/ | | |/ _` | '__/ _` |
/ _ \ (_| / /_\\| |_| | (_| | | | (_| |
\_/ \_/\__,_\____/ \__,_|\__,_|_| \__,_|
Rôle : Administrateur Réseau
Mission : AdGuard Home est un DNS sinkhole réseau. Il intercepte toutes les requêtes DNS du réseau local et redirige celles pointant vers des domaines de publicité, de trackers et de malwares vers un « puits noir » (sinkhole), empêchant les appareils d'établir une connexion avec ces serveurs. Le filtrage s'applique au niveau DNS — avant même que le navigateur ou l'application n'envoie une seule requête HTTP — ce qui protège l'ensemble des appareils connectés (PC, smartphones, tablettes, téléviseurs, IoT) sans nécessiter d'installation logicielle sur chaque appareil.
📚 Documentation : https://github.com/AdguardTeam/AdguardHome
L'intérêt technique 🎯
- Visibilité Réseau (Layer 7) : Intercepter, analyser et filtrer le trafic DNS de l'ensemble du réseau. Chaque requête est journalisée — on voit exactement quel appareil communique avec quel domaine.
- Performance (Caching) : AdGuard Home conserve en cache les réponses DNS. Les requêtes suivantes sont servies localement en ~1ms au lieu de ~20ms via un résolveur distant. Les domaines bloqués ne génèrent aucun trafic réseau.
- Sécurité (Première ligne de défense) : Les domaines malveillants, de phishing ou de C2 (Command & Control) sont bloqués avant même que le pare-feu n'ait à traiter le paquet IP. Un appareil IoT compromis qui tente de contacter son serveur C2 sera bloqué au niveau DNS.
- Contrôle DHCP : En reprenant le rôle de serveur DHCP de la box FAI, AdGuard Home garantit que chaque appareil du réseau utilise exclusivement le DNS filtrant. Aucun contournement possible.
🛠️ Architecture du Lab
- Matériel : Raspberry Pi 3B
- OS : Raspberry Pi OS Lite (sans interface graphique, dédié à la performance réseau)
- Position : Serveur DNS et DHCP unique du réseau LAN, en remplacement des services de la box FAI
- Réseau :
192.168.1.0/24 - Passerelle FAI :
192.168.1.254 - IP Raspberry Pi :
192.168.1.250
Schéma de flux DNS
┌──────────────────────────────────────────┐
│ Raspberry Pi (192.168.1.250) │
│ │
Appareils LAN ────► │ AdGuard Home │
(DHCP :53) │ ├── Filtrage DNS (pubs/trackers/C2) │
│ ├── Cache local (~1ms) │
│ ├── DHCP Server (.50 → .150) │
│ └── Upstream → Unbound :5335 │
│ └── Serveurs racine │
└──────────────────────────────────────────┘
│
Box FAI (192.168.1.254)
Conditional forwarding
(.bytel.fr / .lan uniquement)
💡 Note : les résolutions DNS en amont sont gérées par Unbound (résolveur récursif local) depuis avril 2026. Voir la fiche dédiée : LAB Unbound
🚀 Installation
Pré-requis : Raspberry Pi OS Lite
📚 Ressources :
- Raspberry Pi OS Lite : https://www.raspberrypi.com/software/operating-systems/
- Raspberry Pi Imager : https://www.raspberrypi.com/software/
La version Lite (sans bureau graphique) est impérative pour un serveur DNS. Pas d'interface graphique inutile qui consomme de la RAM et du CPU — le Pi est dédié à la performance réseau.
Lancer Raspberry Pi Imager pour flasher la carte micro SD.
Personnaliser la configuration : hostname (adguard-pi), user admin, mot de passe, et activer le SSH (indispensable pour l'administration à distance).

Insérer la carte micro SD dans le Pi, le brancher en Ethernet à la box, et le démarrer.
1. Attribution d'une IP statique
Avant d'installer quoi que ce soit, il faut figer l'adresse IP du Pi. Un serveur DNS dont l'IP changerait rendrait tout le réseau inaccessible.
Sur l'interface de la box (192.168.1.254) → Réglages avancés → DHCP → Attribution d'adresse IP statique.
Pour identifier le Pi dans la liste des appareils, chercher le hostname adguard-pi ou une adresse MAC commençant par b8:27:eb ou dc:a6:32 (préfixes OUI du fabricant Raspberry Pi Foundation).

Débrancher/rebrancher le câble Ethernet pour forcer le renouvellement du bail.
Vérification : ping 192.168.1.250
2. Installation d'AdGuard Home (SSH)
Connexion SSH au Pi :
ssh user@192.168.1.250
Lancer le script d'installation officiel :
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
⚠️ Sécurité : configurer également une IP statique côté OS (en plus du bail statique de la box), pour garantir la stabilité même en cas de redémarrage de la box.
Lancer sudo nmtui pour configurer l'interface réseau :

Passer l'IPv4 en Manuel, renseigner l'adresse IP, la passerelle et le DNS en 127.0.0.1 (le Pi utilisera son propre service AdGuard pour résoudre les noms). Valider et redémarrer : sudo reboot
Installation de Btop pour le monitoring des ressources en temps réel :
sudo apt update && sudo apt install btop -y

3. Configuration initiale (Interface Web)
Ouvrir un navigateur sur http://192.168.1.250:3000 pour accéder à l'assistant de configuration.
Configuration des interfaces d'écoute :
⚠️ Le serveur DNS doit impérativement écouter sur le port
53(UDP/TCP). C'est le port standard que tous les appareils utilisent par défaut pour les requêtes DNS.
Une fois l'assistant terminé, l'interface d'administration est accessible sur le port 80 :

4. Bascule DNS du réseau
4.1 — Redirection DNS sur la box
Sur l'interface de la box → Réglages avancés → DHCP → Options : renseigner 192.168.1.250 comme serveur DNS distribué aux clients.

4.2 — Alias DNS local
💡 Création d'une réécriture DNS pour accéder à AdGuard via un nom convivial. Dans AdGuard Home → Filtres → Réécritures DNS, ajouter une entrée pointant adguard.home vers l'IP du Pi.
L'interface est désormais accessible à l'adresse http://adguard.home depuis n'importe quel appareil du réseau.

4.3 — Serveurs DNS upstream
AdGuard Home ne sait pas résoudre les noms locaux du réseau (hostnames de la box, .lan, .bytel.fr). Ces domaines n'existent pas dans le DNS public — seule la box les connaît. Il faut ajouter des règles de conditional forwarding dans les paramètres DNS upstream :
[/bytel.fr/]192.168.1.254
[/lan/]192.168.1.254
Ces lignes indiquent à AdGuard de rediriger les requêtes pour les domaines locaux vers la box FAI (192.168.1.254), qui est la seule à pouvoir les résoudre.
Le DNS upstream principal utilisait initialement Quad9 en DoH (DNS-over-HTTPS, port 443) pour chiffrer les requêtes DNS sur le réseau. La version 9.9.9.10 "Unsecured" laisse AdGuard Home gérer lui-même le filtrage de sécurité sans doublon avec celui de Quad9.
Des DNS de repli (Cloudflare et Quad9 classique, toujours en DoH) étaient configurés pour éviter un SPOF (Single Point Of Failure).
💡 Note : depuis avril 2026, Quad9 et Cloudflare ont été remplacés par Unbound (résolveur récursif local) comme unique upstream. Voir la fiche LAB Unbound pour le détail et les raisons de ce changement plus que conseillé.
5. Bascule DHCP — Contrôle total du réseau
Le problème
La box Bouygues impose son propre serveur DNS à tous les appareils via le DHCP, même si un DNS alternatif est configuré. Cette règle du FAI n'est pas modifiable :

La solution
Désactiver le serveur DHCP de la box et activer celui d'AdGuard Home. Ainsi, tous les appareils obtiennent leur configuration réseau (IP, passerelle, DNS) directement depuis le Pi. Aucun appareil ne peut contourner le filtrage DNS.
Configuration DHCP dans AdGuard Home :
| Paramètre | Valeur |
|---|---|
| Interface | eth0 |
| Passerelle | 192.168.1.254 (box FAI) |
| Plage IPv4 | 192.168.1.50 → 192.168.1.150 |
| Masque | 255.255.255.0 |
| Durée du bail | 86400s (24h) |
| Plage IPv6 (ULA) | fd00::10 → fd00::ff |
⚠️ Procédure critique : désactiver le DHCP de la box puis activer immédiatement celui d'AdGuard Home. Pendant la bascule, aucun appareil ne pourra obtenir de nouvelle adresse IP. Il est recommandé de garder une fenêtre SSH ouverte sur le Pi pour intervenir rapidement.
6. Problème rencontré : renouvellement DHCP post-bascule
Après la bascule DHCP, plusieurs appareils ont rencontré des problèmes de connectivité.
Symptôme 1 — PC Windows : impossible de renouveler l'adresse IP après redémarrage. Erreur NCB (Network Control Block) dans les logs :

Tentatives de résolution (sans succès) :
# Vidange du cache DNS
ipconfig /flushdns
# Reset du catalogue Winsock
netsh winsock reset
# Réinitialisation de la pile TCP/IP
netsh int ip reset
# Désinstallation/réinstallation de la carte réseau via le Gestionnaire de périphériques
Solution : passage du PC en IP fixe (hors plage DHCP).
Symptôme 2 — Appareils Wi-Fi : après un reboot de la box, la plupart des appareils Wi-Fi ne parvenaient plus à se reconnecter. Forcer la reconnexion d'un appareil en IP fixe a semblé déclencher un renouvellement de la table ARP, après quoi les autres appareils ont suivi.
Leçon retenue : les appareils principaux (PC, serveurs, NAS) doivent être en IP fixe ou en bail statique, hors de la plage DHCP. Cela élimine les problèmes de renouvellement de bail et garantit l'accessibilité permanente des services critiques.
🔒 Listes de filtrage
Quatre listes complémentaires couvrent le spectre publicité + tracking + sécurité :
| Liste | Cible | Description |
|---|---|---|
| AdGuard DNS filter | Pubs & Trackers | Filtre natif et généraliste. Assure la base du blocage des publicités et traceurs sur le web moderne. |
| AdAway Default Blocklist | Pubs mobiles | Liste légère et historique, particulièrement efficace contre les publicités au sein des applications mobiles (Android/iOS). |
| OISD (The Big One) | Pubs, Trackers, Télémétrie | La référence : liste massive qui agrège des milliers de sources tout en garantissant un taux de faux positifs quasi nul. https://big.oisd.nl |
| Abuse.ch / URLHaus | Malwares & Botnets | Projet communautaire de référence pour traquer et bloquer les domaines servant à la distribution de malwares, virus et botnets. https://urlhaus.abuse.ch/downloads/hostfile/ |
🔄 Sauvegarde
Sauvegarde manuelle
Toute la configuration d'AdGuard Home est contenue dans un seul fichier : /opt/AdGuardHome/AdGuardHome.yaml. Une sauvegarde rapide via SSH et scp (Secure Copy) :
# Sur le Pi : copier le fichier et ajuster les permissions
sudo cp /opt/AdGuardHome/AdGuardHome.yaml ~/AdGuardHome_backup.yaml
sudo chown freed:freed ~/AdGuardHome_backup.yaml
# Depuis un terminal Windows : récupérer le fichier
scp freed@192.168.1.250:~/AdGuardHome_backup.yaml .
Script de sauvegarde automatisé (PowerShell)
Pour automatiser la sauvegarde, création d'une clé SSH dédiée (ed25519, sans passphrase) réservée aux scripts :
# Génération de la clé (Entrée à tout pour valider sans passphrase)
ssh-keygen -t ed25519 -f "C:\Users\<user>\.ssh\<key>"
# Déploiement de la clé publique sur le Pi
Get-Content "C:\Users\<user>\.ssh\<key>.pub" | ssh freed@192.168.1.250 "cat >> ~/.ssh/authorized_keys"
⚠️ Sécurité : cette clé sans passphrase est strictement dédiée aux scripts de sauvegarde. L'accès SSH interactif utilise une clé distincte protégée par passphrase.
Le script sauvegarde à la fois la configuration AdGuard Home et la configuration Unbound. Il utilise un tableau de fichiers extensible :
# --- CONFIGURATION ---
$User = "freed"
$IP = "192.168.1.250"
$KeyPath = "C:\Users\<user>\.ssh\<key>"
$Date = Get-Date -Format "yyyyMMdd"
$LocalPath = $PSScriptRoot
# Fichiers à sauvegarder (source sur le Pi → nom local)
$Files = @(
@{ Remote = "/opt/AdGuardHome/AdGuardHome.yaml"; Local = "AdGuardHome_backup_$Date.yaml" },
@{ Remote = "/etc/unbound/unbound.conf.d/pi-unbound.conf"; Local = "Unbound_backup_$Date.conf" }
)
foreach ($File in $Files) {
$FileName = Split-Path $File.Remote -Leaf
$TempFile = "~/$($File.Local)"
Write-Host "--- Sauvegarde de $FileName ---" -ForegroundColor Cyan
Write-Host " [1/3] Preparation sur le Pi..." -ForegroundColor Gray
ssh -i $KeyPath $User@$IP "sudo cp $($File.Remote) $TempFile && sudo chown ${User}:${User} $TempFile"
Write-Host " [2/3] Telechargement..." -ForegroundColor Gray
scp -i $KeyPath "$User@${IP}:$TempFile" "$LocalPath\$($File.Local)"
Write-Host " [3/3] Nettoyage..." -ForegroundColor Gray
ssh -i $KeyPath $User@$IP "rm $TempFile"
Write-Host " OK : $($File.Local)" -ForegroundColor Green
Write-Host ""
}
Write-Host "--- Sauvegarde Terminee ! ---" -ForegroundColor Green
Read-Host "Appuyez sur Entree pour fermer..."
📊 Statistiques
Moyenne des blocages DNS sur une semaine de fonctionnement :

📋 Résumé
- Infrastructure : Raspberry Pi 3B sous Raspberry Pi OS Lite
- Services : AdGuard Home (DNS sinkhole + DHCP) + Unbound (résolveur récursif)
- Réseau : Intégration transparente dans le LAN
192.168.1.0/24— contrôle total du DNS et du DHCP - Sécurité : Filtrage multicouche AdGuard DNS + AdAway + OISD + URLHaus (pubs, trackers, malwares, botnets)
- Privacy : Résolution DNS souveraine via Unbound (aucun DNS tiers dans la chaîne)
- Supervision : Btop (ressources temps réel) + tableau de bord AdGuard Home (stats DNS)
- Automatisation : Script PowerShell de sauvegarde (AdGuard + Unbound) via clé SSH dédiée
📚 Références
- AdGuard Home : https://github.com/AdguardTeam/AdguardHome
- Raspberry Pi OS : https://www.raspberrypi.com/software/
- OISD Blocklist : https://oisd.nl/
- URLHaus (Abuse.ch) : https://urlhaus.abuse.ch/
- LAB Unbound (résolveur récursif) : Homelab_Unbound.md

