Introduction
Pi-Hole est un serveur DNS auto hébergé. Il présente de nombreux avantages : bloqueur de pubs, protection supplémentaire, accélérateur de navigation et monitoring de votre réseau via une interface web. C’est vraiment un ‘must have’ pour un NAS. C’est un bon complément des bloqueurs que vous pouvez avoir dans vos navigateurs; mais le gros avantage, c’est qu’il agit en amont. Nous allons installer ‘pi-hole‘ avec docker compose et Portainer (voir l’article Prise en main de Docker et Portainer pour le détail) dans cette article.
Pour cette installation j’utilise l’image officielle qui est présente ici : github.com/pi-hole/docker-pi-hole
J’ai créé au préalable un utilisateur omdocker (voir l’article création d ‘un utilisateur Docker pour le détail). J’ai créé aussi un répertoire qui contiendra tous mes installations docker. dans ce blog, j’utiliserais pour exemple le chemin /volume/docker.
Nous allons créer aussi le répertoire mariadb en ligne de commande sur le NAS (connexion en SSH) dans notre répertoire docker : /volume/docker. Cette étape est facultative, le containeur créera le répertoire automatiquement lors du déploiement si celui ci n’existe pas.
mkdir pihole
Liaison réseau avec le LAN
Par défaut les containeurs possèdent leur propre réseau isolé, indépendant de votre LAN. Nous allons donc créer une interface “macvlan” au niveau de docker pour relier le réseau du containeur à notre LAN. Nous devrons aussi créer une interface “macvlan” au niveau de notre NAS pour assurer un pont entre les deux.
Création des macvlan
Nous allons définir un bloc d’adresse de 4 digit (15 adresses) qui sera routé à notre interface virtuelle du coté du LAN. L’adresse IP de notre « macvlan’ coté docker devra être compris dans ce bloc d’adresse.
Nous allons partir sur ces hypothèses là :
- L’adresse IP de notre NAS est : ‘192.168.2.2‘,
- L’adresse IP de notre passerelle est ‘192.1.168.2.1‘,
- L’adresse IP de notre interface réseau virtuelle coté NAS sera ‘192.168.2.170‘,
- L’adresse IP de notre containeur Pi-Hole sera ‘192.168.2.151‘,
- Notre bloc d’adresse aura le masque suivant ‘192.168.2.150/28‘. Il commencera à l’adresse 192.168.2.151 et finira à l’adresse 192.168.2.164,
- Le réseau virtuelle coté docker s’appellera ‘omvvlan-network‘,
- L’interface virtuelle coté NAS s’appellera ‘eno1-vlan‘,
- L’interface réseau de notre NAS s’appelle ‘eno1‘.
Création de notre réseau virtuelle avec Docker
Tapez la commande suivante pour créer notre interface réseau virtuelle ‘macvaln’, puis vérifier la présence du nouveau réseau :
$ sudo docker network create -d macvlan \
--subnet=192.168.2.0/24 \
--ip-range=192.168.2.150/28 \
--gateway=192.168.2.1 \
-o parent=eno1 \
omvvlan-network
Création de notre interface virtuelle coté NAS
Nous allons créer le script ‘eno1-vlan.sh‘ pour monter cette interface réseau virtuelle au démarrage du NAS :
ip link add eno1-vlan link eno1 type macvlan mode bridge
ip addr add 192.168.2.170/32 dev eno1-vlan
ip link set dev eno1-vlan address B2:54:2B:8F:4D:58
ip link set eno1-vlan up
ip route add 192.168.2.150/28 dev eno1-vlan
Le script devra être lancé au démarrage du NAS via le cron. Pour cela nous créons une tache cron spécifiques (voir l’article Tâches planifiées avec OMV pour le détail) avec le code suivant à ajouter dans un fichier dans le répertoire /etc/cron.d (l’envoi d’email est optionnel).
Exécutez votre script et vérifier que votre interface virtuelle est bien montée :
$ sudo ./eno1-vlan.sh<br/>
$ ip a | grep eno1-vlan
Le fichier de configuration
Si vous souhaitez sécuriser le lancement de ‘pi-hole‘, je vous engage à parcourir l’article sécuriser docker.
Il est importent de bien respecter l’indentation des fichiers de configurations : pas de tabulation. Attention aussi à la version du fichier, il y a des légères évolutions de syntaxe d’une version à l’autre.
Le fichier yml en détails. Il faut remplacer pour votre configuration :
- UID et PGID : celui de votre utilisateur Docker (omdocker pour ce blog),
- TZ : Votre zone de temps
version: "3"
services:
pihole:
container_name: pi-hole
image: pihole/pihole
hostname: pi-hole
networks:
omvvlan-network:
ipv4_address: 192.168.2.151
ports:
- 53:53/tcp # dns
- 53:53/udp # dns
environment:
- PUID=1003
- PGID=100
- TZ=Europe/Paris
- WEBPASSWORD=passwd # mot de passe de l'interface web
volumes:
- /volume/docker/pihole/etc-pihole:/etc/pihole/
- /volume/docker/pihole/etc-dnsmasq.d:/etc/dnsmasq.d/
restart: unless-stopped
networks:
omvvlan-network:
external: true
Vous copiez le contenu de ce fichier dans votre interface de gestion Portainer en allant dans ‘Stacks‘ et ‘Add stack‘.
Donnez un nom à votre pile, par exemple ‘pi-hole‘, puis déployer cotre containeur en cliquant en bas sur “Deploy the stack”.
Après une phase de téléchargement de l’image, puis d’installation de l’application, vous devriez arriver sur cet écran si tout s’est bien passé :
Nous pouvons maintenant nous connectez à ‘pi-hole‘ avec l’URL http://192.168.2.151
Configuration de Pi-Hole
Il reste encore un peu de configuration a effectuer pour rendre pleinement fonctionnel ‘Pi-Hole’.
Configuration du serveur DNS externe
Pi-Hole contient plusieurs serveur DNS pré-défini; j’utilise ceux de Cloudfare pour ma part :
Configuration local DNS des périphériques du réseau
Par défaut, ‘Pi-Hole’ affiche l’adresse IP de vos périphériques mais vous pouvez définir une translation de nom pour chacun d’eux :
Listes de blocages
Vous pouvez ajouter des listes de blocages distantes ou locales. Vous en trouvez beaucoup à ces adresses : avoidthehack et The FireBorg. Elles s’ajoutent via l’interface (URL + Commentaires). Certaines listes peuvent être redondantes.
Gestion des domaines
Vous avez aussi la possibilité de gérer le blocage ou l’autorisation des domaines via un simple clic de souris puis de les personnaliser avec des expressions régulières :