Après plus de 2 ans d'utilisation de Pi-Hole (voir l'article sur sa mise en place) et des milliers, des millions de publicités bloquées sur mon réseau et tous les appareils qui y sont connectés, j'ai remarqué que nous étions de plus en plus confrontés à l'apparition intempestive de publicités, notamment dans des jeux sur mobiles. Ce problème ajouté à une interface n'ayant pas évoluée, disponible uniquement en anglais, avec une obligation de faire les mises à jour en se connectant en SSH sur la machine qui hébergeait Pi-Hole, m'a amené à faire quelques recherches pour lui trouver un potentiel remplaçant.

Je suis vite tombé sur AdGuard, qui semblait prometteur et annonçait de meilleures performances, une interface plus moderne, une meilleure stabilité et surtout des fonctionnalités plus avancées ou absentes de Pi-Hole.
Le tableau suivant compare les 2 solutions :


Avant de continuer, voici un petit rappel de ce qu'est et comment fonctionne un DNS : le DNS (pour Domain Name Service, ou système de noms de domaine) est un service informatique distribué utilisé pour traduire les noms de domaine Internet en adresse IP. Un équipement qui cherche à se connecter à un site internet va interroger un serveur DNS pour obtenir l'adresse IP correspondante au nom de domaine voulu. Avec cette information, l'équipement pourra afficher le contenu du nom de domaine.


AdGuard est disponible en tant qu'application Windows, Linux, MacOS, Android et iOS, ou encore en tant qu'extension pour vos navigateurs. De notre côté, nous allons choisir AdGuard Home, qui peut être exécuté en tant que conteneur Docker, à notre habitude.
Voici la structure des répertoires pour la mise en place de notre stack (à créer avec la commande mkdir -p  adguard/{work,conf}) :

/docker/adguard
├── work/
├── conf/
└── docker-compose.yml

Le fichier docker-compose.yml doit avoir le contenu suivant :

version: '3.8'
services:
  adguard:
    container_name: adguardhome
    image: adguard/adguardhome
    environment:
      - TZ=Europe/Paris
    volumes:
      - ./work:/opt/adguardhome/work
      - ./conf:/opt/adguardhome/conf
    ports:
      - 53:53/tcp  # port DNS
      - 53:53/udp  # port DNS
      - 67:67/udp  # port DHCP serveur BOOTP
      - 68:68/tcp  # port DHCP client BOOTP
      - 68:68/udp  # port DHCP client BOOTP
      - 80:80/tcp  # port HTTP
      - 443:443/tcp  # port HTTPS
      - 853:853/tcp  # port DNS over TLS
      - 3000:3000/tcp  # port HTTP temporaire pour la première configuration d'AdGuard
#    network_mode: host  # nécessaire si AdGuard Home est utilisé en tant que serveur DHCP
    restart: unless-stopped

Ceux qui connaissent Docker-Compose pourraient me dire que lister tous les ports utilisés par conteneur utilisant le mode réseau host ne sert à rien, et ils auraient presque raison. Cela permet quand même de pouvoir spécifier un port spécifique pour l'interface web si vous avez déjà ce port utilisé par un autre conteneur Docker, ou tout simplement pour se rappeler de tous les ports utilisés par notre conteneur.

Lancez la stack avec la commande docker-compose up -d et rendez-vous avec votre navigateur sur l'URL http://IP.DE.VOTRE.DOCKER:3000 pour la configuration.
Une fois la configuration effectuée, vous serez redirigés sur l'interface d'accueil, moderne et épurée, affichant quelques statistiques qui se mettront à jour au fil du temps.

Il faudra bien entendu configurer vos périphériques pour qu'ils utilisent votre conteneur Adguard Home en tant que serveur DNS, soit unitairement en modifiant les paramètres IP de chacun des clients sur lesquels vous souhaitez filtrer le trafic, ou en renseignant l'IP de votre hôte Docker en tant que serveur DNS par défaut dans la configuration de votre routeur.

Vous avez la possibilité d'activer une protection parentale ou un blocage automatique des contenus malveillants, depuis la page "Paramètres", puis "Paramètres généraux". Une page prévenant les utilisateurs qu'ils sont sur un site bloqué leur sera affiché dans ce cas.

Sur la page "Paramètres", puis "Paramètres DNS", vous pourrez configurer les serveurs DNS que vous souhaitez utiliser. Quelques exemples vous sont donnés, et vous trouverez sur le site d'AdGuard une liste complète de serveurs DNS recommandés selon leurs niveaux de sécurité, de confiance, de blocage.

A noter que parmi les différents types de serveurs DNS pouvant être configurés, différents niveaux de sécurité sont offerts :

  • DNS en IPv4 ou IPv6 : résolution de nom classique, l'URL est envoyée au résolveur DNS et vous recevez en retour l'adresse IP du site que vous voulez consulter. Il s'agit du protocole original créé en 1983 et défini par la RFC 882, mais il est ancien et non sécurisé, et il est possible en écoutant le trafic de voir les sites que vous consultez.
  • DNSCrypt en IPv4 ou IPv6 : la communication entre votre appareil et le serveur DNS est cryptée, ce qui protège les attaques de type "man-in-the-middle". Cette solution n'est pas reconnue officiellement.
  • DNS-over-TLS, aussi appelé DoT : les requêtes DNS sont cryptées et encapsulées via le protocole TLS. Plus sécurisé que DNSCrypt, il est reconnu officiellement par la RFC 7858.
  • DNS-over-HTTPS, aussi appelé DoH : la résolution DNS est effectuée à travers une connexion HTTPS, également plus sécurisée que DNSCrypt et qui permet de faire transiter le trafic par le port 443 au lieu du 853 pour le DoT, ce qui peut être utile au sein de réseaux d'entreprises, qui filtrent souvent leur trafic réseau. Relativement nouveau, ce protocole n'est pas encore supporté par tous les périphériques. Il est défini par la RFC 8484.

Il est également possible de définir des règles de filtrage personnalisées depuis le menu "Filtres", puis "Règles de filtrage personnalisées". Cela vous permet de définir vous-mêmes des sites en liste de sites autorisés / bloqués. Une petite aide est affichée et vous permettra de correctement définir vos règles :

  • ||example.org^ pour bloquer l'accès au domaine exemple.org et à tous ses sous-domaines
  • @@||example.org^ pour autoriser explicitement le domaine exemple.org et tous ses sous-domaines

Dernière fonctionnalité intéressante, il est possible de bloquer les principaux réseaux sociaux de manière très rapide.

Enfin, la page "Journal des requêtes" vous permettra d'observer toutes les requêtes DNS passant par Adguard.

Vous trouverez ci-dessous une vidéo présentant la navigation au sein de l'interface d'Adguard Home :


Après environ un mois d'utilisation, je confirme ma première impression, à savoir que je préfère AdGuard Home à Pi-Hole, même si j'ai encore de temps en temps quelques publicités dans certains jeux ou dans des vidéos Youtube, mais c'est surtout parce que les annonceurs cherchent en permanence des moyens pour contourner les bloqueurs de publicité, et ils y arrivent en partie.

En conclusion, je suis satisfait d'AdGuard Home et vais essayer d'affiner les réglages disponibles pour améliorer encore plus la détection des publicités, notamment par l'ajout de listes de blocages additionnelles.
Je vous recommande fortement de mettre une solution de ce type en place sur votre réseau, cela sera apprécié par toutes les personnes de votre domicile et vous fera également économiser de la bande passante. Et je vous conseille d'utiliser des serveurs DNS fournissant du DoT ou DoH. Personnellement, j'ai choisi les services de Quad9 (en DNS-over-HTTPS), un résolveur DNS ouvert et qui se veut protecteur de notre vie privée, en bloquant les sites frauduleux et qui n'enregistre pas le trafic qui passe par ses serveurs.

N'hésitez pas à laisser un commentaire si cet article vous a plu ou si vous avez une question à propos de cette mise en place. Et si vous voulez discuter un peu plus d'AdGuard ou à propos d'autres sujets, je vous invite à nous rejoindre sur notre groupe Telegram. Merci pour votre lecture !