Pi-hole – Unbound
Contexte :
- Pi-hole est installé dans un conteneur LXC (Proxmox VE)
Shéma :
Pi-hole est un serveur DNS qui bloque les publicités et les traqueurs au niveau du réseau, tandis qu’Unbound est un serveur DNS récursif qui permet de résoudre les requêtes DNS de manière récursive et sécurisée. Voici comment ils fonctionnent ensemble :
- Pi-hole : Il agit comme un filtre DNS, bloquant les requêtes vers des domaines connus pour héberger des publicités, des traqueurs ou des logiciels malveillants. Il utilise des listes de blocage pour déterminer quels domaines bloquer.
- Unbound : C’est un serveur DNS récursif qui résout les requêtes DNS en allant chercher les informations directement auprès des serveurs DNS racine et des serveurs faisant autorité. Cela permet d’améliorer la confidentialité et la sécurité, car les requêtes ne passent pas par des serveurs DNS tiers comme ceux de votre FAI (Fournisseur d’Accès à Internet).
Lorsque vous utilisez Unbound avec Pi-hole, Pi-hole envoie les requêtes DNS non bloquées à Unbound, qui les résout de manière récursive. Cela permet de bénéficier des avantages des deux outils :
- Confidentialité améliorée : Les requêtes DNS ne sont pas envoyées à des serveurs DNS tiers.
- Sécurité renforcée : Les réponses DNS sont vérifiées et validées par Unbound.
- Blocage des publicités : Pi-hole continue de bloquer les publicités et les traqueurs.
En résumé, Unbound améliore la confidentialité et la sécurité de la résolution DNS, tandis que Pi-hole bloque les publicités et les traqueurs. Ensemble, ils offrent une solution complète pour une navigation plus sûre et plus privée.
Concrètement, configurer Unbound avec Pi-hole est une excellente solution pour :
- Avoir un DNS récursif sécurisé localement (meilleure vie privée).
- Activer DNSSEC sans conflits pour les domaines .local ou .home.arpa.
- Gérer des zones locales pour votre homelab (ex. homeassistant.local, proxmox.home.arpa, etc.).
Liens :
- Page officielle de référence : pi-hole.net
- ChatGPT m’avait donné la démarche.
Installation d’Unbound
Via le Shell LXC où tourne Pi-hole :
Shell - LXC
sudo apt update
sudo apt install unbound
Configuration d’Unbound
On va créer un fichier de config optimisé pour Pi-hole en se basant sur ce qui existe déjà et adapter en fonction (notement) de notre choix de service DNS. Sachant que sur ce dernier point, on pourrait faire du 100% local…
Shell - LXC
sudo nano /etc/unbound/unbound.conf.d/pi-hole.conf
-
server: verbosity: 1 interface: 127.0.0.1 port: 5335 do-ip4: yes do-udp: yes do-tcp: yes access-control: 127.0.0.0/8 allow root-hints: "/var/lib/unbound/root.hints" hide-identity: yes hide-version: yes harden-glue: yes harden-dnssec-stripped: yes use-caps-for-id: yes edns-buffer-size: 1232 prefetch: yes qname-minimisation: yes harden-referral-path: yes cache-min-ttl: 3600 cache-max-ttl: 86400 rrset-roundrobin: yes module-config: "validator iterator" val-clean-additional: yes
Télécharger les root hints (serveurs racine)
Shell - LXC
sudo wget -O /var/lib/unbound/root.hints https://www.internic.net/domain/named.root
Redémarrer Unbound
Shell - LXC
sudo systemctl restart unbound
Vérifie que le service fonctionne :
Shell - LXC
sudo systemctl status unbound
Tester Unbound
Vérifie que la résolution DNS via Unbound fonctionne :
Terminal - PowerShell
dig @127.0.0.1 -p 5335 www.google.com
Vous devriez trouver la mention « status: NOERROR« .
Cette information est noyé dans le message de retour. Voyez ci-après où cela se trouve en ligne 5 :
; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> @127.0.0.1 -p 5335 www.google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12454
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.google.com. IN A
;; ANSWER SECTION:
www.google.com. 3600 IN A 172.217.20.196
;; Query time: 316 msec
;; SERVER: 127.0.0.1#5335(127.0.0.1) (UDP)
;; WHEN: Sun Jul 20 01:52:46 CEST 2025
;; MSG SIZE rcvd: 59
Configurer Pi-hole pour utiliser Unbound
Dans l’interface Web de Pi-hole :
- Allez dans Settings > DNS
- Décochez tous les serveurs DNS externes
- Dans le zone Ajoutez un serveur DNS personnalisé :
127.0.0.1#5335
Activez DNSSEC ici aussi si souhaité.
[Optionnel] Gérer les zones locales
(ex. .home.arpa)
Ajoutez une zone locale à Unbound :
Shell - LXC
nano /etc/unbound/unbound.conf.d/local-zones.conf
Et ajoutez :
server:
local-zone: "home.arpa." static
local-data: "proxmox.home.arpa. IN A 192.168.0.11"
local-data: "homeassistant.home.arpa. IN A 192.168.0.100"
Puis rechargez Unbound :
Shell - LXC
sudo systemctl restart unbound
Vérification finale
Test avec dig Sources :
Terminal - PowerShell
dig proxmox.local @127.0.0.1 -p 5335
Vous devriez recevoir une IP locale (192.168.x.x), sans erreur DNSSEC.
Test avec nslookup :
Terminal - PowerShell
nslookup google.com
Vous devriez voir apparaître sur la première ligne de la réponse affichée l’information sur votre pi.hole (par défaut).
Test avec ipconfig :
Terminal - PowerShell
ipconfig /all
Dans le section correspondante à votre connexion, vous devriez trouver la ligne « Serveur DNS » avec l’adresse IP de votre Pi-hole.
Désactiver unbound
Si pour X raisons vous souhaitez désactiver unbound vous avez 2 choix :
- Désactivation temporaire
- Suppression
1/ Désactivation
Le but consiste tout simplement à ne plus utiliser unbound en remplaçant dans Pihole le server DNS par ceux de notre choix parmi l’interface : Pihole > Settings > DNS.
Moi j’utilise ceux de DNS4EU
86.54.11.13
86.54.11.213
2a13:1001::86:54:11:13
2a13:1001::86:54:11:213
Pensez à supprimer l’instruction 127.0.0.1#5335
