DNS, abréviation de Domain Name System protocole, est utilisé sur les systèmes Linux afin de récupérer les adresses IP associées aux noms.
Par exemple, lorsque vous effectuez une requête ping, il est fort probable que vous utilisiez le protocole DNS pour récupérer l'IP du serveur.
Dans la plupart des cas, les requêtes DNS que vous effectuez sont stockées dans un cache local sur votre système d'exploitation.
Cependant, dans certains cas, vous souhaiterez peut-être vider le cache DNS de votre serveur .
C'est peut-être parce que vous avez changé l'adresse IP d'un serveur sur votre réseau et que vous souhaitez que les modifications soient reflétées immédiatement.
Dans ce tutoriel, vous allez apprendre comment vous pouvez facilement vider le cache DNS sous Linux , que vous utilisiez systemd ou dnsmasq.
Prérequis
Afin de pouvoir vider votre cache DNS, vous devez savoir comment la résolution DNS fonctionne sur votre système Linux .
Selon votre distribution, vous pouvez être confronté à différents services Linux qui agissent comme un résolveur DNS .
Avant de commencer, il est très important que vous sachiez comment la résolution DNS se produira réellement sur votre système d'exploitation.
Si vous lisez cet article, vous cherchez à vider le cache de votre résolveur DNS local . Mais comme vous pouvez le constater, il existe de nombreux caches différents depuis votre application locale jusqu'aux serveurs DNS Internet réels.
Dans ce tutoriel, nous allons nous concentrer sur la case jaune signifiant le résolveur de stub local implémenté sur chaque système Linux.
Trouver votre résolveur DNS local
Sur la plupart des systèmes Linux, le résolveur DNS est soit "systemd-resolved" soit dnsmasq. Afin de savoir si vous avez affaire à l'un ou à l'autre, vous pouvez exécuter la commande suivante
$ sudo lsof -i :53 -S
Remarque :alors pourquoi exécutons-nous cette commande ? Comme DNS s'exécute sur le port 53, nous recherchons les commandes associées au service exécuté sur le port 53, qui est votre résolveur DNS local ou "stub".
Comme vous pouvez le voir, sur une distribution récente d'Ubuntu 20.04, le service qui écoute sur le port 53 est résolu par systemd. Cependant, si vous deviez exécuter cette commande sur Ubuntu 14.04, vous obtiendriez une sortie différente.
Dans ce cas, le DNS local utilisé dans dnsmasq et les commandes sont évidemment différents.
Connaissant ces informations, vous pouvez vous diriger vers le chapitre qui vous intéresse. Si vous deviez avoir une sortie différente sur votre serveur, assurez-vous de laisser un commentaire pour que nous mettions à jour cet article.
Vider le DNS à l'aide de la résolution systemd
Le moyen le plus simple de vider le DNS sous Linux, si vous utilisez systemd-resolved, est d'utiliser la commande "systemd-resolve" suivie de "–flush-caches".
Vous pouvez également utiliser la commande "resolvectl" suivie de l'option "flush-caches".
$ sudo systemd-resolve --flush-caches
$ sudo resolvectl flush-caches
Afin de vérifier que votre cache DNS Linux a bien été vidé, vous pouvez utiliser les « –statistics " qui mettra en surbrillance la "Taille actuelle du cache" dans la section "Cache".
$ sudo systemd-resolve --statistics
Félicitations, vous avez réussi à vider votre cache DNS sous Linux !
Vider le cache DNS à l'aide de signaux
Une autre façon de vider le cache DNS peut être obtenue en envoyant un signal "USR2" au service "systemd-resolved" qui lui demandera de vider son cache DNS.
$ sudo killall -USR2 systemd-resolved
Afin de vérifier que le cache DNS a bien été vidé, vous pouvez envoyer un « USR1 ” signal au service résolu par systemd. De cette façon, il videra son état actuel dans le journal systemd.
$ sudo killall -USR1 systemd-resolved
$ sudo journalctl -r -u systemd-resolved
Génial, votre cache DNS a été correctement vidé à l'aide de signaux !
Vider le DNS à l'aide de dnsmasq
Le moyen le plus simple de vider votre résolveur DNS, lorsque vous utilisez dnsmasq, est d'envoyer un signal "SIGHUP" au processus "dnsmasq" avec la commande "killall".
$ sudo killall -HUP dnsmasq
Comme pour systemd-resolved, vous pouvez envoyer un "USR1 » au processus afin qu'il imprime ses statistiques dans le fichier journal « syslog ». À l'aide d'une simple commande "tail", nous sommes en mesure de vérifier que le cache DNS a bien été vidé.
Et si vous exécutiez dnsmasq en tant que service ?
Dnsmasq exécutant un service
Dans certains cas, vous pouvez exécuter "dnsmasq" en tant que service sur votre serveur. Afin de vérifier si c'est le cas ou non, vous pouvez lancer la commande « systemctl » ou celle « service » si vous êtes sur un système SysVinit.
$ sudo systemctl is-active dnsmasq
# On SysVinit systems
$ sudo service dnsmasq status
Si vous remarquez que dnsmasq s'exécute en tant que service, vous pouvez le redémarrer à l'aide de l'habituel "systemctl ” ou “service ” commandes.
$ sudo systemctl restart dnsmasq
# On SysVinit systems
$ sudo service dnsmasq restart
Après avoir exécuté ces commandes, assurez-vous toujours que vos services ont été correctement redémarrés.
$ sudo systemctl status dnsmasq
# On SysVinit systems
$ sudo service dnsmasq status
Conclusion
Dans ce didacticiel, vous avez appris comment vider rapidement et facilement votre cache DNS sous Linux.
À l'aide de cet article, vous pouvez facilement vider le cache des résolveurs locaux systemd et dnsmasq. Cependant, vous devez savoir qu'il existe un autre DNS commun, nommé bind , qui est délibérément omis dans cet article.
Un autre article sur la configuration d'un serveur de cache DNS local à l'aide de BIND devrait paraître prochainement.
Si vous êtes intéressé par les requêtes DNS et comment elles sont exécutées, vous pouvez utiliser cet article très utile de "zwischenzugs" nommé le " Anatomie d'une requête DNS " . L'article est particulièrement utile si vous souhaitez déboguer des requêtes DNS et que vous vous demandez comment elles sont effectuées.
Aussi, si vous êtes intéressé par l'administration système Linux , nous avons une section complète à ce sujet sur le site Web, alors assurez-vous de la consulter.