2022-10-19 09:04 Temps de lecture : 15 min

Comment configurer la mise en cache DNS à l'aide de dnsmasq sur Ubuntu

L'implémentation de la mise en cache DNS avec DNSmasq sur des distributions Linux peut s'avérer parfois complexe.

Le mécanisme de cache DNS a pour but d'accélérer la résolution DNS, un processus qui transforme un nom de domaine en son adresse IP correspondante. En cas de consultations répétées d'un même site web par plusieurs utilisateurs de votre réseau, l'utilisation d'un serveur de cache DNS local peut significativement réduire les temps de chargement des pages.

Examinons d'abord le concept de la mise en cache DNS.

Qu'est-ce que la mise en cache DNS ?

Le système DNS est essentiel au fonctionnement d'Internet, car il maintient un registre de tous les sites web publics et de leurs adresses IP associées. Il fonctionne de manière similaire à un annuaire téléphonique. L'utilisation du DNS permet d'éviter de mémoriser les adresses IP de chaque site, nécessaires pour que l'infrastructure réseau interagisse avec les ressources en ligne.

Chaque fois que vous effectuez une recherche sur le web, c'est cette opération qui se déroule en arrière-plan.

Bien que votre système puisse accéder à de multiples serveurs DNS externes, le fait de disposer d'une réplique locale du DNS accélère le processus de transmission et de résolution. C'est précisément là que la mise en cache DNS intervient.

Avant d'envoyer une requête sur le réseau, le cache DNS se charge de résoudre les identités des domaines fréquemment visités ou consultés récemment, afin d'optimiser la vitesse du processus.

Le serveur DNS est sollicité à chaque conversion d'une adresse IP en nom de domaine, ce qui peut engendrer une charge supplémentaire, notamment si un site web reçoit un grand nombre de requêtes simultanées.

Un cache DNS permet de réduire les requêtes DNS et d'améliorer les temps de réponse. Les adresses IP résolues, ainsi que les informations d'hôte, sont enregistrées localement. Ainsi, lors d'une prochaine requête pour la même adresse IP ou le même nom de domaine, le résultat est directement extrait du cache DNS au lieu de relancer une nouvelle requête.

Comment la mise en cache DNS contribue-t-elle à la résolution des problèmes DNS intermittents sur les instances Amazon EC2 ?

La majorité des systèmes Linux ne disposent pas de cache DNS local. Cela signifie que toutes les requêtes DNS sont directement acheminées vers le résolveur DNS officiel fourni par Amazon, qui peut être limité en nombre de requêtes simultanées. Des problèmes de résolution DNS surviennent alors en cas de nombreuses requêtes.

L'implémentation d'un cache DNS local sur votre système contribue à réduire la consommation du processeur et du réseau, tout en évitant les erreurs de résolution DNS. Un cache DNS local répond aux requêtes adressées aux ressources DNS externes, telles qu'Amazon RDS et S3.

Les instances Amazon EC2, lors de leur lancement et de leur connexion aux Amazon VPC, utilisent le protocole DHCP pour demander une adresse de serveur DNS.

Lorsque vous utilisez Amazon VPC pour établir un cloud privé virtuel, le résolveur DNS Route 53 exploite un résolveur au sein du VPC pour répondre aux requêtes DNS des instances EC2 fonctionnant sous les adresses web Amazon VPC locales et les entrées dans les zones administrées de manière privée. Le résolveur effectue des recherches récursives sur les serveurs DNS publics pour toutes les autres adresses web.

Un cache DNS fonctionne comme un enregistrement temporaire des requêtes DNS précédentes, auxquelles notre système peut accéder rapidement lorsqu'il tente d'accéder à un site web en ligne. Il tient un registre de chaque session actuelle et future. Ce cache DNS facilite la résolution de domaine et évite les erreurs avec les instances Amazon EC2 Linux.

De nombreux utilisateurs ont recours au service Route 53 d'Amazon pour le DNS lorsqu'ils accèdent à AWS, en raison de sa simplicité d'utilisation et de son faible coût. Cependant, plusieurs facteurs peuvent influencer la décision d'un utilisateur d'opter pour un serveur DNS local.

Bien que bind9 demeure une option valide pour la mise en place d'un serveur de cache DNS local, dnsmasq est bien plus facile à installer et à configurer, que ce soit sur des instances EC2 ou sur une machine locale.

Qu'est-ce que dnsmasq ?

DNSmasq est un outil Linux prenant en charge la mise en cache DNS, les services DHCP, TFTP et DNS. Sa conception compacte et légère le rend idéal pour les réseaux et les pare-feu avec des ressources limitées.

Il est très facile à installer et à paramétrer. dnsmasq représente une solution pratique et flexible pour mettre en œuvre les fonctions DNS et DHCP pour les sous-réseaux.

Il est possible de configurer les identifiants alloués par DHCP et les instructions associées pour chaque serveur ou pour un contrôleur sous-jacent. dnsmasq prend en charge les options DHCP statiques et dynamiques. Il est portable et peut gérer le DNS et DHCP pour au moins 1 000 clients.

Lorsqu'une requête DNS est reçue, dnsmasq y répond à partir d'un cache local, ou la relaie vers un serveur DNS officiel. En plus de répondre aux requêtes DNS à partir de configurations DHCP, il examine le contenu du fichier /etc/hosts pour identifier les noms d'hôtes locaux qui ne sont pas répertoriés dans le DNS public.

L'utilisation de l'outil dnsmasq à la place du cache DNS intégré au navigateur améliore de façon notable les performances de navigation. Il est parfait pour un environnement embarqué avec des ressources limitées, car il est facile à déployer et n'exige que très peu d'espace disque.

Fonctionnalités de dnsmasq

  • Il est simple d'intégrer des serveurs DNS internes avec dnsmasq en le configurant pour transmettre des requêtes spécifiques de résolution de noms de domaine à des serveurs faisant autorité.
  • La charge de travail du serveur est allégée et la fiabilité améliorée avec l'utilisation d'un serveur DNS local.
  • Le paramétrage DNS pour les appareils dotés d'un pare-feu est relativement aisé et indépendant du DNS utilisé par le FAI.
  • Si le port lié à Internet n'est pas accessible lors d'une vérification DNS sur l'ordinateur, l'opération de recherche est interrompue instantanément.
  • Grâce aux requêtes PPP (protocole point à point) ou DHCP, dnsmasq peut être configuré pour obtenir périodiquement des données directement à partir du serveur de résolution de domaine sous-jacent.

Installation

Avant d'installer et de configurer dnsmasq, il est nécessaire de désactiver le service géré par systemd.

systemctl stop systemd-resolved

Vous pouvez aussi le masquer en utilisant l'attribut mask pour éviter qu'il ne se lance automatiquement au démarrage.

systemctl mask systemd-resolved

L'installation de dnsmasq est la première étape après la désactivation de systemd-resolved. DNSmasq est généralement préinstallé sur la majorité des distributions Linux. Sinon, vous pouvez l'installer manuellement. Lancez un terminal de commande et saisissez la commande suivante.

sudo apt-get install dnsmasq

Si vous utilisez yum, employez la commande suivante :

sudo yum install -y dnsmasq

Cette commande installera automatiquement l'outil et lancera dnsmasq en arrière-plan.

Après une installation réussie, vous pouvez contrôler l'état de dnsmasq avec la commande ci-dessous.

systemctl status dnsmasq

Si son état est indiqué comme « actif (en cours d'exécution) », cela signifie que l'installation s'est bien déroulée et que le service est configuré sur le port 53. Si son état est « inactif (mort) », il faut redémarrer à la fois la machine Ubuntu et dnsmasq. Ceci devrait résoudre le problème.

Configuration

Dnsmasq est à présent prêt à être configuré comme serveur DNS local de mise en cache sur votre machine. Le fichier de configuration par défaut se situe dans /etc/dnsmasq.conf. Il faut modifier ce fichier pour adapter l'utilitaire dnsmasq à votre système.

Utilisez la commande ci-dessous pour ouvrir et modifier le fichier de configuration.

nano /etc/dnsmasq.conf

Le fichier de configuration ne peut être modifié qu'avec les privilèges root. Effacez l'ensemble du contenu du fichier, y compris les commentaires, puis copiez-collez et enregistrez les paramètres de configuration suivants.

port=53
domain-needed
bogus-priv
listen-address=127.0.0.1
expand-hosts
domain=geek-demo.com
cache-size=1000

Voici une explication rapide de chaque paramètre.

  • Port – Pour définir le port que Dnsmasq utilisera pour réceptionner les requêtes DNS.
  • domain-needed – Ne transmet que les noms de domaine au serveur DNS en amont.
  • bogus-priv – Empêche la redirection de domaine et de port.
  • listen-address – Pour définir l'adresse du serveur de noms. Habituellement, localhost est utilisé par défaut pour configurer un serveur DNS local.
  • domain – Pour configurer les domaines que dnsmasq ajoute aux identifiants courts.
  • cache-size – La taille maximale de mise en cache DNS autorisée.

Après avoir réalisé les modifications requises, enregistrez et fermez le fichier de configuration. L'étape suivante consiste à modifier le fichier /etc/resolv.conf pour ajouter l'adresse de résolution de l'hôte local. Utilisez la commande ci-dessous pour ouvrir le fichier avec l'éditeur nano.

nano /etc/resolv.conf

Vous y trouverez l'ensemble des serveurs de noms utilisés par votre système pour la résolution d'adresses. Ajoutez l'adresse de bouclage dans cette liste en inscrivant "nameserver 127.0.0.1" sur la première ligne.

Enregistrez et quittez le fichier de configuration. Afin d'appliquer les modifications, redémarrez l'utilitaire dnsmasq.

systemctl restart dnsmasq

Test du serveur de mise en cache DNS local

Il est aisé de tester le serveur DNS local. Ouvrez une ligne de commande et utilisez la commande dig pour contrôler la mise en cache DNS. Lorsque vous exécutez dig pour la première fois, le résultat sera habituel.

┌──(root💀kali)-[/home/writer]
└─# dig toptips.fr.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> toptips.fr.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 623
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;toptips.fr.com.                 IN      A

;; ANSWER SECTION:
toptips.fr.com.          227     IN      A       172.66.43.163
toptips.fr.com.          227     IN      A       172.66.40.93

;; Query time: 31 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:52:49 EDT 2022
;; MSG SIZE  rcvd: 74

Notez ici que le temps de requête est d'environ 31 ms pour obtenir les informations du serveur de noms en amont. Lancez à nouveau la même commande dig et vous observerez une réduction significative du temps de requête.

┌──(root💀kali)-[/home/writer]
└─# dig toptips.fr.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> toptips.fr.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21942
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;toptips.fr.com.                 IN      A

;; ANSWER SECTION:
toptips.fr.com.          281     IN      A       172.66.40.93
toptips.fr.com.          281     IN      A       172.66.43.163

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:58:10 EDT 2022
;; MSG SIZE  rcvd: 74

Ici, le temps de requête est de 0 ms. Cela s'explique par le fait qu'après la première recherche, dnsmasq a enregistré les données et que toutes les recherches suivantes ont été instantanées grâce à l'utilisation du cache. Le redémarrage de dnsmasq est nécessaire si vous souhaitez supprimer le cache DNS mémorisé.

Conclusion

Nous avons vu dans cet article comment installer et configurer dnsmasq pour qu'il fonctionne comme un serveur DNS local. Vous pourriez aussi être intéressé par la modification des serveurs DNS pour une navigation plus rapide sur différents systèmes d'exploitation.

Auteur
France

Rédacteur tech, guides pratiques et astuces numériques.