Parce qu'il y a toujours une solution...

Avec cet article, je vais créer un container Docker ayant PiHole, puis configurer notre système pour utiliser le PiHole comme serveur/résolveur DNS.
Si vous êtes sous Ubuntu 18.04, vous devez toutefois désactiver « systemd-resolved » pour le bon fonctionnement du DNS. En effet, si l'outil "systemd-resolved" est toujours actif, votre système n'acceptera pas d'exploiter un autre outil de résolution de noms – comme ci-dessous.

Commençons par désactiver le démarrage automatique du paquet « systemd-resolved ». Ne l'arrêtez pas encore, nous avons besoin du DNS pour télécharger des paquets.

sudo systemctl disable systemd-resolved.service

Ensuite, modifiez le fichier « /etc/NetworkManager/NetworkManager.conf » – au niveau de la zone [main], remplacez « dns=systemd » par « dns=default ».
Cette ligne va modifier le comportement de NetworkManager quant au DNS.
Bougez aussi le fichier « /etc/resolv.conf », qui est actuellement configuré pour utiliser la configuration de systemd-resolved.

sudo mv /etc/resolv.conf /etc/resolv.conf.backup
sudo systemctl restart network-manager

Le fichier /etc/resolv.conf va alors être recréé, avec un paramétrage simple. Il n'est pas encore nécessaire de modifier les paramètres de la carte réseau.


"Dockerisation"

Comme il s'agit d'un container Docker, j'ai créé une arborescence dans mon disque « bcache » (article à cette adresse) où je stockerai les données de mon conteneur. Libre à vous de stocker le conteneur et ses données où vous le souhaitez bien-entendu.

sudo mkdir -p /data/docker-pihole

Maintenant, créons le fichier au format « yaml » pour le docker-compose.

sudo nano /data/docker-pihole/docker-compose.yml

# CONTENU DU FICHIER DOCKER-COMPOSE.yml
version: "3.7"
services:
  pihole:
    image: pihole/pihole:latest
  ports:
    - "53:53/udp"
    - "80:80/tcp"
    - "443:443/tcp"
  environment:
    TZ: 'Europe/Paris'
    WEBPASSWORD: 'pouetpouet'
  volumes:
    - '/data/docker-pihole/etc/pihole/:/etc/pihole/'
    - '/data/docker-pihole/etc/dnsmasq.d/:/etc/dnsmasq.d/'
  dns:
    - 9.9.9.9
    - 1.1.1.1
  cap_add:
    - NET_ADMIN
  restart: always
fichier docker-compose.yml pour PiHole

Quelques explications :

  • On va chercher le modèle « officiel ».
  • Les ports ouverts/mappés seront uniquement les 53, 80 et 443. Soit uniquement le port DNS et le nécessaire pour l'interface web.
  • Côté « environment », il s'agit là du fuseau horaire pour avoir des logs à la bonne heure et le mot de passe d'administration dans l'interface web.
    Si vous ne mettez pas de mot de passe, un code sera généré et vous devrez le récupérer dans les logs au lancement du conteneur.
  • Les « volumes » correspondent aux emplacements où seront stockés les données
  • La rubrique "DNS" spécifie les serveurs DNS à exploiter par PiHole pour effectuer les résolutions de noms - ici Quad9 et Cloudflare. Si vous n'effectuez pas la configuration, ce sont les serveurs DNS de Google qui seront utilisés.
  • la variable « restart: always » permet de démarrer le conteneur dès que votre machine hôte et le service Docker démarrent.

Je me suis inspiré du fichier original poussé sur le GitHub à cette adresse. Maintenant que tout est prêt, lançons la commande Docker !

cd /data/docker-pihole && sudo docker-compose up -d

Après un court téléchargement des paquets nécessaires, le conteneur va s'initier et se mettre en place. Pour savoir où en est le démarrage, effectuez la commande suivante :

sudo docker ps -a

En toute logique, vous devriez voir votre conteneur dans un état « running ». Si c'est OK, dirigez-vous dans les paramètres de votre carte réseau et modifiez les serveurs DNS pour y mettre « 127.0.0.1 » ou l'adresse IP de votre machine locale.
Pour les utilisateurs d'Ubuntu, vous pouvez désormais couper le daemon « systemd-resolved ».

sudo systemctl stop systemd-resolved

Votre PC doit toujours avoir accès à l'Internet, cette fois en traversant votre PiHole pour effectuer les requêtes DNS !
Ouvrez un navigateur et saisissez l'adresse « 127.0.0.1 » (ou votre IP locale) – vous pourrez accéder à l'interface web de PiHole et notamment à son interface de gestion avec le mot de passe saisi dans le fichier docker-compose.yml.


PiHole permet l'ajout de listes complémentaires pour bloquer les publicités, les outils de télémétrie et bien d'autres ; pour ma part, j'utilise toute les listes fournies à cette adresse - forum discourse PiHole. De base, vous avez environ 150 000 blocages, avec l'ajout des listes du forum vous arriverez à plus d'1,3 million... ! Ces listes bloquent les publicités, les flux vers les outils de télémétrie ou encore les sites web minant des cryptomonnaie à votre insu...