Déployer un résolveur DNS chiffré (DoT/DoH) sécurisé sur Freebox Ultra avec DietPi, AdGuard Home, Fail2ban et Certbot (DNS Scaleway)

Déployer un résolveur DNS chiffré (DoT/DoH) sécurisé sur Freebox Ultra avec DietPi, AdGuard Home, Fail2ban et Certbot (DNS Scaleway)
Photo by Compare Fibre / Unsplash

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.com et sous-domaine dns.example.com).
  • Services : AdGuard Home, Certbot (certbot-dns-scaleway), Fail2ban.

Création de la VM et fixation des adresses IP

Réseau local IPv4

  1. Sur Freebox OS ([http://mafreebox.freebox.fr](http://mafreebox.freebox.fr)), va dans Paramètres de la Freebox > Mode avancé > DHCP.
  2. 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

  1. Sur la console Scaleway : Identifiants d'API > Générer une clé API.
  2. 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 : 300 secondes.
  • TTL maximal : 86400 secondes.
  • 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

  1. 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.
  2. 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.