Introduction
Pi-hole :
- DNS resolveur qui retourne
NXDOMAINpour les domaines de pub/tracking - Couvre toutes les apps : mobile, smart TV, console, IoT
- Listes de blocage communautaires (StevenBlack, OISD, etc.)
- Dashboard web avec stats par client
- Whitelist / blacklist manuelles
- API et CLI
- Integration DHCP optionnelle
Difference vs Unbound : Pi-hole est focus blocage + UI ; Unbound est focus resolution recursive. On les combine souvent : Pi-hole devant (UI + blocage), Unbound derriere (recursion privee).
Prerequis
- VPS Linux Debian / Ubuntu (ou Raspberry Pi)
- 512 Mo RAM, 1 vCPU minimum
- Acces root
- Port 53 UDP/TCP libre
- Port 80 (UI) libre
Etape 1 : Installation
curl -sSL https://install.pi-hole.net | bash
Script interactif qui demande :
- Interface reseau a utiliser
- Upstream DNS provider (Quad9, Cloudflare, etc.)
- Lister blocklists par defaut
- Activer le dashboard web (oui)
- Activer query logging (oui)
- Privacy level (Show everything)
A la fin :
Configure your devices to use the Pi-hole as their DNS server using:
IPv4: 192.168.1.10
The install log is in /etc/pihole.
View the web interface at http://pi.hole/admin or http://192.168.1.10/admin
Your Admin Webpage login password is: aBc123XyZ
Notez le mot de passe (changeable plus tard).
Etape 2 : Acces a l'UI
Visitez http://IP_VPS/admin. Login avec le mdp affiche a l'install.
Etape 3 : Configurer vos appareils
3 options :
Manuelle par appareil : changez le DNS dans la config reseau de chaque appareil pour pointer vers l'IP du Pi-hole.
Via le routeur : changez le DNS LAN dans votre routeur pour pointer vers le Pi-hole. Tous les clients DHCP auront automatiquement Pi-hole comme DNS.
Pi-hole comme DHCP : Pi-hole peut aussi etre votre DHCP server (Settings > DHCP). Pratique si votre routeur ne permet pas de modifier le DNS.
Etape 4 : Premier test
Depuis un client utilisant Pi-hole :
dig doubleclick.net
Devrait retourner 0.0.0.0 ou NXDOMAIN. La pub est bloquee.
Sur le dashboard, vous voyez en temps reel :
- Total queries
- Queries blocked
- Percentage blocked
- Top clients
- Top blocked domains
Etape 5 : Ajouter des blocklists
Onglet Group Management > Adlists. Listes recommandees :
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
https://big.oisd.nl
https://adaway.org/hosts.txt
https://v.firebog.net/hosts/Easyprivacy.txt
https://v.firebog.net/hosts/AdguardDNS.txt
Apres ajout, allez dans Tools > Update Gravity pour telecharger et compiler.
Etape 6 : Whitelist et blacklist
Si un site legitime est bloque, ajoutez-le en whitelist :
Group Management > Domains > Whitelist > ajouter example.com.
A l'inverse, pour bloquer un site specifique :
Group Management > Domains > Blacklist > ajouter pubparasite.com.
Vous pouvez aussi utiliser des regex :
(\.|^)telemetry\..*\.microsoft\.com$
Etape 7 : Combiner avec Unbound (recursif local)
Par defaut, Pi-hole forwarde vers Cloudflare/Quad9. Pour plus de privacy, ajoutez Unbound derriere :
- Installez Unbound (voir tuto 30) sur la meme machine, sur port 5335 :
server:
interface: 127.0.0.1
port: 5335
- Dans Pi-hole, Settings > DNS :
- Decochez tous les upstream DNS
- Custom 1 (IPv4) :
127.0.0.1#5335
Maintenant Pi-hole filtre et Unbound resout en recursif sans intermediaire externe. Privacy maximale.
Etape 8 : Groups (multi-tenant)
Pour avoir des politiques differentes par appareil ou groupe :
Group Management > Groups > creer "Adultes" et "Enfants".
Group Management > Clients > ajouter une IP / MAC, l'assigner a un groupe.
Group Management > Adlists > assigner certaines listes au groupe "Enfants" (par exemple liste de blocage de sites adultes).
Etape 9 : DNS over HTTPS pour les upstream
Activez DoH pour chiffrer le trafic Pi-hole -> upstream :
sudo apt install -y cloudflared
sudo nano /etc/default/cloudflared
CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query
Service systemd :
sudo nano /etc/systemd/system/cloudflared.service
[Unit]
Description=cloudflared DNS over HTTPS proxy
After=syslog.target network-online.target
[Service]
Type=simple
EnvironmentFile=/etc/default/cloudflared
ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now cloudflared
Dans Pi-hole > Settings > DNS > Custom 1 : 127.0.0.1#5053.
Etape 10 : Mise a jour automatique des listes
Par defaut, Pi-hole update les gravity hebdomadairement. Pour forcer plus souvent :
sudo crontab -e
0 3 * * * /usr/local/bin/pihole updateGravity > /var/log/pihole-gravity.log 2>&1
Etape 11 : Backup et restore
Backup :
Settings > Teleporter > Backup. Telecharge un .tar.gz avec toute la config.
Pour restore : Teleporter > Restore > selectionner le fichier.
Etape 12 : API
curl http://IP_VPS/admin/api.php?summary&auth=VOTRE_TOKEN
Token dans Settings > API.
Endpoints utiles :
summary: stats globalestop_clients: clients les plus actifsgetQueryTypes: repartition des queries (A, AAAA, etc.)topItems: top domains queried/blocked
Depannage
"Reply UNKNOWN_HOST"
Pi-hole ne resout plus. Verifiez :
sudo systemctl status pihole-FTL
sudo tail -f /var/log/pihole/pihole.log
Verifiez que l'upstream DNS repond :
dig @1.1.1.1 google.com
Domain legitime bloque par erreur
Identifiez la liste fautive :
Onglet Query Log > cherchez le domaine > regardez "Blocked by".
Whitelistez le domaine.
Dashboard inaccessible
sudo systemctl status lighttpd
sudo systemctl restart lighttpd pihole-FTL
Verifiez que le port 80 n'est pas pris par autre chose (Nginx, Apache).
Pi-hole + Unbound : SERVFAIL
Si Pi-hole forwarde vers 127.0.0.1#5335 mais Unbound est pas demarre :
sudo systemctl status unbound
sudo unbound-checkconf
Update echoue
pihole -up
En cas d'echec, regardez :
sudo tail -f /tmp/pihole_update.log
Commandes utiles
# Status
pihole status
# Logs en temps reel
pihole -t
# Update Pi-hole
pihole -up
# Update gravity (blocklists)
pihole -g
# Activer / desactiver le blocage
pihole disable
pihole disable 10m # desactive pendant 10 min
pihole enable
# Whitelist / blacklist via CLI
pihole -w example.com
pihole -b pubparasite.com
pihole --regex '^.*ads.*'
# Stats
pihole -c # chronometer
# Reset password admin
pihole -a -p
# Logs
sudo tail -f /var/log/pihole/pihole.log
sudo tail -f /var/log/pihole/FTL.log
Conclusion
Pi-hole transforme votre reseau en zone sans pub ni tracking :
- Bloque la pub au niveau DNS (toutes les apps)
- Stats temps reel par client
- Combinable avec Unbound pour la privacy maximale
- Tres leger (tourne sur Raspberry Pi)
Pour aller plus loin :
- Combinez avec Unbound pour la resolution recursive
- Activez DHCP Pi-hole pour le naming automatique des clients
- Pour HA, deployez 2 Pi-hole + Gravity Sync
Ressources
- Documentation officielle : https://docs.pi-hole.net
- Site : https://pi-hole.net
- Github : https://github.com/pi-hole/pi-hole
- Gravity Sync : https://github.com/vmstan/gravity-sync


















