AdGuard Home comme serveur DNS local sur une VM Freebox

AdGuard Home est un serveur proxy DNS similaire à piHole qui se place entre vous (l’ordinateur client) et les serveurs DNS publiques (ex. le DNS de votre box FAI). Vu qu’il passe les requêtes DNS à d’autres serveus DNS, aussi appelés les « upstreams » ou serveurs en amont, on s’y réfère comme un « proxy ».

Il vous permet d’utiliser une foule de serveurs DNS publiques, de sécuriser les requêtes DNS vers les sites dangereux en y bloquant l’accès et peut aussi chiffrer ces requêtes avec les protocoles DOH, DOT, DNSCrypt, etc. En paramétrant des listes de filtrage pour les serveurs de pub, vous pouvez aussi bloquer par défaut toutes les pubs sur votre réseau, tout en gardant la possibilité de déactiver de blocage pour les sites ou chaines que vous supportez explicitement. Sachez aussi que :

  • ce type de blocage est plus difficile à détecter qu’un bloqueur applicatif, du genre AdBlock,
  • cela ne bloque pas les pubs dans certaines applications smartphone qui peuvent utiliser leurs propres DNS,
  • certains sites web utilisant le pistage détectent le serveur AdGuard comme un « bot » sur le réseau et peuvent déclencher un challenge captcha, ou autre,
  • pour chiffrer vos requêtes DNS, il vous faudra un certificat SSL valide, et renouvellé tous les 3 mois dans le cas de Let’s Encrypt.

Choix d’une VM sur la Freebox Delta S comme hôte

Nous avons choisi d’utiliser une VM sur la Freebox pour des raisons de stabilité et de résilience. En effet, à moins d’avoir un réseau très fiable derrière le Freebox, le risque d’avoir le DNS AdGuard qui tombe n’est pas négligeable et la faute n’est pas toujours évidente à déduire surtout au retour des vacances. Comme causes possibles, des micro-coupures de courant (merci le délestage !) qui corrompent la machine, un disque-dur qui a pris un coup de chaud (merci le changement climatique !) ou une souris malveillante qui a trouvé que votre cable réseau avait un arrière gout de camambert. On peut tout à fait utiliser une machine hors Freebox, mais il faudra une bonne redondance pour l’alimentation, le stockage et tout le reste.

A noter qu’à la base, le serveur AdGuard est très économe en ressources et peur tourner sur une VM avec 512 KB de mémoire et un seul coeur. Par contre, en rajoutant des dizaines de listes de filtrage le besoin en ressources grimpera, et les requêtes DNS qui ne sont pas en mémoire tampon prendront plus de temps. Plusieurs scénarios plus ou moins évolués en effort à fournir sont possibles.

Scénario A: Pas le temps, mais je veux bloquer à minima !

Vous n’avez pas les moyens ou le temps de configurer un serveur DNS complet à la maison, mais vous souhaitez filtrer les sites bizarres et les pubs sur votre réseau.

Dans ce cas :

  • Allez sur la liste des serveurs DNS connus. Dans la liste, choisissez des serveurs pas trop éloignés géographiquement. On peut aussi faire des ping pour tester leurs latences, en gardant en tête que celles-ci peuvent varier grandement sur une semaine,
  • Parmi les DNS il y a de tout : ceux qui bloquent les sites malveillants, ceux qui bloquent les sites olé olé, ceux qui ne font pas de filtrage, ceux qui chiffrent et d’autres qui sont en clair,
  • Copiez les IP des DNS qui vous intéressent et collez-les dans la configuration DNS de votre routeur d’accès à internet, c’est à dire, le dernier routeur faisant le lien entre votre réseau et votre FAI (ex. une freebox, livebox, bbox, routeur tierce, etc.),
  • Si vous n’avez pas accès à l’interface d’administration de votre DNS, changez de FAI ! Ou alors, basculez votre box en « mode bridge », ce qui en fera un bête switch, et utilisez votre propre routeur derrière. Ou sinon, configurez un routeur en DMZ et n’utilisez celui-ci que pour le traffic DNS sécurisé (ex. stations de travail) et laissez les smartphones et autre appareils wifi utiliser votre box FAI sans AdGuard,
  • Testez en allant sur un site olé olé,
  • Faites de sorte à ce que toutes les machines sécurisées (ex. ordinateurs, tv, consoles, etc.) de la maison utilisent le protocole DHCP afin de centraliser la distribution des serveur DNS sur votre box.
Serveur Freebox utilisant le serveur DNS personnalisé

Afin de garantir une redondance dans les requêtes DNS, il est préférable de configurer plusieurs serveur DNS, car si l’un tombe, l’autre prendra le relai. Et voilà, c’est tout pour ce scénario !

La limite est que ce type de filtrage n’est pas contrôlable. Si on configure un serveur DNS qui effectue du filtrage familial, tous les clients DHCP seront filtrés. Aucune exception n’est possible, à moins de configurer localement un autre serveur DNS sur la machine. Aussi, on n’a pas la possibilité de consulter les jolis logs de requêtes pour voir si telle ou telle machine communique un peu trop avec les GAFAM ou autre, ce qui peut nous aiguiller vers une compromission du réseau.

Scénario B : J’ai toujours pas le temps mais je veux mieux contrôler mon DNS avec OpenDNS

Pour gagner en flexibilité sans devoir bidouiller sa box, on peut aussi utiliser le service Open DNS de Cisco qui a l’avantage de se faire totalement en ligne. Pour ce faire :

  • on crée d’abord un compte chez opendns.com,
  • on y spécifie son adresse publique, en cherchant sur son routeur ou alors sur what’s my ip,
  • on sélectionne les catégories de contenu qui seront filtrées, et
  • en paramétrant les IP des DNS du service Open DNS, dans sa box FAI, on pourra profiter d’un filtrage un peu chiadé sur son réseau.
Cisco Open DNS

Done ! Mission accomplie.

Par contre, même si nous gagnons en granularité de contrôle sur le blocage, il nous est toujours impossible de voir les logs ou de peaufiner le service pour chaque client, de manière centralisée.

Scénario C : Je peux trouver le temps, et j’ai une machine libre !

Nous allons utiliser ici la capacité de la « Freebox Delta S » à gérer des VMs. Vous pouvez aussi bien utiliser un serveur Proxmox, un bon Rpi ou autre. Voici la « to-do » list :

  • Configurer une VM Debian sur la freebox et y installer Adguard Home,
  • Paramétrer le proxy DNS avec des listes de blocage sympas et des Upstream DNS sympas aussi,
  • Utiliser ce nouveau serveur DNS pour notre configuration DHCP.

Il est utile de préciser que si vous utilisez le DHCP de la Freebox (activé), il suffirait de renseigner les champs Serveur DNS afin de passer les requêtes DNS par AdGuard Home… en théorie. Cependant, en pratique, si vous ne renseignez que le Serveur DNS 1 et non pas le secondaire (Serveur DNS 2), la Freebox pourra quand même effecteur des requêtes sans passer par AdGuard Home, ce qui peut être problématique en cas d’une défaillance de votre VM AdGuard. On peut contourner le problème en paramétrant la même adresse IP de notre DNS AdGuard dans les champs DNS 1 et 2. Néanmoins, il n’y a aucune garantie qu’au grès d’une mise à jour Freebox, une partie des requêtes DNS n’outrepasse notre serveur AdGuard.

Note : Il vous sera aussi impossible d’utiliser que les paramètres DNS de la Freebox sans activer le serveur DHCP de celle-ci, alors que les 2 services devraient normalement être indépendants. D’ailleurs, l’interface vous empêchera d’enregistrer une modification DNS si vous n’avez pas coché « Activer le Serveur DHCP ».

Dans le doute, il sera possible d’abandonner le serveur DHCP de la Freebox et utiliser celui d’un routeur/switch dont nous avons le contrôle. D’ailleurs, AdGuard Home intègre aussi un serveur DHCP qui permet d’externaliser totalement les services DHCP et DNS de votre box FAI. L’intérêt d’une telle approche est que les noms des machines seront affichés dans les logs Adguard Home à la place des adresses IP. Faute de routeurs tierces à votre disposition, il sera aussi possibilite de s’en concocter un à prix mini en utilisant OpenWRT.

Etape #1 : Installer une VM Adguard Home sur la fbx

Nous créons la VM avec une image Debian 10 (ou autre si vous souhaitez une distribution plus petite) :

  • Attention de bien ouvrir les ports entrants bittorrent de la fbx si vous voulez que la fbx récupère l’image toute seule. Sinon, vous pouvez rapatrier un ISO Debian sur votre disque dur fbx, et l’utiliser pour installer la VM,
  • Pour l’installation et la mise à jour, je préfère allouer > 1024 Go de mémoire et 2 cœurs à la VM. Par contre, on pourra réduire cela à 1 cœur et 1024 Mo de RAM plus tard, car un serveur DNS domestique ne prend pas beaucoup de ressources,
  • Lancez la VM et connectez vous par SSH afin d’installer AdGuard Home.

Une fois lancé, et loggué en SSH sur la VM, il suffit d’exécuter le script d’installation pour installer AdGuard Home :

  • On fait une petite mise à jour de Debian : apt get update && apt get upgrade -y
  • On installe curl pour pouvoir exécuter le script d’installation: apt install curl
  • On installe AdGuardHome automatiquement :
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v

Pour finir proprement, on va fixer l’adresse IP de la VM pour éviter que notre serveur DNS se balade dans notre plage IP. Donc, sur la Freebox, à partir de l’interface d’administration : Périphériques Réseau, clic droit sur notre VM AdGuardHome et ensuite, Configurer un bail DHCP.

Fixer l’adresse IP assignée à AdGuard Home

Sur un serveur DHCP autre que la Freebox, on fait ce qu’il faut pour donner un bail statique à notre VM.

Etape #2 : Configurer AdGuard Home

Vous pouvez désormais vous connecter à l’interface Web de votre AdGuard Home pour le configurer. Après paramétrage d’un utilisateur, du mot de passe et des ports à utiliser pour le serveur, le Dashboard se présente à vous dans toute sa splendeur ! Cependant, avant de rediriger toutes les requêtes DNS vers AdGuard, nous allons paramétrer quelques options.

Settings : General Settings : 

L’utilisation des filtres est activée par défaut. Vous pouvez cocher les autres options en sachant que la dernière « Enforce Safe Search » va bloquer toutes les options de commentaire dans YouTube, etc.

Settings : DNS Settings : 

Les serveurs DNS Upstream sont ceux qui se trouvent après votre serveur AdGuardHome et font le relais vers internet. On comprend mieux pourquoi Adguard Home est aussi appelé un DNS proxy.

Là, on a le choix de nombreux serveurs en consultant la « list of known DNS providers ».

Settings : Encryption Settings :  

Si vous souhaitez mettre l’interface en HTTPS et utiliser les requêtes cryptées en DOH et DOT (parce que vous ne souhaitez pas que votre FAI ne voit les connexions aux sites que vous fréquentez en clair), il faudra cocher la case « Enable Encryption » et utiliser vos clés de chiffrement générées sur Lets Encrypt ou autre.

Settings : Client Settings :   

Si comme moi, vous n’avez que les IP dans les logs et l’interface alors que vous souhaiteriez plutôt avoir les noms de machines, vous pouvez mapper manuellement des IP aux Noms dans cette partie.

Filters : DNS Blocklists

Pour rajouter des listes de filtrage, vous pouvez cliquer sur « Add Blocklist » et cocher à tout va. Si vous préférez une liste particulière, l’option « Custom List » fera votre affaire.

 Filters : DNS Blocklists :

Si AdGuard vous bloque des sites dont vous avez besoin sur un ordinateur en particulier, vous pouvez le débloquer en rajoutant une règle dans cette section. La différence par rapport aux « Filters : DNS allowlists », est que ici, vous pouvez cibler exactement quoi débloquer et pour qui, en évitant de débloquer un site pour tous les clients du réseau.

Nous n’allons pas énumérer toutes les options qui sont nombreuses. Vous pourrez vous référer à l’excellent wiki de AdGuard Home.

Etape #3 : Configurer le routeur pour utiliser notre DNS

Nous avons donc notre DNS personnel AdGuard Home sur le réseau. Il faut maintenant que les clients de notre réseau utilisent ce DNS, sinon tout cela aura été pour rien ! Trois routes s’offrent à nous :

  • Nos clients ont des IP en dur sur chaque ordinateur,
  • Nos clients obtiennent leurs adresses IP exclusivement du serveur DHCP,
  • Nous avons un mélange des deux.

Dans le premier cas :

Il faudra simplement paramétrer l’IP de notre DNS AdGuard Home dans les propriétés réseau IPv4 de chaque ordinateur.

Il ne faudra pas oublier de la faire aussi pour les TV, appareils connectés, haut-parleurs connectés, etc. Si l’expectative vous laisse dépité, vous venez de comprendre pourquoi une gestion centralisée des adresses IP est nécessaire !

Dans le second cas :

Il suffit d’aller sur son serveur DHCP (freebox ou autre), et de renseigner l’IP d’AdGuard Home dans le champ DNS.

L’effet sera visible qu’une fois les baux DNS expirés. Vous devriez graduellement voir les clients qui ont renouvelé leurs baux DNS se connecter à AdGuard Home via le dashboard. Ce sera donc le moment de tester le filtrage des sites paramétrés dans AdGuard Home.

Donc on va taper un site olé olé, et hop, le nounours de service nous indique que le site est bloqué par le contrôle parental :

Pareil pour tester le blocage des pubs. On va aller sur https://d3ward.github.io/toolz/adblock.html

Et hop, pubs bloquées :

Dans le troisième cas :

Il ne vous reste plus qu’à utiliser une combinaison des deux méthodes pour tout sécuriser.

Et les données mobiles alors?!

Il est difficile de contrôler le filtrage des données mobiles (smartphones, tablettes, etc) qui ne passent pas par le routeur wifi. Donc, quelqu’un peut simplement désactiver la wifi et activer la 4G pour outrepasser AdGuard Home. Cependant, l’application AdGuard existe aussi sur mobile et fonctionne sans rooter le téléphone par le principe d’un proxy, mais cette fois par un VPN local. Vous n’empêcherez pas aux personnes ayant accès complet à votre smartphone de déactiver ce VPN pour de nouveau avoir accès libre à internet. Par contre, si l’OS de votre téléphone vous le permet, vous pouvez sécuriser l’application VPN afin d’empêcher sa fermeture, et alors de conserver AdBlock activé en permanent.

(mise à jour 12/2022)

Je retire ce qui a pu être dit précédemment. Il suffit, sur Android 9+, de paramétrer un DNS Privé. Pour cela, on va dans Connexions et Partages et on accède au sous-menu DNS Privé. On ne peut utiliser des adresses IP dans ce champ (sur mon téléphone, sur MIUI). Par contre, on peut utiliser toutes les adresses normales des DNS, dont celles qui sont ici : https://adguard-dns.io/kb/general/dns-providers/

Sur iOS, je n’ai pas pu tester si un DNS privé peut être rajouté pour être utilisé par tout le système (Wifi et 4G).

Menu Paramètre > Connexion et Partage
Paramétrage d’un DNS privé.

Et pour finir, afin d’éviter que l’utilisateur ne modifie les paramètres, ce qui est fréquent sur un ordinateur, mais qui bizarrement est bien plus compliqué sur smartphone, on peut verrouiller l’accès aux paramètres en utilisant le verrouillage d’applications.

Menu Paramétrage > Applications
Menu Verrouillage Application
On sélectionne l’appli « Paramètres » pour le verouiller
Mise en réseau LTE/4G et vérification DNS sur DNSCHECK.TOOLS
On surf sur un site d’intérêt et hep, le nounours de service apparait si c’est le DNS AdGuard qui a résolu la requête. Sinon, ce sera un autre message de blocage.

Conclusion

En revenant à l’interface d’administration de AdGuard Home, on peut admirer avec enthousiasme le défilé de conversations que votre réseau domestique engage avec les GAFAM, et jubiler de plaisir !

Pour le mot de la fin, même si la fbx est très résiliente, on n’est pas à l’abri d’une mise à jour qui plante votre VM. J’en ai fait l’expérience au retour des vacances et j’ai dû reconstruire la VM, d’où cet article. Cependant, il est très simple de copier toute la VM afin d’en faire une sauvegarde en allant dans l’explorateur de fichiers :

Et pour finir les sauvegardes, vous pourrez aussi récupérer votre fichier de configuration en allant en FTP dans la VM dans le répertoire : /opt/AdGuardHome et copier le fichier AdGuardHome.yaml

Bonne bidouille, et dans le doute, rebootez !

0 0 votes
Article Rating
S’abonner
Notification pour
guest

3 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
ka0r5

Outil et article très sympa et pratique. Juste une question concernant le journal des requêtes. Le mien est principalement alimenté par ma freebox qui requête vers mafreebox.freebox.fr
Ce log n’a pas d’utilité et j’aimerais ne pas le voir apparaitre dans le journal. Une idée de comment faire?

admin

Bonjour et merci pour votre commentaire. Je peux enfin tenter de répondre à cette question, les vacances le permettant ! Je ne suis pas sûr de tout capter, mais si vous tentez de filtrer une partie du log de AdGuard afin de conserver que ce qui vous intéresse, cela ne semble pas paramétrable dans le fichier configuration.yaml. Il faudrait exporter le fichier /opt/AdGuardHome/data/querylog.json et l’ouvrir dans une autre application (excel? log analyzer? Notepad++?) afin de filtrer. Bonne bidouille.

[…] Cet article fait référence au précédent tuto concernant l’installation de AdGuard Home sur… […]

3
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x