Menu Fermer

Configurer un cache DNS sur Linux avec systemd-resolved, dnsmasq ou BIND

Linux propose d’innombrables fonctionnalités réseau faisant de lui un OS performant en la matière.
Pour améliorer les temps de réponse de chargement sur internet, vous pouvez mettre en place un cache DNS.
Cela permet de stocker temporairement les résolutions DNS afin de ne pas devoir contacter à nouveau le résolveur DNS.

Dans ce tutoriel, je vous propose de configurer un cache DNS sur Linux avec systemd-resolved, dnsmasq ou BIND.

Configurer un cache DNS sur Linux avec systemd-resolved, dnsmasq ou BIND

Pour mettre en place un cache DNS

Un cache DNS est comme une base de données temporaire des recherches DNS récentes auxquelles notre ordinateur peut se référer rapidement lorsqu’il essaie de comprendre comment charger un site Web sur Internet. Il stocke tous les enregistrements des visites récentes et tentatives.

Le cache DNS est utile car il intercepte les demandes de nom d’hôte des sites Web récemment visités avant d’être envoyés sur Internet et les réfère à sa base de données locale. Cela réduit considérablement le temps pris pour charger des sites Web déjà visités car leur adresse IP respective a déjà été mise en cache.

Configurer un cache DNS sur Linux avec systemd-resolved

systemd-resolved est un outil disponible localement qui fait partie de la suite SystemD des outils de gestion du système. SystemD est facilement disponible dans presque toutes les principales distributions Linux.

La plupart des distributions Linux ont installé SystemD, mais elle n’est généralement pas active.

Utilisons systemd-resolved pour créer et exécuter un serveur DNS de mise en cache local que nous allons configurer pour démarrer sur le démarrage. De plus, nous allons configurer le reste de notre système pour rediriger ses requêtes DNS vers le serveur de mise en cache que nous avons créé.

La plupart des distributions Linux embarquent déjà ce service.
Pour vérifier si le démon est actif dans le système :

sudo resolvectl status

Si cela retourne une entrée du type alors systemd-resolved est déjà actif dans le système :

Global
       LLMNR setting: no
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
Configurer un cache DNS sur Linux avec systemd-resolved

Si nous recevons un message d’échec, nous devons activer et configurer systemd-resolved.

  • Pour cela éditez le fichier de configuration :
vim /etc/systemd/resolved.conf

Puis modifiez l’entrée DNS en indiquant les serveurs DNS publics et itératives que vous souhaitez utiliser.
Par exemple pour configurer les serveurs DNS Google :

DNS=8.8.8.8 8.8.4.4

Voici une liste de services DNS résolveurs :

FournisseursAdresses IP des serveurs DNSAdresses DNS Over HTTPS
Cloudflare1.1.1.1
1.0.0.1
2606:4700:4700::1111
2606:4700:4700::1001
https://1.1.1.1/dns-query
https://1.0.0.1/dns-query
Google8.8.8.8
8.8.4.4
2001:4860:4860::8888
2001:4860:4860::8844
https://dns.google/dns-query
Quad99.9.9.9
149.112.112.112
2620:fe::fe
2620:fe::fe:9
https://dns.quad9.net/dns-query (Recommandé)
https://dns9.quad9.net/dns-query (Sécurisé)
https://dns11.quad9.net/dns-query (ECS support)
OpenDNSStandard DNS:
208.67.222.222
208.67.220.220
2620:119:35::35
2620:119:53::53

FamilyShield (blocage des sites pour adultes :
208.67.222.123
208.67.220.123
2620:119:35::123
2620:119:53::123 
Standard DNS: https://doh.opendns.com/dns-query

FamilyShield (blocage des sites pour adultes : https://doh.familyshield.opendns.com/dns-query
Liste des serveurs DNS les plus rapides et sécurisés 

Puis activez le service systemd-resolve :

sudo systemctl enable systemd-resolved.service
sudo systemctl start systemd-resolved.service

Enfin pour activer le cache DNS et la résolution DNS par systemd-resolved, il faut modifier la configuration DNS de Linux dans le fichier /etc/resolv.conf.
Pour cela éditez ce dernier :

sudo vim /etc/resolv.conf

Puis modifiez l’entrée DNS par :

nameserver 127.0.0.53

Validez la modification en enregistrant les modifications du fichier.

Connaître les serveurs DNS sur Linux dans /etc/résolv.conf
Bravo ! vous avez réussi à configurer un cache DNS sur Linux avec systemd-resolved.

Configurer un cache DNS sur Linux avec dnsmasq

dnsmasq est un serveur à faible empreinte mémoire faisant DNS, TFTP, PXE, annonces de routeurs et DHCP. Il offre à la fois les services DNS et DHCP pour un réseau local (LAN).
Il est disponible dans la plupart des distributions Linux et peut être installé via le gestionnaire de packages.

Pour installer dnsmasq depuis une distribution Linux de type Debian, Ubuntu avec APT :

 sudo apt-get install dnsmasq

Pour installer dnsmasq sur Fedora avec dnf :

sudo dnf install dnsmasq

Modifierez le fichier de configuration :

sudo vim /etc/dnsmasq.conf

Configurer le fichier qui stockera la configuration DNS :

resolv-file=/etc/dnsmasq-dns.conf

Augmentez la taille du cache si vous le souhaitez grâce à l’option cache-size :

cache-size=512

Créez le fichier /etc/dnsmasq-dns.conf :

sudo vim /etc/dnsmasq-dns.conf

Et configurez les serveurs DNS. Par exemple pour mettre Google comme serveur DNS :

nameserver 8.8.8.8

Modifier la configuration DNS de Linux pour utiliser Bind comme résolveur.
Pour cela, éditez le fichier /etc/resolv.conf :

sudo vim /etc/resolv.conf

Indiquez localhost comme adresse de serveur DNS :

nameserver 127.0.0.1

Puis pour activer le service DNS :

sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq
Bravo ! vous avez réussi à configurer un cache DNS sur Linux avec dnsmasq.

Configurer un cache DNS sur Linux avec BIND

Bind (Berkely Internet Name Domain) est un serveur DNS puissant que nous pouvons utiliser pour configurer un cache DNS local. C’est l’un des programmes de serveur de noms les plus populaires et les plus utilisés.

Pour installer bind depuis une distribution Linux de type Debian, Ubuntu avec APT :

sudo apt update
sudo apt install bind9 bind9utils -y

Pour installer bind sur Fedora avec dnf :

sudo dnf update
sudo dnf install bind9 bind9utils -y

Editez le fichier de configuration de bind :

sudo vim /etc/bind/named.conf.options

Assurez vous en haut que seules les clients locaux peuvent envoyer des demandes de résolutions DNS :

acl goodclients {
    localhost;

};

Puis modifiez l’entrée forwarders afin de spécifier le résolveurs DNS vers lequel envoyer les requêtes DNS :

forwarders {
                213.186.33.99;
                0.0.0.0;
        };

Puis pour que bind n’écoute que sur l’interface localhost et que le serveur DNS ne soit pas exposé sur internet, réglez comme ceci :

   listen-on { locahost; };
   listen-on-v6 { localhost; };

Et enfin pour n’autoriser que les clients sur localhost :

allow-query { goodclients; };
Configurer un cache DNS sur Linux avec BIND

Puis pour prendre en compte les modifications de la configuration et activez le service :

sudo systemctl start --now named
sudo systemctl enable --now named
sudo systemctl stop --now named
sudo systemctl restart --now named

Modifier la configuration DNS de Linux pour utiliser Bind comme résolveur.
Pour cela, éditez le fichier /etc/resolv.conf :

sudo vim /etc/resolv.conf

Indiquez localhost comme adresse de serveur DNS :

nameserver 127.0.0.1

Pour tester la résolution DNS, nous allons utiliser dig :

dig +noall +stats www.malekal.com

L’adresse du serveur doit être 127.0.0.1:53

;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Jul 24 10:24:10 UTC 2022
;; MSG SIZE  rcvd: 120

Sur Debian, le fichier de cache se trouve par défaut dans /var/cache/bind/named_dump.db
La commande suivante vous permet de le visualiser :

rndc dumpdb -cache
Bravo ! vous avez réussi à configurer un cache DNS sur Linux avec Bind.