Soyez votre propre fournisseur de DNS avec AdGuard et Bind9

Soyez votre propre fournisseur de DNS avec AdGuard et Bind9

Difficulté : TRÈS FACILE

Public cible : Toute personne cherchant à renforcer son anonymat.

Prérequis:

  • [SERVEUR LINUX] Vous devez installer un serveur Linux de préférence sans aucun autre service que celui du DNS.

Le DNS

Le DNS (Domain Name System) est la pierre angulaire d’Internet. Mis en place dans les années 1985, il permet de traduire les noms de domaine, comme « exemple.com », en adresses IP. Pour simplifier, voici une analogie que j’utilise souvent pour expliquer le DNS : lorsque vous appelez un contact dans votre répertoire téléphonique, vous cliquez sur un nom, et le téléphone compose le numéro associé. Le DNS fonctionne sur le même principe, mais appliqué à Internet.

Je vous propose de devenir votre propre fournisseur de DNS. La question que l’on pourrait alors se poser est : « Pourquoi faire ? ». Aujourd’hui, les serveurs DNS utilisés par défaut sont ceux de votre fournisseur d’accès à Internet. Cependant, ces fournisseurs peuvent voir l’ensemble des requêtes que vous faites, ce qui pose un véritable problème d’éthique. En effet, comme pour les VPN, certains services se disent « confidentiels » et assurent ne pas surveiller vos recherches en ligne, mais, tout comme avec les VPN, il est impossible d’en avoir la preuve.

Enfin, il est important de noter que de nombreux sites sont bloqués par les gouvernements, ce qui entraîne des problèmes à la fois techniques et éthiques.

Tous les serveurs DNS du monde se reposent sur les DNS racines (root servers), ils sont une pièce essentielle de l’infrastructure DNS globale, car ils fournissent le point de départ pour la résolution des noms de domaine sur Internet.

Les serveurs racine contiennent les informations nécessaires pour localiser les serveurs DNS des domaines de premier niveau TLD (TOP LEVEL DOMAIN), comme .com, .org, .net, ainsi que les domaines nationaux comme .fr, .de, etc. Lorsqu’un serveur DNS ne connaît pas l’adresse IP d’un domaine demandé (par exemple exemple.com), il lance une requête récursive qui commence souvent par une interrogation aux serveurs DNS racine.
Le serveur racine ne fournit pas directement l’IP du domaine demandé mais redirige vers le serveur DNS du TLD en question (par exemple: le serveur en « .com » pour exemple.com).
Le serveur DNS de TLD renvoie alors au serveur de la zone concernée (par exemple : le serveur DNS gérant exemple.com), jusqu’à ce que l’IP du domaine soit obtenue et renvoyée à l’utilisateur final.

Il existe actuellement 13 serveurs DNS racine principaux, identifiés de A à M, qui sont distribués à l’échelle mondiale. Bien que chaque serveur soit désigné par une lettre unique, chacun est en réalité composé de plusieurs serveurs physiques dispersés dans le monde, opérant via un système de « Anycast » pour assurer disponibilité, résilience et vitesse d’accès.

Les serveurs DNS racine n’effectuent aucun filtrage ou blocage de sites spécifiques. Leur rôle se limite à fournir les informations sur l’emplacement des serveurs DNS des TLD (par exemple: .com, .fr, .net), et ils n’interviennent pas dans la résolution des domaines spécifiques en aval. Les serveurs racine suivent des normes internationales établies par l’ICANN (Internet Corporation for Assigned Names and Numbers) et d’autres organismes afin de rester neutres et de ne pas manipuler le contenu.

Introduction

Il existe plusieurs moyens de faire un serveur DNS :

  • Un serveur DNS en mode relai : Celui-ci transmet vos requêtes à d’autres serveurs DNS (Dans ce cas là il n’y a que très peu d’intérêt d’avoir son propre DNS… ).
  • Un serveur DNS en serveur propre : Permet de transmettre vos requêtes aux serveurs racine DNS mondiaux.

En d’autres termes, l’utilisation de DNS privés ou alternatifs, notamment pour les utilisateurs permettent de contourner une partie de cette censure en utilisant des DNS publics (comme ceux de Google, Cloudflare, ou OpenDNS), bien que certains gouvernements bloquent aussi l’accès à ces serveurs alternatifs.

D’autres technologies, existent permettant de rendre le contrôle encore plus complexe. Comme par exemple le DOH (DNS OVERT HTTPS), ou DOT (DNS OVER TLS), dans les deux cas il s’agit d’une technologie qui permettent de chiffrer les requêtes, car OUI le DNS est un des derniers protocole à ne pas être chiffré de base.

(Nous verrons prochainement dans une mise à jour de ce tuto TODO: DNS OVER TLS)

Un nom de domaine peut inclure un sous-domaine (par exemple, dans « secret-defense.net », « sleek » est le sous-domaine de « secret-defense.net »). Mais saviez-vous que, dans le protocole DNS, un point final est toujours ajouté à la fin d’un nom de domaine ?
Voici la forme réelle d’un nom de domaine :

Plaintext
secret-defense.net.

Si vous entrez cette adresse avec le point final dans votre navigateur, cela fonctionnera malgré tout. Ce point final représente la racine du système DNS, appelée le « root ».
Voyons voir maintenant comment créer notre propre serveur DNS avec la stack Adguard et Bind9.

Technologies utilisées

Dans cet article, nous allons installer une stack (c’est à dire une pile de plusieurs technologies.). Dans cette stack nous allons utiliser Adguard, et bind9 :

  • AdGuard nous permet de filtrer et d’assainir les requêtes DNS en bloquant les agences publicitaires connues ainsi que la télémétrie, grâce à l’utilisation de filtres spécialisés. Cela ne bloquera cependant pas les publicités sur YouTube, car celles-ci sont intégrées directement dans les vidéos. En revanche, les publicités et la télémétrie présentes sur les sites web seront bloquées. Une fois les requêtes nettoyées, elles seront transmises à la deuxième technologie : Bind9.
  • Bind9, est un vrai serveur de DNS, c’est lui qui va chercher dans sa propre base de données s’il a les hôtes DNS en cache, sinon il ira demander l’information aux serveurs racines qui renverrons la demande aux TLD.

Installation de votre DNS

Commencez par installer un Debian 12 en mode serveur, avec au moins 2048Mo de ram et 25Go de disque dur.

Après l’installation du serveur, vous devrez installer le git associé.

Bash
cd ~ && apt update && apt upgrade -y && apt install -y git dnsutils curl

Installez docker avec cette commande

Bash
curl https://raw.githubusercontent.com/s4dic/dockerautoinstall/main/dockerautoinstall.sh | bash

Si une erreur se produit au démarrage du conteneur, cela est probablement dû au fait que vous n’avez pas suivi la dernière étape du tutoriel d’installation de Debian 12.
Dans ce cas, vous devez exécuter les commandes suivantes.

Clonez le projet suivant avec git

Bash
git clone https://github.com/s4dic/adguard-bind9 && cd adguard-bind9

Si ce n’est pas déjà fait, récuperez l’ip de votre serveur avec la commande

Bash
ip a

Enfin, démarrez le projet

Bash
docker-compose up -d

Rendez-vous sur l’IP de votre machine à l’adresse « http://IPDEVOTREMACHINE:8830/install.html », Vous devriez arriver ici

Laissez les paramètres par défaut et faites simplement « Next »

Définissez un compte avec un mot de passe fort

Enfin, laissez le paramètre par défaut et cliquez sur next

Faites juste Next

Votre Adguard est maintenant installé

Connectez-vous

Vous devriez arriver sur cet écran

Rendez-vous dans « Settings » puis « DNS settings »

Changez l’IP dans « Upstream DNS servers » ET « Bootstrap DNS servers » en mettant l’adresse IP « 172.30.0.3 ». Cette IP correspond à l’IP locale du conteneur docker que je lui avais attribuée. Mettez bien cette ip et rien d’autre

ICI « 172.30.0.3 »

Dans serveur DNS d’amorçage (Bootstrap DNS servers) supprimez tout et mettez la même IP

ET ICI AUSSI « 172.30.0.3 » !

Cliquez ensuite sur « test upstreams » et « apply »

Testez le DNS (avec l’arobase)

Bash
dig @IPDEVOTREMACHINE perdu.com

Si vous voyez l’adresse IP ici c’est que cela fonctionne correctement

Vous pouvez aussi voir la requête dans le journal des requêtes ici

Filtrage

Pour filtrer les noms de domaine indésirable, rendez-vous dans « Filters » puis « DNS blocklists »

Cliquez sur « Add Blocklist » puis sur « Add a custom list »

Choisissez un nom et rentrez l’URL suivante (il s’agit de ma propre blacklist que j’essaie de maintenir):

Plaintext
https://raw.githubusercontent.com/s4dic/Host/refs/heads/main/host.txt

Enfin, sauvegardez

BONUS: Si vous souhaitez ajouter d’autres listes, vous pouvez consulter le site filterlists.com, qui propose une multitude de filtres pour divers usages.

Ajouter votre DNS à vos machines.

Voici comment procéder pour Linux et Windows. Si vous possédez la Blackbox , vous aurez également la possibilité de diffuser votre serveur DNS à tous vos clients très facilement et de manière automatique.

Ajouter le DNS pour Linux

Linux Serveur

Editez le fichier suivant en root

Bash
nano /etc/resolv.conf

Videz le contenu du fichier, puis ajoutez cette commande suivie de l’adresse IP de votre serveur DNS.

Bash
nameserver 127.0.0.1

Enregistrez le fichier

Linux Desktop

Pour Linux, vous pouvez directement éditer votre réseau

Ajoutez votre adresse IP

Ajouter le DNS pour Windows

Cliquez sur la touche Windows, et tapez « ncpa.cpl » et faites « entrée »

Plaintext
ncpa.cpl

Faites un clic droit sur la carte réseau, puis sélectionnez « Propriétés »

Désactivez l’IP V6, puis double cliquez sur le « Protocole Internet version 4 »

Cochez les cases suivantes et renseignez l’IP de votre serveur DNS

Enfin, faites « OK » sur la dernière fenêtre restante, une fenêtre d’erreur va apparaître

N’y prêtez pas attention, faites simplement « Annuler »

Ajouter le DNS par la blackbox

Si vous bénéficiez de la blackbox vous pouvez envoyer votre DNS à tous vos clients très facilement.
Connectez-vous à votre VyOS et rentrez en mode de configuration

MATLAB
conf

Supprimez complètement le service DNS pour vos réseaux avec l’option « del » en début de commande

(Selon votre VyoS « dns-server » ci-dessous doit etre remplacé par « name-server »)

MATLAB
del system dns-server
del service dhcp-server shared-network-name ETH-VM subnet 172.16.99.0/24 dns-server

Continuez la suppression sur le nombre total de vos sous-réseaux

Enfin, rajoutez votre serveur DNS avec l’argument « set », pensez à renseigner l’IP de votre serveur DNS

MATLAB
set system dns-server 172.16.44.51
set service dhcp-server shared-network-name ETH-VM subnet 172.16.99.0/24 dns-server 172.16.44.51

Annexes

Attention il s’agit des annexes, les annexes sont optionnelles, vous ne devez pas suivre les annexes si vous avez déjà installé votre serveur DNS avec la configuration docker du dessus.

Installer Bind9 Manuellement (Sans Docker)

Attention, vous devrez ne rien avoir d’autre qui utilise le port 53 sur votre serveur Bind9. Adguard, ne doit donc pas être installé sur ce même serveur.

Après l’installation de votre DNS mettez à jour le système pour garantir que tous les paquets sont à jour et installez BIND9 ainsi que ses utilitaires.

Bash
systemctl stop apparmor
systemctl disable apparmor
apt remove --purge apparmor

Configuration de BIND9

Bash
apt update && apt upgrade -y && apt install bind9 bind9utils bind9-doc dnsutils -y
Bash
nano /etc/bind/named.conf.options

Le fichier « named.conf.options », contient les options de configuration globales du serveur DNS, telles que les autorisations de requêtes et les paramètres de DNSSEC.
Ouvrez le fichier de configuration des options.

Plaintext
options {
    directory "/var/cache/bind";

    // Permettre les requêtes de tout client
    allow-query { any; };
    
    // Activer la récursivité pour les clients locaux
    recursion yes;
    dnssec-validation no;

    // Écoute sur toutes les interfaces IPv4 uniquement
    listen-on { any; };
    listen-on-v6 { none; };
};

Mettre à Jour la Liste des Serveurs Racine

Téléchargez une version à jour du fichier de serveurs racine pour assurer une résolution efficace.

Bash
wget -O /etc/bind/db.root https://www.internic.net/domain/named.cache

Configuration d’une Zone DNS Exemple

Pour configurer une zone directe, nous allons utiliser example.com comme exemple de domaine.

Éditez le fichier named.conf.local pour y déclarer la nouvelle zone.

Bash
nano /etc/bind/named.conf.local

Ajoutez la configuration suivante pour la zone example.com

Bash
zone "example.com" {
    type master;
    file "/etc/bind/zones/db.example.com";
};

Créez le répertoire pour stocker les fichiers de zone s’il n’existe pas encore.

Bash
mkdir -p /etc/bind/zones

Créez le fichier de zone pour example.com.

Bash
nano /etc/bind/zones/db.example.com

Ajoutez la configuration de zone suivante dans le fichier :

Bash
$TTL    86400
@       IN      SOA     ns1.example.com. admin.example.com. (
                        2023102601 ; Serial
                        3600       ; Refresh
                        1800       ; Retry
                        604800     ; Expire
                        86400 )    ; Minimum TTL

; Définition des serveurs DNS
@       IN      NS      ns1.example.com.

; Enregistrements A pour le domaine et les sous-domaines
ns1     IN      A       192.0.2.1
www     IN      A       192.0.2.2

Remplacez si besoin 192.0.2.1 et 192.0.2.2 par les adresses IP que vous souhaitez utiliser, mais vous pouvez laisser comme cela, il s’agit juste d’un domaine de test.

Vérifier les Permissions et Propriétés des Fichiers

Bash
chown -R bind:bind /var/cache/bind
chmod 770 /var/cache/bind
chown -R bind:bind /etc/bind

Vérification et démarrage de BIND9

Bash
named-checkconf && named-checkzone example.com /etc/bind/zones/db.example.com

Si tout est en ordre, vous devriez voir un message indiquant que la zone est chargée correctement.

Redémarrage de BIND9 et activation du service pour qu’il démarre automatiquement au démarrage du système :

Bash
systemctl restart bind9 && systemctl status bind9

Vérifiez que le service est actif et fonctionne correctement et activez le service au démarrage

Bash
 systemctl enable bind9

Test de votre configuration DNS

Utilisez dig pour tester la résolution DNS locale.

Bash
dig @localhost example.com

Vous devriez obtenir une réponse contenant l’adresse IP configurée pour example.com.

Vous pouvez maintenant mettre l’IP de votre bind9 dans votre « /etc/resolv.conf »

Bash
nano /etc/resolv.conf

Allez maintenant dans votre AdGuard, puis dans « Settings » et enfin « DNS Settings », remplacez l’IP ou les IP par l’IP de votre BIND9

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire