Comment vider le DNS sous Linux
Vous pouvez vider le cache DNS sur un ordinateur Linux basé sur systemd avec la commande « resolvectl flush-caches ». Si vous utilisez dnsmasq, vous pouvez effacer le DNS en utilisant « sudo killall -HUP dnsmasq » à la place.
Votre expérience de navigation sur Internet est-elle lente sur votre appareil Linux, ou les sites Web que vous visitez sont-ils obsolètes ou le mauvais site Web ? Discutons du vidage du cache DNS sous Linux et comment savoir si vous en avez vraiment besoin.
Sommaire
Que sont les caches DNS ?
Le service de nom de domaine est la magie qui convertit les noms en nombres. Il prend les noms de réseau de périphériques et les noms de sites Web et recherche leurs adresses IP. Le réseau peut alors utiliser l’adresse IP pour acheminer correctement le trafic vers ces appareils ou sites.
Ces recherches, connues sous le nom de demandes, ne se produisent pas instantanément. Il y a une petite période de temps finie impliquée. Les requêtes DNS Internet peuvent nécessiter l’interrogation de serveurs DNS précurseurs, de serveurs de noms racine, de serveurs de domaine de niveau supérieur et de serveurs de noms faisant autorité. Les requêtes DNS sont rapides, mais pour les rendre encore plus rapides, les réponses aux requêtes DNS récentes sont mises en cache sur les serveurs précurseurs DNS.
Si la réponse à une requête DNS se trouve dans le cache du serveur précurseur, aucun autre serveur n’a besoin d’être contacté. La réponse est renvoyée depuis le cache du serveur précurseur. De même, un petit cache est maintenu par votre routeur haut débit à la maison. Si vous demandez un périphérique réseau local en utilisant son nom de périphérique réseau, votre routeur fournit l’adresse IP. Il peut également mettre en cache les réponses qu’il a reçues de serveurs DNS externes.
Généralement, les réseaux et les ordinateurs Linux sont configurés pour utiliser des services DNS externes, soit fournis par votre fournisseur d’accès Internet, soit par un service gratuit tel que OpenDNS ou Google DNS. Il y a de bonnes raisons pour lesquelles certaines personnes utilisent leur propre serveur DNS, mais la plupart d’entre nous ne le font pas. Cependant, votre ordinateur Linux, même s’il n’exécute pas de serveur DNS, peut éventuellement mettre en cache les résultats des requêtes DNS.
Le problème avec l’utilisation des données mises en cache est que tout repose sur l’hypothèse qu’aucun des détails mis en cache n’a changé depuis qu’ils ont été mis en cache. Si les détails ont changé, les informations que vous recevrez seront obsolètes.
Si une entrée de cache ou l’intégralité du cache est corrompue, vous obtiendrez au mieux des performances médiocres et au pire des vulnérabilités de sécurité. C’est à ce moment-là que vous voudrez vous pencher sur le « vidage » ou l’effacement du cache DNS.
Votre ordinateur utilise-t-il un cache DNS local ?
Certains de nos ordinateurs de test avaient des caches DNS locaux activés, et d’autres l’avaient désactivé. Il était désactivé sur notre ordinateur Manjaro 21, mais il était activé par défaut sur Fedora 37 et Ubuntu 22.10.
Pour déterminer si votre ordinateur Linux met en cache les requêtes DNS, utilisez le is-active
option de la systemctl
commande. Le démon qui gère le cache DNS est le gestionnaire de résolution de noms de réseau systemd, connu sous le nom de systemd-resolved
.
systemctl is-active systemd-resolved
Si la réponse est « active », la mise en cache DNS est en cours. Si la réponse est « inactif », ce n’est pas le cas. Sur cet ordinateur particulier, il est actif. Nous pouvons utiliser le resolvectl
commande avec l’option de statistiques pour voir combien d’enregistrements sont dans le cache.
resolvectl statistics
Nous pouvons voir qu’il y a 330 entrées dans le cache DNS de cet ordinateur.
Examen de votre cache DNS
L’examen des entrées du cache DNS n’est pas une condition préalable au vidage du cache, et si vous n’avez aucun intérêt à le faire, vous pouvez ignorer toute cette étape. Parfois, cependant, cela peut être informatif. Vous pouvez voir des entrées brouillées qui indiquent une corruption, ou vous pouvez voir des messages d’erreur liés à des problèmes d’adressage de périphérique sur votre réseau.
Maintenant, il n’y a pas de moyen simple de voir ces entrées. Nous pouvons le faire, mais nous devons être un peu créatifs. USR1
ou signal numéro un défini par l’utilisateurest un signal qui peut être envoyé par le kill
et killall
commandes. Ce signal n’a pas de signification prédéfinie. Les applications sont libres d’ignorer ce signal ou de réagir de la manière que les développeurs ont implémentée.
La systemd-resolved
démon réagit à USR1
en écrivant son cache dans les journaux système. On peut alors utiliser le journalctl
commande pour filtrer les entrées DNS.
Nous utiliserons le killall
commande avec USR1
Pour envoyer le signal au systemd-resolved
démon. Notez que même si nous utilisons le killall
commande, le systemd-resolved
démon continue de fonctionner. Ce n’est pas un signal de terminaison que nous envoyons.
sudo killall -USR1 systemd-resolved
Nous allons maintenant utiliser le journalctl
commande avec le -u
(filtrer par systemd
unité) option pour extraire les entrées de journal qui ont été générées par systemd-resolved
. Nous allons rediriger cette sortie dans un fichier texte appelé « dns.txt ».
sudo journalctl -u systemd-resolved > dns.txt
Nous utiliserons le less
visualiseur de fichiers pour afficher le contenu du fichier.
less dns.txt
Vous pourrez trouver les mappages mis en cache entre les noms de domaine et les adresses IP en faisant défiler et en recherchant dans le texte.
Nous pouvons voir une entrée pour Google qui a une adresse IP de 216.58.212.196. Vous pouvez vérifier cela en mettant l’adresse IP dans un navigateur Web. Vous devriez voir la page d’accueil de la recherche Google.
Comment vider le cache DNS sous Linux
Le vidage du cache supprime toutes les entrées et redémarre le processus de collecte. S’il y en a, cela supprime de force les entrées incorrectes et corrompues du cache.
La commande est simple ; nous utilisons resolvectl
avec le flush-caches
option.
resolvectl flush-caches
Nous revenons silencieusement à la ligne de commande. Pour confirmer que quelque chose s’est réellement passé, nous vérifierons à nouveau les statistiques du cache DNS.
resolvectl statistics
Nous pouvons voir que la taille du cache est tombée à zéro. Il augmentera au fil du temps à mesure qu’il accumule de nouvelles entrées.
Comment vider le cache dnsmasq sous Linux
La dnsmasq
L’application fournit un cache DNS et un serveur DHCP. Il est populaire auprès des utilisateurs qui souhaitent exécuter leur propre serveur DNS, en particulier sur des installations non systemd.
Rincer le dnsmasq
Le cache DNS est facile. Nous devons envoyer le SIGHUP
signal qui indique au dnsmasq
démon pour réinitialiser efficacement. Cela efface son cache DNS. Pour envoyer le signal, nous utilisons le killall
commande avec le -HUP
drapeau et le nom de l’application.
sudo killall -HUP dnsmasq
Rincé, avec succès
Bien sûr, si votre ordinateur ne met pas du tout en cache, vous n’avez rien à vérifier.
S’il met en cache les requêtes DNS mais que tout fonctionne correctement, vous pouvez également l’ignorer. Mais si vous rencontrez des mises à jour de pages Web lentes ou sporadiques lorsque vous naviguez sur le Web, ou si vous voyez les mauvaises pages Web, c’est probablement le bon moment pour vider votre cache DNS.