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 :
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é.
cd ~ && apt update && apt upgrade -y && apt install -y git dnsutils curlInstallez docker avec cette commande
curl https://raw.githubusercontent.com/s4dic/dockerautoinstall/main/dockerautoinstall.sh | bashSi 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
git clone https://github.com/s4dic/adguard-bind9 && cd adguard-bind9Si ce n’est pas déjà fait, récuperez l’ip de votre serveur avec la commande
ip aEnfin, démarrez le projet
docker-compose up -dRendez-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)
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):
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
nano /etc/resolv.confVidez le contenu du fichier, puis ajoutez cette commande suivie de l’adresse IP de votre serveur DNS.
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 »
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
confSupprimez 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 »)
del system dns-server
del service dhcp-server shared-network-name ETH-VM subnet 172.16.99.0/24 dns-serverContinuez 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
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.51Annexes
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.
systemctl stop apparmor
systemctl disable apparmor
apt remove --purge apparmorConfiguration de BIND9
apt update && apt upgrade -y && apt install bind9 bind9utils bind9-doc dnsutils -ynano /etc/bind/named.conf.optionsLe 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.
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.
wget -O /etc/bind/db.root https://www.internic.net/domain/named.cacheConfiguration 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.
nano /etc/bind/named.conf.localAjoutez la configuration suivante pour la zone example.com
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.
mkdir -p /etc/bind/zonesCréez le fichier de zone pour example.com.
nano /etc/bind/zones/db.example.comAjoutez la configuration de zone suivante dans le fichier :
$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.2Remplacez 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
chown -R bind:bind /var/cache/bind
chmod 770 /var/cache/bind
chown -R bind:bind /etc/bindVérification et démarrage de BIND9
named-checkconf && named-checkzone example.com /etc/bind/zones/db.example.comSi 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 :
systemctl restart bind9 && systemctl status bind9Vérifiez que le service est actif et fonctionne correctement et activez le service au démarrage
systemctl enable bind9Test de votre configuration DNS
Utilisez dig pour tester la résolution DNS locale.
dig @localhost example.comVous 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 »
nano /etc/resolv.confAllez maintenant dans votre AdGuard, puis dans « Settings » et enfin « DNS Settings », remplacez l’IP ou les IP par l’IP de votre BIND9


