Déployer un résolveur DNS chiffré (DoT/DoH) sécurisé sur Freebox Ultra avec DietPi, AdGuard Home, Fail2ban et Certbot (DNS Scaleway)
Ce guide détaille la mise en place d'un résolveur DNS réseau local et nomade, avec chiffrement TLS automatisé sans aucun port web ouvert, dual-stack IPv4/IPv6, et protection contre les attaques par force brute.
Architecture et prérequis
- Hôte : Freebox Ultra (stockage NVMe/SSD actif).
- Système invité : Machine virtuelle DietPi (Debian minimaliste, 2 vCPU, 512 Mo de RAM).
- Nom de domaine : Géré chez Scaleway (ex.
example.comet sous-domainedns.example.com). - Services : AdGuard Home, Certbot (
certbot-dns-scaleway), Fail2ban.
Création de la VM et fixation des adresses IP
Réseau local IPv4
- Sur Freebox OS (
[http://mafreebox.freebox.fr](http://mafreebox.freebox.fr)), va dans Paramètres de la Freebox > Mode avancé > DHCP. - Repère l'adresse MAC de la VM DietPi et ajoute un bail statique (ex.
192.168.1.2).
Activation IPv6 sur DietPi
Pour permettre la résolution IPv6 sur le LAN :
Redémarre l'interface et relève ton adresse globale (2a01:...) :
sudo systemctl restart networking
ip -6 addr show dev eth0 scope global
Assure-toi que le noyau accepte l'IPv6 et les annonces de routeur :
echo -e "net.ipv6.conf.all.disable_ipv6 = 0\nnet.ipv6.conf.all.accept_ra = 2\nnet.ipv6.conf.eth0.accept_ra = 2" | sudo tee /etc/sysctl.d/99-ipv6.conf
sudo sysctl --system
Édite la configuration d'interface :
sudo nano /etc/network/interfaces.d/eth0.conf
Renseigne :
allow-hotplug eth0
iface eth0 inet dhcp
iface eth0 inet6 dhcp
Automatisation des certificats TLS (Challenge DNS Scaleway)
Cette méthode permet d'émettre et renouveler des certificats sans ouvrir le port 80 vers l'extérieur.
Clé d'API Scaleway
- Sur la console Scaleway : Identifiants d'API > Générer une clé API.
- Relève la Secret Key et l'Access Key (ou Projet/Organisation ID).
Installation du plugin et stockage sécurisé
sudo apt update && sudo apt install -y python3-pip
sudo pip3 install certbot-dns-scaleway --break-system-packages
sudo mkdir -p /etc/letsencrypt/secrets
sudo nano /etc/letsencrypt/secrets/scaleway.ini
Contenu de scaleway.ini :
dns_scaleway_application_token = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
dns_scaleway_organization_id = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Verrouille les permissions :
sudo chmod 600 /etc/letsencrypt/secrets/scaleway.ini
sudo chmod 700 /etc/letsencrypt/secrets
Hook de déploiement automatique des droits
L'utilisateur système adguardhome sous DietPi a besoin d'accéder aux clés privées :
sudo nano /etc/letsencrypt/renewal-hooks/deploy/adguard-permissions.sh
Ajoute :
#!/bin/bash
chmod 755 /etc/letsencrypt/live /etc/letsencrypt/archive
chmod 755 /etc/letsencrypt/live/dns.example.com /etc/letsencrypt/archive/dns.example.com
chmod 644 /etc/letsencrypt/archive/dns.example.com/privkey*.pem
systemctl restart adguardhome
Rends le script exécutable :
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/adguard-permissions.sh
Génération du certificat
sudo certbot certonly \
--authenticator dns-scaleway \
--dns-scaleway-credentials /etc/letsencrypt/secrets/scaleway.ini \
--dns-scaleway-propagation-seconds 30 \
-d dns.example.com
# Exécute manuellement le hook pour la première initialisation
sudo /etc/letsencrypt/renewal-hooks/deploy/adguard-permissions.sh
Configuration et optimisation d'AdGuard Home
Chiffrement (DoH / DoT)
Dans l'interface AdGuard Home (Paramètres > Chiffrement) :
- Nom du serveur :
dns.example.com - Chemin vers le certificat :
/etc/letsencrypt/live/[dns.example.com/fullchain.pem](https://dns.example.com/fullchain.pem) - Chemin vers la clé privée :
/etc/letsencrypt/live/[dns.example.com/privkey.pem](https://dns.example.com/privkey.pem) - Coche Redirection automatique vers HTTPS.
Optimisation du cache et des performances
Dans Paramètres > Paramètres DNS :
- Coche Requêtes parallèles.
- Taille du cache :
67108864(64 Mo, idéal pour 512 Mo de RAM). - TTL minimal :
300secondes. - TTL maximal :
86400secondes. - Coche Mise en cache optimiste (Optimistic caching).
Serveurs amont (Upstream) :
tls://dns.quad9.net
tls://1.1.1.1
tls://1.0.0.1
Résolution inverse des noms locaux (PTR)
Toujours dans Paramètres DNS > section Serveurs DNS privés inversés :
- Coche Utiliser les serveurs DNS privés inversés et Activer la résolution inverse pour les adresses locales.
- Dans le champ dédié, saisis la passerelle Freebox :
192.168.1.254.
Sécurisation de l'interface avec Fail2ban
Journalisation AdGuard Home
Édite /mnt/dietpi_userdata/adguardhome/AdGuardHome.yaml :
log:
file: /var/log/adguardhome.log
verbose: false
Prépare le fichier de journalisation :
sudo touch /var/log/adguardhome.log
sudo chown adguardhome:adguardhome /var/log/adguardhome.log
sudo chmod 644 /var/log/adguardhome.log
sudo systemctl restart adguardhome
Filtre et prison Fail2ban
Crée le filtre /etc/fail2ban/filter.d/adguardhome.conf :
[Definition]
failregex = ^.*\[web\].*invalid username or password.*from <HOST>:\d+
ignoreregex =
datepattern = %%Y/%%m/%%d %%H:%%M:%%S
Ajoute la prison dans /etc/fail2ban/jail.local :
[sshd]
enabled = true
port = ssh
maxretry = 3
bantime = 1h
[adguardhome]
enabled = true
port = 80,443,8083
filter = adguardhome
logpath = /var/log/adguardhome.log
maxretry = 3
bantime = 24h
Redémarre le service :
sudo systemctl restart fail2ban
sudo fail2ban-client status adguardhome
Application sur le réseau local et ouverture externe ciblée
Déploiement LAN sur la Freebox Ultra
- IPv4 : Paramètres de la Freebox > Mode avancé > DHCP > Renseigne l'IP locale (ex.
192.168.1.2) en DNS 1. Laisse DNS 2 vide. - IPv6 : Paramètres de la Freebox > Mode avancé > Configuration Réseau > IPv6 > Renseigne l'adresse IPv6 globale (ou le lien-local
fe80::...) en DNS IPv6 1. Laisse DNS IPv6 2 vide.
Règles de pare-feu et accès nomade
- En usage strictement local : Aucun port externe ne doit être ouvert sur la Freebox.
- En usage nomade (smartphone en 4G/5G) :
- Ouvre le port TCP 853 pour le DNS-over-TLS (DoT).
- Ouvre le port TCP 443 si tu souhaites utiliser le DNS-over-HTTPS (DoH).
- Ne jamais rediriger le port 53 vers Internet (risque d'amplification DNS / Open Resolver).
- Le port 80 reste hermétiquement fermé grâce au challenge DNS Scaleway.