AdGuard Home

Guide pas à pas pour installer et configurer AdGuard Home en tant que serveur DNS.

Introduction

On ne présente plus Pi-hole, serveur DNS et DHCP open source qui permet (en pratique) de minimiser les flux réseaux inutiles voire néfastes sur votre réseau local (publicité, tracking, malware...). AdGuard Home est tout simplement un concurrent, open source également. Ayant récemment acquis un nouveau routeur plus "flexible", j'en ai profité pour installer AdGuard Home. Je vais tâcher de vous décrire au mieux, étape par étape, l'intégration de cet outil dans mon environnement.

Outils utilisés

  • AdGuard Home : serveur DNS / DHCP open source (abrégé AdGuard dans cet article)

  • Portainer : qui permet d'interagir avec Docker via une interface de gestion / administration dédiée. Utile pour vérifier via un UI ce que les commandes que l'on exécute avec la CLI.

  • Docker : qui est le socle pour faire tourner le reste. Ainsi que docker-compose que nous utiliserons dans ce déploiement pour des raisons techniques.

Pré-requis

  • Une box internet dans laquelle vous pouvez personnaliser la configuration DHCP et choisir le serveur DNS de votre choix. Si, comme dans mon cas (SFR NB6) ce n'est pas possible, il vous faudra faire l'acquisition d'un routeur qui vous le permet ou bien de vous amuser (spoiler: ça n'est pas marrant du tout) à configurer tous vos périphériques manuellement.

  • Un serveur opérationnel avec Docker, docker-compose et idéalement Portainer. Je vous invite à consulter mon tutoriel dédié pour cela.

Les branchements

Je ne vais pas vous faire l'affront de vous expliquer comment brancher une box internet, mais j'en profite pour une précision : je vais, dans le cadre de cet article, expliquer l'intégration dans mon environnement (à savoir box internet + routeur dédié). Par chance, il s'agit du cas "compliqué" et dans le cas où vous auriez simplement une box avec une interface d'administration plus flexible vous pourrez facilement adapter la configuration.

Ce ne sera jamais assez dit, mais dès que cela est possible : préférez toujours une connexion Ethernet à une connexion Wi-Fi.

Dans mon cas, la box (ADSL) est raccordée normalement, mon routeur dédié (port WAN) est branché en Ethernet à la box (port LAN) et mon serveur qui tourne Docker est branché à un port LAN du routeur dédié.

Un (tout) petit peu de réseau

Box

La particularité dans mon cas est que l'interface d'administration de ma box (SFR NB6) est aussi flexible qu'un Mr.Freeze au sortir du congélateur. Je ne peux ni configurer un serveur DNS de mon choix, ni choisir mon propre adressage réseau. Les actions à faire sont simples et rapides :

  • Je repère le subnet utilisé par ma box (192.168.1.0/24) ainsi que l'adresse IP de la box (192.168.1.1)

  • Je désactive la fonction DHCP de ma box.

Routeur dédié

  • Côté WAN, je défini une IP statique pour mon routeur. Je sais que ma box possède l'IP 192.168.1.1 et qu'il n'y a aucun autre périphérique sur le réseau. L'IP 192.168.1.2 fera donc très bien l'affaire. La gateway dans notre cas sera donc notre box : 192.168.1.1.

  • Côté LAN du routeur dédié, j'active le serveur DHCP (c'est normalement le cas par défaut) et je vais modifier la configuration.

Dans mon cas, j'ai choisi un subnet en /24 (en l'occurence 192.168.76.0/24) que je vais diviser en 2 ranges d'IP:

  • Un range qui sera dédié aux IP allouées dynamiquement par le routeur : 192.168.76.2 à 192.168.76.126.

  • Un range qui sera dédié aux IP que j'aurai l'occasion d'allouer manuellement (principalement à des conteneurs) : 192.168.76.128 à 192.168.76.254.

  • L'IP 192.168.76.127 sera statique et toujours allouée à mon serveur (celui qui exécute les conteneurs). C'est pour cela qu'elle est exclue des ranges.

  • Les infos de ce réseaux sont :

    • 192.168.76.0/24 : le subnet

    • 192.168.76.1 : l'IP du routeur

    • 192.168.76.255 : l'IP de broadcast

Ce n'est pas visible sur cette copie d'écran, mais c'est aussi sur ce panneau de configuration que nous pourrons personnalsier le DNS au moment venu.

Installation d'AdGuard Home

Encore un peu de réseau

Je ne vais pas rentrer dans les détails sur cette partie car je ne suis pas assez calé, mais retenez simplement qu'AdGuard ne peut pas être déployé comme n'importe quel conteneur.

Pour ceux qui en veulent un tout petit peu plus : Docker créer une couche d'abstraction au niveau réseau. Si nous déployons AdGuard comme n'importe quelle autre application conteneurisée, cette dernière verrait toutes les requêtes arriver d'une seule et même IP, elle même "virtualisée" par Docker et cela nous priverait donc de beaucoup de fonctionnalités au niveau d'AdGuard.

Les commandes sont très simples (en root évidement) :

  1. Créer une configuration macvlan : docker network create --config-only --subnet 192.168.76.0/24 --gateway 192.168.76.1 --ip-range 192.168.76.128/25 -o parent=eno1 macvlan_config. Vous devez personnaliser le nom de votre interface Ethernet physique dans cette commande, il s'agit de l'interface de votre serveur qui est connectée à votre routeur.

  2. Créer un réseau basé sur cette configuration : docker network create -d macvlan --scope local --config-from macvlan_config local_macvlan Le scope choisi ici est bien local. La raison pour cela est que si nous créeons ce réseau dans le scope d'un swarm, il nous sera impossible d'allouer une IP statique à notre conteneur AdGuard ; hors nous allons avoir besoin d'une IP statique pour le service AdGuard. Remarque : il y a probablement d'autres possibilités sans avoir recours à cette solution et en passant par un load-balancer (type Traefik).

Après ces étapes, si vous allez sur Portainer, dans l'onglet "Networks" vous devriez voir la configuration que vous avez créée (macvlan_config) ainsi que le réseau (local_macvlan).

Déployez la stack

  1. Vous pouvez commencer par pull l'image Docker d'AdGuard : docker pull adguard/adguardhome. Je préfère pull via le Terminal plutôt que via l'interface de Portainer car cela permet de voir où en est le téléchargement et de taguer correctement l'image.

  2. Ensuite il n'y a plus qu'à déployer le docker-compose.yml ci-après : prenez soin de changer correctement le nom du réseau local_macvlan si vous n'avez pas choisi le même que moi et de choisir l'IP qui vous convient pour ce conteneur.

version: '2.2'

services:
  adguardhome:
    image: adguard/adguardhome:latest
    restart: always
    volumes:
      - data:/opt/adguardhome/work
      - config:/opt/adguardhome/conf
    networks:
      local_macvlan:
        ipv4_address: 192.168.76.129

networks:
  local_macvlan:
    external: true

volumes:
  data:
  config:

Configurer votre routeur pour utiliser AdGuard

Sur l'interface d'administration de votre routeur, il faut que vous indiquiez qu'AdGuard est votre serveur DNS. Le nom de la section dans laquelle cette configuration se fait peut varier :

  • DHCP settings

  • LAN settings

Vous devriez trouver. Dans mon cas, la configuration se fait dans la section LAN Settings puis DHCP Server de mon routeur. Il n'y a qu'à renseigner l'IP d'AdGuard en face de Primary DNS. Pour le Secondary DNS, je vous conseille de spécifier celle d'un DNS public connu et fiable (Cloudflare dans mon cas).

Sources

Voici les sources qui m'ont largement aidé à réaliser cette installation :

Last updated