Installer un bloqueur de pub sur son navigateur (uBlock Origin), c'est bien. Mais cela ne protège pas votre Smart TV, votre téléphone mobile ou vos applications. Pi-hole agit au niveau du réseau : il intercepte les requêtes DNS. Couplé à Unbound, il vous permet de devenir votre propre fournisseur DNS, garantissant une confidentialité totale vis-à-vis de votre FAI et de Google.
1. Le concept : DNS Sinkhole & Récursivité
Avant de taper les commandes, comprenons l'architecture que nous allons déployer :
- Le Sinkhole (Pi-hole) : Quand votre PC demande "Où est doubleclick.net ?", Pi-hole regarde sa liste noire. Si c'est une pub, il répond "Nulle part" (0.0.0.0). La pub ne se charge pas.
- Le Résolveur (Unbound) : Si ce n'est pas une pub, Pi-hole doit demander l'IP à quelqu'un. Au lieu de demander à Google (qui logue tout), nous allons utiliser Unbound qui interroge directement les 13 serveurs racines mondiaux. Personne ne saura ce que vous visitez.
2. Préparation du Système (Ubuntu/Debian)
Le service DNS utilise les ports 53 (TCP et UDP). Sur les systèmes modernes (Ubuntu 20.04+), un service appelé systemd-resolved occupe déjà ce port. Il faut le désactiver pour laisser la place à Pi-hole.
# Désactiver le résolveur système par défaut
sudo systemctl disable --now systemd-resolved.service
sudo rm /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf
3. Déploiement via Docker Compose
Nous allons déployer les deux services (Pi-hole et Unbound) dans une même stack réseau pour qu'ils communiquent facilement.
A. Structure des dossiers
mkdir -p pihole-unbound/unbound
cd pihole-unbound
B. Configuration d'Unbound
Créez le fichier de configuration optimisé pour Unbound : nano unbound/unbound.conf
server:
verbosity: 0
interface: 0.0.0.0
port: 5335
do-ip4: yes
do-udp: yes
do-tcp: yes
do-ip6: no
prefer-ip6: no
# Sécurité & Privacy
harden-glue: yes
harden-dnssec-stripped: yes
use-caps-for-id: no
edns-buffer-size: 1232
prefetch: yes
num-threads: 1
so-rcvbuf: 1m
# Autoriser le réseau Docker interne (Important !)
access-control: 10.0.0.0/8 allow
access-control: 172.16.0.0/12 allow
access-control: 192.168.0.0/16 allow
C. Le fichier docker-compose.yml
Créez le fichier nano docker-compose.yml :
services:
unbound:
image: mvance/unbound:latest
container_name: unbound
restart: unless-stopped
volumes:
- ./unbound:/opt/unbound/etc/unbound/
networks:
private_network:
ipv4_address: 172.20.0.5
pihole:
image: pihole/pihole:latest
container_name: pihole
restart: unless-stopped
ports:
- "53:53/tcp"
- "53:53/udp"
- "80:80/tcp" # Attention si vous avez déjà un serveur web !
environment:
TZ: 'Europe/Paris'
WEBPASSWORD: 'VotreMotDePasseAdmin'
# On dit à Pi-hole d'utiliser Unbound comme DNS
PIHOLE_DNS_: '172.20.0.5#5335'
DNSSEC: 'true'
volumes:
- './etc-pihole:/etc/pihole'
- './etc-dnsmasq.d:/etc/dnsmasq.d'
depends_on:
- unbound
networks:
private_network:
ipv4_address: 172.20.0.6
networks:
private_network:
ipam:
driver: default
config:
- subnet: 172.20.0.0/24
Lancez la stack :
docker compose up -d
4. Configuration Post-Installation
Rendez-vous sur http://IP_DE_VOTRE_SERVEUR/admin.
Vérifier la récursivité
Allez dans Settings > DNS. Vous devriez voir dans "Upstream DNS Servers" uniquement une entrée personnalisée : 172.20.0.5#5335 (L'adresse de notre conteneur Unbound).
Décochez toutes les cases Google, OpenDNS, etc. Nous sommes désormais indépendants !
5. Mise en place sur le Réseau (Le point critique)
Pour que vos appareils utilisent Pi-hole, vous avez deux méthodes :
Méthode A : Changer le DNS dans la Box (Facile)
Allez dans l'interface de votre Box Internet (Livebox, Freebox...). Cherchez les paramètres DHCP/DNS et mettez l'IP de votre serveur Pi-hole comme DNS Primaire.
Méthode B : Pi-hole comme serveur DHCP (Expert)
Si votre Box ne permet pas de changer les DNS (coucou Orange), vous devez :
- Désactiver le DHCP sur votre Box.
- Activer le DHCP dans l'interface de Pi-hole (Settings > DHCP).
C'est la méthode la plus fiable, car elle permet à Pi-hole de voir le nom de chaque machine (ex: "iPhone-de-Leo") au lieu de voir uniquement l'IP du routeur.
6. Maintenance et Whitelisting
Un bloqueur trop agressif peut casser certains sites (ex: liens sponsorisés Google Shopping, pistage de redirection par email).
Le "Wife Factor" (Facteur d'acceptation)
Si Netflix ou Facebook ne marche plus, vous allez avoir des problèmes à la maison. Apprenez à utiliser le Query Log :
- Allez dans "Query Log".
- Filtrez par "Blocked".
- Cherchez le domaine rouge qui a été bloqué juste au moment où le site a planté.
- Cliquez sur "Whitelist".
Les RegEx (Blocage avancé)
Pour bloquer TikTok ou la télémétrie Windows, les listes simples ne suffisent pas. On utilise des expressions régulières (RegEx). Exemple pour bloquer tout TikTok :
^(.+[-_.])??tiktok[-_.]com$
Conclusion
Avec cette installation, vous avez non seulement supprimé 90% des publicités de votre réseau (économisant de la bande passante), mais vous avez aussi repris le contrôle de vos données DNS grâce à Unbound. C'est un premier pas essentiel vers la souveraineté numérique.