Pi-hole : DNS bloqueur de pub et tracking

Pi-hole : DNS bloqueur de pub et tracking

Pi-hole transforme un Raspberry Pi (ou n'importe quel VPS) en bloqueur de publicites et trackers a l'echelle reseau. Tous les appareils derriere sont proteges sans installer quoi que ce soit dessus. Dashboard web, listes communautaires, stats par client.

Introduction

Pi-hole :

  • DNS resolveur qui retourne NXDOMAIN pour 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 :

  1. Manuelle par appareil : changez le DNS dans la config reseau de chaque appareil pour pointer vers l'IP du Pi-hole.
  2. 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.
  3. 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 :

  1. Installez Unbound (voir tuto 30) sur la meme machine, sur port 5335 :
server:
    interface: 127.0.0.1
    port: 5335
  1. 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 globales
  • top_clients : clients les plus actifs
  • getQueryTypes : 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

Rejoignez notre serveur communautaire Discord

Pour toute question, suggestion ou simplement pour discuter avec la communauté, rejoignez-nous sur Discord !

900+Membres