Pi-hole - Ad-blocking DNS avec 232K+ domaines bloqués
Dernière mise à jour le
🛡️ Qu’est-ce que Pi-hole?
Pi-hole est un DNS sinkhole qui bloque les publicités et trackers au niveau réseau, avant même qu’ils n’atteignent vos appareils. Contrairement aux ad-blockers classiques (uBlock Origin, AdBlock+), Pi-hole protège:
- Tous les appareils du réseau (smartphones, TV, IoT…)
- Toutes les applications (pas seulement les navigateurs)
- Tous les protocoles (HTTP, HTTPS, apps mobiles…)
Avantages:
- ✅ Bloque pub YouTube sur TV/mobile
- ✅ Bloque trackers dans apps mobiles
- ✅ Réduit bande passante
- ✅ Améliore vie privée
- ✅ Accélère navigation (moins de requêtes)
📊 Stats Mon Instance
Domaines bloqués: 232,646
Requêtes/jour: ~15,000
% bloqué: ~35%
Listes actives: 12
Clients: 8 devices
Uptime: 99.9%
🐳 Installation Docker
docker-compose.yml
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
hostname: pi.hole
network_mode: host
environment:
TZ: 'Europe/Paris'
WEBPASSWORD: '${PIHOLE_PASSWORD}'
PIHOLE_DNS_: '1.1.1.1;1.0.0.1' # Upstream DNS (Cloudflare)
DNSSEC: 'true'
WEB_PORT: '9090'
FTLCONF_webserver_port: '9090'
volumes:
- './etc-pihole:/etc/pihole'
- './etc-dnsmasq.d:/etc/dnsmasq.d'
cap_add:
- NET_ADMIN
restart: unless-stopped
dns:
- 127.0.0.1
- 1.1.1.1
network_mode: host évite d’avoir à publier chaque port un par un (53 DNS, 9090 web) — pratique pour un service réseau comme celui-ci, au prix de partager directement le réseau de l’hôte plutôt que d’être isolé dans un bridge Docker.
Commandes Déploiement
# Créer répertoires
mkdir -p pihole/{etc-pihole,etc-dnsmasq.d}
cd pihole
# Créer docker-compose.yml (contenu ci-dessus)
# Démarrer
docker compose up -d
# Vérifier logs
docker compose logs -f
# Vérifier status
docker compose ps
Accès Web Interface
URL: http://<SERVER_IP>:PORT/admin
User: (aucun)
Password: YOUR_SECURE_PASSWORD
🔧 Configuration Initiale
1. Configurer DNS Upstream
Settings > DNS > Upstream DNS Servers
Options recommandées:
- Google:
8.8.8.8+8.8.4.4(rapide, logging Google) - Cloudflare:
1.1.1.1+1.0.0.1(privacy-focused) - Quad9:
9.9.9.9(sécurité, bloque malware) - OpenDNS:
208.67.222.222(filtrage famille optionnel)
Mon choix: Google DNS (performance)
2. Activer DNSSEC
Settings > DNS > DNSSEC
☑️ Use DNSSEC
DNSSEC vérifie authenticité des réponses DNS → protection contre spoofing/poisoning
3. Configurer Interface
Settings > DNS > Interface listening behavior
Choix:
- ✅ Listen on all interfaces, permit all origins (simple, réseau local trusted)
- ⬜ Listen only on interface eth0 (plus sécurisé)
4. Conditional Forwarding (Optionnel)
Pour résolution noms locaux (ex: jellyfin.local)
Settings > DNS > Conditional forwarding
☑️ Use Conditional Forwarding
Target: 192.168.0.1 (adresse router)
Domain: local
📋 Listes de Blocage (Adlists)
Listes Installées (12)
Fichier: adlists.txt
# Default Pi-hole list
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
# Malware domains
https://mirror1.malwaredomains.com/files/justdomains
https://s3.amazonaws.com/lists.disconnect.me/simple_malware.txt
# Tracking & telemetry
https://v.firebog.net/hosts/Easyprivacy.txt
https://v.firebog.net/hosts/Prigent-Ads.txt
https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt
# Ads
https://adaway.org/hosts.txt
https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext
https://raw.githubusercontent.com/anudeepND/blacklist/master/adservers.txt
# Smart TV ads
https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/SmartTV.txt
# Crypto mining
https://zerodot1.gitlab.io/CoinBlockerLists/hosts_browser
# French ads
https://raw.githubusercontent.com/r-a-y/mobile-hosts/master/AdguardMobileAds.txt
Ajouter Liste
Web UI: Adlists > Add new adlist
Address: https://example.com/list.txt
Comment: Description liste
Puis mettre à jour:
docker compose exec pihole pihole -g
Ou Web UI: Tools > Update Gravity
Recommandations Listes
Strict (privacy maximum):
Équilibré (mon setup):
- StevenBlack + Firebog curated lists
Léger (pas de faux positifs):
- StevenBlack uniquement
🎯 Whitelist / Blacklist
Whitelist (Débloquer)
Certains services légitimes sont parfois bloqués:
# Microsoft services
msftncsi.com
www.msftncsi.com
# Google safe browsing
clients2.google.com
clients4.google.com
# Apple services
captive.apple.com
# Smart TV fonctionnalités (optionnel)
api-global.netflix.com
Ajouter: Whitelist > Add domain
Blacklist (Bloquer manuellement)
Domaines spécifiques à bloquer:
# Telemetry Windows
telemetry.microsoft.com
vortex.data.microsoft.com
# Trackers spécifiques
googleadservices.com
doubleclick.net
Ajouter: Blacklist > Add domain
Regex Filters
Bloquer patterns complexes:
# Bloquer tous sous-domaines tracking
^(.+\.)?tracking\..*$
# Bloquer ads dans domaines
^ad[sxv]?[0-9]*\..*$
RegEx Filters > Add regex filter
📊 Dashboard & Monitoring
Widgets Principaux
Overview:
- Total queries (24h)
- Queries blocked (%)
- Gravity (domaines en liste)
- Clients actifs
Query Types:
- A (IPv4): ~70%
- AAAA (IPv6): ~25%
- PTR (reverse): ~5%
Top Blocked Domains:
1. googleadservices.com 2,340 hits
2. doubleclick.net 1,890 hits
3. facebook.com 1,234 hits
4. graph.facebook.com 987 hits
5. analytics.google.com 654 hits
Top Permitted Domains:
1. www.google.com 3,456 hits
2. youtube.com 2,109 hits
3. github.com 1,543 hits
4. cloudflare.com 876 hits
Long-term Data
Settings > API / Web interface > Privacy settings
Options:
- ☑️ Show everything (default)
- ⬜ Hide domains (anonymize)
- ⬜ Hide domains + clients (max privacy)
Settings > System > FTL Database
Max database days: 365
Database interval: 1 minute
🔌 Configuration Clients
Méthode 1: Router (Recommandé)
Configure router DHCP pour distribuer Pi-hole comme DNS:
Router admin panel:
DHCP Settings > DNS Server
Primary DNS: <SERVER_IP>
Secondary DNS: 8.8.8.8 (fallback)
Avantages:
- Tous devices automatiquement protégés
- Nouveaux devices aussi
- Pas de config manuelle
Méthode 2: Par Device (Alternatif)
Windows:
Paramètres > Réseau > Propriétés WiFi
DNS manuel:
Préféré: <SERVER_IP>
Auxiliaire: 8.8.8.8
macOS:
Préférences Système > Réseau > Avancé > DNS
Serveurs DNS:
<SERVER_IP>
8.8.8.8
Android:
Paramètres > WiFi > Longue pression réseau > Modifier
Options avancées > DNS
DNS 1: <SERVER_IP>
DNS 2: 8.8.8.8
iOS:
Réglages > WiFi > (i) réseau
Configurer DNS > Manuel
Serveurs: <SERVER_IP>
Méthode 3: DHCP Pi-hole (Avancé)
Désactiver DHCP router, activer dans Pi-hole:
Settings > DHCP > DHCP Settings
☑️ DHCP server enabled
Range: 192.168.0.100 - 192.168.0.250
Gateway: 192.168.0.1
Risque: Si Pi-hole down, pas d’IPs distribuées!
🛠️ Maintenance
Update Gravity
Actualiser listes de blocage (hebdomadaire):
docker compose exec pihole pihole -g
Ou Web UI: Tools > Update Gravity
Update Pi-hole
# Pull dernière image
docker compose pull
# Recréer container
docker compose up -d --force-recreate
# Vérifier version
docker compose exec pihole pihole -v
Flush Logs
Nettoyer requêtes anciennes:
docker compose exec pihole pihole -f
Backup Config
# Telecharger backup depuis Web UI
Tools > Teleporter > Backup
# Ou manuel
tar -czf pihole-backup.tar.gz etc-pihole/ etc-dnsmasq.d/
Restore Backup
# Arrêter container
docker compose down
# Extraire backup
tar -xzf pihole-backup.tar.gz
# Redémarrer
docker compose up -d
🐛 Troubleshooting
Site cassé (faux positif)
Symptôme: Site ne charge pas ou fonctionnalités manquantes
Solution:
- Web UI > Query Log
- Chercher domaine bloqué (rouge)
- Click domaine > Whitelist > Add
- Refresh site
Exemple: api.example.com bloqué → Whitelist
DNS lent
Symptôme: Sites chargent lentement
Diagnostic:
# Test résolution DNS
dig @<SERVER_IP> google.com
# Devrait être < 50ms
Solutions:
- Changer upstream DNS (Cloudflare plus rapide que Google parfois)
- Activer DNSSEC cache
- Vérifier load CPU Pi-hole
Pi-hole ignoré
Symptôme: Stats Pi-hole à 0 requêtes
Causes:
- Device utilise DNS alternatif (hard-coded 8.8.8.8)
- Router distribue autre DNS
- VPN bypass Pi-hole
Diagnostic:
# Sur device, vérifier DNS utilisé
nslookup google.com
# Server doit être <SERVER_IP>
📈 Stats Avancées avec PADD
PADD = Pi-hole Ad Detection Display (terminal dashboard)
# Installer
docker compose exec pihole bash
wget -O padd.sh https://install.padd.sh
chmod +x padd.sh
# Lancer
./padd.sh
Affiche:
- Queries temps réel
- Top blocked domains
- CPU/RAM usage
- Clients actifs
🔗 Intégrations
Home Assistant
Ajouter Pi-hole comme sensor:
# configuration.yaml
sensor:
- platform: pi_hole
host: <SERVER_IP>:PORT
monitored_conditions:
- ads_blocked_today
- ads_percentage_today
- dns_queries_today
- domains_being_blocked
Dashboard card:
type: entities
title: "Pi-hole Stats"
entities:
- sensor.pi_hole_ads_blocked_today
- sensor.pi_hole_ads_percentage_today
- sensor.pi_hole_dns_queries_today
Grafana
Visualiser métriques long-terme:
- Queries/jour graph
- Blocked % pie chart
- Top domains bar chart
🎓 Ressources
Status: 🟢 Running
Blocks: 232,646 domains
Efficiency: 35% queries blocked
Clients: 8 devices protected