Installation de Pi-Hole sur RpiZeroW
Procédure accélérée de l'installation de Pi-Hole sur un Raspberry-Pi Zero W.
Installation de Raspberry Pi OS Lite
Téléchargement de l'OS
Installer l'image Raspberry Pi OS Lite sur le RPi0W.
Lien des images sur le site.
Préparation accès SSH du RPi0W
Éditer ou créer le fichier BOOT/wpa_supplicant.conf
(soit à la racine de la carte).
country=FR
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="<yourWiFiNetworkName>"
psk="<yourWiFiPassword>"
}
Également à la racine, créer un fichier vide ssh
:
touch ssh
Accès SSH & MàJ
Se connecter en ssh au Rpi (mot de passe par défaut raspberry
):
ssh pi@raspberrypi.local
>[…]
>Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
>[…]
Mise à jour, c'est assez long…
sudo apt-get update && sudo apt-get upgrade -y
On change le mot de passe par défaut de pi
avec la commande passwd
.
J'en profite pour créer mon utilisateur, lui assigner un mot de passe et l'ajouter au groupe sudo
:
sudo useradd -m <username> # -m pour créer le fichier home
sudo passwd <username>
>New password:
>Retype new password:
>passwd: password updated successfully
sudo usermod -aG sudo <username> # -a pour append, -G pour le groupe
Je change le nom de l'appareil sur le réseau :
sudo hostnamectl set-hostname pihole
sudo vim /etc/hosts # pour également changer le nom sur l'ip interne
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 pihole # ici
sudo reboot
J'envoie ma clé publique depuis mon hôte :
ssh-copy-id -i .ssh/id_rsa.pub pihole.local
Je peux me connecter directement :
ssh pihole.local
Automatique update du RPi
Source(s) 1.
sudo apt update
sudo apt install unattended-upgrades
Mettre en place la configuration des màj automatiques.
sudo vim /etc/apt/apt.conf.d/50unattended-upgrades
Décommenter les lignes 29 et 30, pour avoir ceci :
"origin=Debian,codename=${distro_codename}-updates";
"origin=Debian,codename=${distro_codename}-proposed-updates";
"origin=Debian,codename=${distro_codename},label=Debian";
"origin=Debian,codename=${distro_codename},label=Debian-Security";
Rendre la màj automatique effective :
sudo dpkg-reconfigure --priority=low unattended-upgrades
Puis confirmer à l'écran.
Il est possible de vérifier que le service fonctionne bien :
sudo systemctl status unattended-upgrades.service
Pi-Hole
Sources d'installation & configuration 1 2.
Préparation
Il faut paramétrer la box pour attribuer une ip fixe au Rpi.
Installation du Pi-Hole
Liens :
curl -sSL https://install.pi-hole.net | bash
Et on répond aux questions.
Ne pas oublier de mettre le server DNS dans la Box Internet, ou de configurer le DHCP.
Voir en toute fin si 4G Box.
Configuration
Changer le mot de passe
pihole -a -p
Blocklist
Exemple de blocklist :
- Fuzz the Pi Guy
- The Firebob
- FireHOL le lien semble dans le github
Plusieurs urls peuvent être entrées dans les blocklist en étant séparées par des espaces. Si besoin, utiliser regular expressions 101 ( regex : \t\n
pour la sélection) pour faire le tri dans les tabulations et retours de ligne.
Mise à jour de la list Gravity :
sudo pihole -g
Suivant la taille, ça peut mettre du temps.
Test
Sur le site de Fuzz the Pi Guy.
Si ça ne fonctionne pas, d'abord essayer de tout éteindre puis allumer :
- Le Pi-Hole ;
- La Box Internet.
Chronometer
Afin de voir un log en temps réel :
pihole -c
Bonus : Choisir DNS Server sur 4G Box
Par défaut, on ne peut pas voir les paramètres de changement de DNS. Pour afficher l'option, se rendre dans DHCP, puis taper dans la console :
$('#dhcp_dns').css('display', 'block');
Et enfin, entrer l'adresse ip du Pi-Hole.
Installation de DNS Unbound
Installation basée sur la documentation de Pi-hole de unbound, cela permet de mettre en cache les demandes DNS.
Préparatifs
Tout d’abord, on fait une mise à jour :
sudo apt update && sudo apt upgrade -y
Installation de unbound
On vérifie les informations du paquet :
apt show unbound
Il ne s’agit pas de la dernière version, cependant le site officiel conseille de passer par le gestionnaire de paquets plutôt que de le compiler.
Package: unbound
Version: 1.9.0-2+deb10u2
Priority: optional
Section: net
Maintainer: unbound packagers <unbound@packages.debian.org>
Installed-Size: 3,637 kB
Depends: adduser, dns-root-data, lsb-base (>= 3.0-6), openssl, unbound-anchor, libc6 (>= 2.28), libevent-2.1-6 (>= 2.1.8-stable), libfstrm0 (>= 0.2.0), libprotobuf-c1 (>= 1.0.1), libpython3.7 (>= 3.7.0), libssl1.1 (>= 1.1.1), libsystemd0
Suggests: apparmor
Enhances: munin-node
Homepage: https://www.unbound.net/
Download-Size: 671 kB
APT-Sources: http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages
Description: validating, recursive, caching DNS resolver
Unbound is a recursive-only caching DNS server which can perform DNSSEC
validation of results. It implements only a minimal amount of authoritative
service to prevent leakage to the root nameservers: forward lookups for
localhost, reverse for 127.0.0.1 and ::1, and NXDOMAIN for zones served by
AS112. Stub and forward zones are supported.
.
This package contains the unbound daemon.
sudo apt install unbound
Configurer unbound
On crée le fichier /etc/unbound/unbound.conf.d/pi-hole.conf
:
sudo vim /etc/unbound/unbound.conf.d/pi-hole.conf
server:
# If no logfile is specified, syslog is used
# logfile: "/var/log/unbound/unbound.log"
verbosity: 0
interface: 127.0.0.1
port: 5335
do-ip4: yes
do-udp: yes
do-tcp: yes
# May be set to yes if you have IPv6 connectivity
do-ip6: no
# You want to leave this to no unless you have *native* IPv6. With 6to4 and
# Terredo tunnels your web browser should favor IPv4 for the same reasons
prefer-ip6: no
# Use this only when you downloaded the list of primary root servers!
# If you use the default dns-root-data package, unbound will find it automatically
#root-hints: "/var/lib/unbound/root.hints"
# Trust glue only if it is within the server's authority
harden-glue: yes
# Require DNSSEC data for trust-anchored zones, if such data is absent, the zone becomes BOGUS
harden-dnssec-stripped: yes
# Don't use Capitalization randomization as it known to cause DNSSEC issues sometimes
# see https://discourse.pi-hole.net/t/unbound-stubby-or-dnscrypt-proxy/9378 for further details
use-caps-for-id: no
# Reduce EDNS reassembly buffer size.
# Suggested by the unbound man page to reduce fragmentation reassembly problems
edns-buffer-size: 1472
# Perform prefetching of close to expired message cache entries
# This only applies to domains that have been frequently queried
prefetch: yes
# One thread should be sufficient, can be increased on beefy machines. In reality for most users running on small networks or on a single machine, it should be unnecessary to seek performance enhancement by increasing num-threads above 1.
num-threads: 1
# Ensure kernel buffer is large enough to not lose messages in traffic spikes
so-rcvbuf: 1m
# Ensure privacy of local IP ranges
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10
Dans le doute, j'ai forcé la liste des serveurs de noms de racine (root name server) :
wget https://www.internic.net/domain/named.root -qO- | sudo tee /usr/share/dns/root.hints
On redémarre le service :
sudo service unbound restart
Test de la mise ne cache du DNS
dig pi-hole.net @127.0.0.1 -p 5335
; <<>> DiG 9.11.5-P4-5.1+deb10u6-Raspbian <<>> pi-hole.net @127.0.0.1 -p 5335
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19530
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
;; QUESTION SECTION:
;pi-hole.net. IN A
;; ANSWER SECTION:
pi-hole.net. 300 IN A 3.18.136.52
;; Query time: 856 msec
;; SERVER: 127.0.0.1#5335(127.0.0.1)
;; WHEN: Sun Nov 07 15:06:44 CET 2021
;; MSG SIZE rcvd: 56
Si on recommence la précédente commande :
; <<>> DiG 9.11.5-P4-5.1+deb10u6-Raspbian <<>> pi-hole.net @127.0.0.1 -p 5335
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63461
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
;; QUESTION SECTION:
;pi-hole.net. IN A
;; ANSWER SECTION:
pi-hole.net. 283 IN A 3.18.136.52
;; Query time: 0 msec
;; SERVER: 127.0.0.1#5335(127.0.0.1)
;; WHEN: Sun Nov 07 15:07:01 CET 2021
;; MSG SIZE rcvd: 56
On peut surtout remarquer la durée du Query time, on passe de 856 ms à 0 ms.
Test du DNSSEC
Pour se faire, on fait un appel qui doit renvoyer un erreur et un autre qui doit marcher.
dig sigfail.verteiltesysteme.net @127.0.0.1 -p 5335
; <<>> DiG 9.11.5-P4-5.1+deb10u6-Raspbian <<>> sigfail.verteiltesysteme.net @127.0.0.1 -p 5335
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 30491
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
;; QUESTION SECTION:
;sigfail.verteiltesysteme.net. IN A
;; Query time: 1166 msec
;; SERVER: 127.0.0.1#5335(127.0.0.1)
;; WHEN: Sun Nov 07 15:11:42 CET 2021
;; MSG SIZE rcvd: 57
Le status doit être à SERVFAIL
et ne pas fournir d'adresse IP.
dig sigok.verteiltesysteme.net @127.0.0.1 -p 5335
; <<>> DiG 9.11.5-P4-5.1+deb10u6-Raspbian <<>> sigok.verteiltesysteme.net @127.0.0.1 -p 5335
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51837
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
;; QUESTION SECTION:
;sigok.verteiltesysteme.net. IN A
;; ANSWER SECTION:
sigok.verteiltesysteme.net. 60 IN A 134.91.78.139
;; Query time: 89 msec
;; SERVER: 127.0.0.1#5335(127.0.0.1)
;; WHEN: Sun Nov 07 15:12:15 CET 2021
;; MSG SIZE rcvd: 71
Le status doit être à NOERROR
et fournir une adresse IP.
Configuration du Pi-hole
À la page d’administration du Pi-hole, dans la partie Settings, on désactive tous les serveurs DNS précédemment entrés puis on inscrit l’adresse du localhost
suivi du port de unbound (séparé par un #
), à savoir 127.0.0.1#5335
.
Cloudflared (DoH)
À voir ici.
VPN : WireGuard
La doc est ici.