l’Almanet doLys Gnu/Linux – Open Source – Entreprises › Forums › L’almanet doLys Open Source › Installer Pi-hole avec DNS-over-HTTPS (DoH) et dnscrypt-proxy sous Docker : bloquer les publicités et interroger des résolveurs souverains
- This topic is empty.
-
AuteurArticles
-
avril 12, 2025 à 4:05 pm #12833
Introduction
Je vous propose ici une alternative à la résolution DNS récursive locale avec Unbound : une stack 100% DNS-over-HTTPS, souveraine, chiffrée, et sans fuite.
Grâce à Pi-hole et dnscrypt-proxy, je peux résoudre toutes mes requêtes DNS via des serveurs DoH de confiance (ni Google, ni Cloudflare, ni FAI…), tout en profitant du blocage publicitaire offert par Pi-hole. Le tout encapsulé dans Docker, pour garder un système propre, léger et portable.
Contrairement au DNS traditionnel ou même au DoT (DNS over TLS), le DoH (DNS over HTTPS) fait passer vos requêtes DNS dans le même flux que votre trafic web normal. C’est comme si vos requêtes DNS se déguisaient en requêtes web ordinaires. Pour votre FAI ou n’importe quel observateur sur le réseau, impossible de distinguer quand vous naviguez et quand vous effectuez une résolution DNS – tout se fond dans le même trafic chiffré. C’est l’arme parfaite contre la censure et la surveillance.
Astuce : si vous hésitez entre DOH et DOT (que je vous ai présenté dans un premier tuto), voici un petit switch pour passer de l’un à l’autre.
Pourquoi cette méthode ?
– Pour vous protéger des DNS menteurs (coucou les FAI des pays européens…)
– Pour chiffrer toutes vos requêtes DNS jusqu’à des résolveurs externes de confiance
– Pour centraliser le filtrage DNS sur un poste de travail ou un réseau local
– Et, bien sûr, pour gagner en souveraineté sur votre propre infrastructure numériquePrérequis
Avant de commencer, assurez-vous d’avoir :
– Un Linux à jour
– Docker + Docker Compose installés
– Un terminal et un accès sudoInstallation de Docker (si pas déjà fait)
Pour les distributions basées sur Arch (EndeavourOS, Manjaro, Garuda, etc.) :
# Installation de Docker et Docker Compose sudo pacman -S docker docker-compose # Démarrage et activation du service Docker sudo systemctl enable --now docker # Ajout de votre utilisateur au groupe docker (évite de devoir utiliser sudo) sudo usermod -aG docker $USER
Pour les distributions basées sur Debian (Debian, Linux Mint, etc.) :
# Installation des prérequis sudo apt update sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release # Ajout de la clé GPG et du dépôt Docker curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Pour Mint basé sur Ubuntu, remplacez la ligne ci-dessus par celle-ci: # echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Installation des packages Docker sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # Démarrage et activation du service Docker sudo systemctl enable --now docker # Ajout de votre utilisateur au groupe docker sudo usermod -aG docker $USER
Après avoir ajouté votre utilisateur au groupe docker, déconnectez-vous et reconnectez-vous pour que les changements prennent effet.
Mise en place de la stack DNS-DoH
Je vais travailler ici dans un répertoire dédié :
mkdir -p ~/docker/dns-doh cd ~/docker/dns-doh
1. Télécharger les images Docker
Avant de couper l’ancien DNS, je récupère les images nécessaires :
docker pull klutchell/dnscrypt-proxy docker pull pihole/pihole
2. docker-compose.yml
Je crée le fichier suivant :
nano docker-compose.yml
Et j’y mets :
services: dnscrypt-proxy: container_name: dnscrypt-proxy image: klutchell/dnscrypt-proxy restart: unless-stopped volumes: - ./dnscrypt-proxy:/config networks: dnsnet: ipv4_address: 172.22.0.2 deploy: resources: limits: cpus: '0.5' memory: 256M reservations: cpus: '0.2' memory: 128M pihole: container_name: pihole image: pihole/pihole:latest restart: unless-stopped depends_on: - dnscrypt-proxy hostname: pihole env_file: - .env volumes: - ./etc-pihole:/etc/pihole - ./etc-dnsmasq.d:/etc/dnsmasq.d ports: - "53:53/tcp" - "53:53/udp" - "80:80/tcp" networks: dnsnet: ipv4_address: 172.22.0.3 cap_add: - NET_ADMIN deploy: resources: limits: cpus: '0.5' memory: 512M reservations: cpus: '0.2' memory: 256M networks: dnsnet: ipam: config: - subnet: 172.22.0.0/24
3. .env
Je crée un fichier `.env` avec les variables nécessaires :
nano .env
Contenu (à adapter bien sûr) :
WEBPASSWORD='votre_mot_de_passe_super_sécurisé' TZ=Europe/Paris DNS1=172.22.0.2#53 DNS2=no
4. Configuration de dnscrypt-proxy
Je prépare le dossier de configuration :
mkdir -p dnscrypt-proxy nano dnscrypt-proxy/dnscrypt-proxy.toml
Et je configure dnscrypt-proxy pour utiliser uniquement des serveurs DoH fiables, hors des 14-Eyes autant que possible, et sans conservation de logs :
server_names = ['ibksturm', 'pf-dnscrypt', 'uncensoreddns', 'altername', 'iij', 'libredns'] listen_addresses = ['127.0.0.1:53'] ipv4_servers = true ipv6_servers = false dnscrypt_servers = true doh_servers = true require_nolog = true require_nofilter = true ignore_system_dns = true cache = true cache_size = 4096 timeout = 5000
Cette configuration utilise des serveurs prédéfinis plutôt que des définitions statiques, ce qui évite les erreurs de syntaxe avec les « stamps ». Les serveurs choisis sont réputés pour leur confidentialité et leur absence de censure.
5. Démarrage
Une fois tout en place, je lance la stack :
docker compose up -d
[spoiler= »Note pour distributions plus anciennes »]
Sur les systèmes plus anciens, vous devrez peut-être utiliser la commande avec un tiret:docker-compose up -d
[/spoiler]
6. Configuration des DNS du système
Maintenant, je dois configurer mon système pour utiliser Pi-hole comme résolveur DNS.
Pour les distributions utilisant systemd-resolved (la plupart des distributions modernes):
# Désactiver le service systemd-resolved sudo systemctl disable --now systemd-resolved # Configurer le fichier resolv.conf echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf
Pour les distributions basées sur Arch utilisant NetworkManager:
# Configurer NetworkManager pour ne pas modifier resolv.conf sudo mkdir -p /etc/NetworkManager/conf.d/ echo -e "[main]\ndns=none" | sudo tee /etc/NetworkManager/conf.d/dns.conf # Redémarrer NetworkManager sudo systemctl restart NetworkManager # Configurer resolv.conf echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf
Pour les distributions basées sur Debian utilisant resolvconf:
# Installer resolvconf si ce n'est pas déjà fait sudo apt install -y resolvconf # Configurer les nameservers echo "nameserver 127.0.0.1" | sudo tee /etc/resolvconf/resolv.conf.d/head # Appliquer les changements sudo resolvconf -u
7. Test
Je vérifie simplement avec :
dig debian.org @127.0.0.1
Je peux aussi faire un `docker logs dnscrypt-proxy` pour voir quels résolveurs ont été détectés et lesquels sont utilisés.
Pour accéder à l’interface web de Pi-hole, ouvrez un navigateur et allez à http://localhost/admin ou http://127.0.0.1/admin.
8. Installation des outils pour le DNS Switcher (optionnel)
Si vous souhaitez installer l’interface graphique pour le DNS Switcher mentionné au début, vous aurez besoin de yad :
Sur Arch et dérivés :
sudo pacman -S yad
Sur Debian et dérivés :
sudo apt install -y yad
Vous pourrez ensuite suivre le tutoriel sur le DNS Switcher pour basculer facilement entre vos configurations DoT et DoH.
Conclusion
Cette solution me permet d’utiliser une résolution DNS chiffrée de bout en bout, sans aucun passage par les serveurs de mon FAI, tout en bénéficiant de la protection publicitaire de Pi-hole.
Elle complète la stack DNS récursive avec Unbound DoT, selon le degré de contrôle que je veux exercer :
– Résolution récursive locale (DoT) : contrôle total et validation DNSSEC
– DNS-over-HTTPS souverain : confidentialité maximale et contournement de la censureVous n’avez plus d’excuse pour laisser des FAI ou ennemis de la pensée espionner vos résolutions DNS, surtout dans le pays des Lumières 😉
Documentation utile :
– https://dnscrypt.info/
– https://docs.pi-hole.net/
– https://github.com/DNSCrypt/dnscrypt-proxy/wiki/ConfigurationVérification et dépannage
Les configurations DNS-over-HTTPS peuvent parfois donner des résultats surprenants lors des tests en ligne. Pour bien comprendre comment vérifier votre installation et interpréter correctement les tests de fuite DNS, référez-vous à notre guide dédié au dépannage et à la vérification DNS.
Voilà ! 🙂
Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc
-
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.