J’ai passé ma matinée de dimanche à restructurer complètement mon système de DNS bloqueur de pubs et anti-malware basé sur Pi-Hole (assez traditionnel pour un lab). Oui ok certains tondent leur pelouse, moi je refait mes DNS … écoutez, chacun son kiff !! D’ailleurs, je n’avais pas changé cette configuration depuis plusieurs années… Voici donc sur quoi je suis parti.

Prérequis pour cette installation. Je voulais que :

  • l’architecture soit hautement disponible (car elle allait être déployée sur deux Raspberry Pi 5 différents) ;
  • les deux composants, anti-spam/anti-pub et DNS, soient séparés (pour pouvoir les modifier facilement en cas de besoin) ;
  • le DNS fonctionne en mode cluster, c’est-à-dire qu’une mise à jour d’une zone sur l’une des instances soit automatiquement répliquée sur la seconde ;
  • le système utilise le DoH (DNS over HTTPS) en externe, tout en restant accessible facilement en interne, sans complexité particulière, via un DNS traditionnel sur le port UDP 53 ;
  • les composants soient déployés en conteneurs, pour assurer une compatibilité avec Docker, Podman, Kubernetes, etc., et accessoirement, être déployables via Docker Compose et automatisables avec Ensile.

Un beau programme s’il en est ! J’ai opté pour deux socles pour monter cette plateforme :

  • AdGuard Home pour la partie adblocking, une référence en la matière.
  • Technitium pour la partie DNS classique (je vous en avais déjà parlé : c’est un super DNS, full open source, une interface web géniale et il dispose nativement d’un mode cluster qui fonctionne superbement bien).

Voici le schéma synoptique de l’architecture :

J’ai installé séparément les deux résolveurs AdGuard et les deux membres de mon cluster Technitium, que j’ai reliés via le système de clustering dédié, même si, avec le mécanisme de base du DNS, on aurait pu s’en sortir sans utiliser cette fonction spécifique (zone primaire, zone secondaire notifiée, etc.).

Pour les deux AdGuard, pas de besoin particulier, car j’ai utilisé une fonction native supplémentaire de Technitium : le Load Balancing de résolveurs. J’ai donc indiqué dans la configuration que mes deux résolveurs AdGuard devaient être utilisés simultanément, en fonction d’un mécanisme classique de Round Robin avec double vérification de disponibilité (oui/non).

Ce sont donc quatre conteneurs déployés via Docker Compose sur mes deux Raspberry Pi qui sont désormais en DNS primaire et secondaire. Côté résolveur public, j’ai opté pour trois services DoH neutres :

  • Côté local/français, il s’agit des deux serveurs DoH de French Data Network (si vous ne connaissez pas, allez faire un tour pour voir ce qu’ils font, c’est vraiment sympa : c’est en substance un fournisseur d’accès associatif. Vous pouvez même commander un accès résidentiel si ça vous tente — ça m’a tenté plusieurs fois, mais je ne suis encore jamais passé à l’acte…).
  • Côté européen, j’ai opté pour DNS4EU, donc l’initiative m’a séduit ! Après, question de conviction, je vous laisse seul juge 😉

Bref, j’y ai passé ma matinée pour vraiment tester ça en profondeur, et je suis arrivé à un système qui me satisfait ! À vous de me dire si j’ai déconné ou les raisons pour lesquelles vous auriez fait différemment. Honnêtement, je suis quasi certain que ce système pourrait être déployé dans une entreprise en garantissant un niveau de service acceptable… sachant que, chez nous, on n’a qu’une poignée de serveurs DNS internes pour plus de 15 000 clients au minimum.

Dites-moi ce que vous en pensez, je suis curieux !

Références :
– Technitium : https://github.com/TechnitiumSoftware/DnsServer
– AdGuard Home : https://github.com/AdguardTeam/AdGuardHome
– French Data Network « FDN » : https://www.fdn.fr
– Initiative DNS4EU : https://joindns4.eu

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *