Vider le cache DNS de MacOS

- MacOS

Depuis que j’utilise des Macs, j’ai toujours galéré pour vider le cache des DNS et aujourd’hui voici un exemple concret des problèmes que j’ai avec le cache des DNS de MacOS. À la base je voulais juste me connecter en SSH à une machine mais je n’y suis pas parvenu.
Je me suis retrouvé à faire ce genre de tests :

Capture d’une fenêtre de terminal où j’essaye de vider le cache DNS
Capture d’une fenêtre de terminal où j’essaye de vider le cache DNS

Sur cette capture, je pense que je vide le cache DNS avec dscacheutil -flushcache puis je fais une résolution DNS avec dig et nslookup qui retournent la bonne ip mais ping utilise une autre IP qui n’est pas la bonne. Cela veut dire 2 choses :

La vérité est que dig et nslookup retournent directement l’IP du serveur DNS alors que ping utilise le cache du resolver mDNSResponder qui peut donc retourner une valeur différente comme c’est le cas ici. Heureusement il existe une solution pour vider les caches DNS avec ces 3 commandes :

dscacheutil -flushcache
sudo killall -HUP mDNSResponder
sudo killall -HUP mDNSResponderHelper

Avec ces commandes, le cache DNS semble effectivement vide puisqu’en refaisant un ping il utilise maintenant la bonne IP.

Capture d’une fenêtre de terminal avec ping utilisant la bonne IP
Capture d’une fenêtre de terminal avec ping utilisant la bonne IP

Sur la capture il y a un message “No matching processes were found”, c’est simplement parce qu’il n’y a pas de process mDNSResponderHelper qui tournait au moment de la capture, ce n’est donc pas un message d’erreur mais une information. Au final le cache a bien été vidé.

Pour conclure, cette solution est très vieille puisque j’ai retrouvé des traces de ces commandes sur une question sur StackOverflow datant de 2013, mais je l’avais jamais croisée jusqu’ici, j’ai toujours utilisé la commande dscacheutil -flushcache et considéré qu’elle fonctionnait

J’ai fait un un alias de ces commandes dans mes dotfiles, tout en espérant que le future moi se souviendra qu’il existe car je galère trop souvent avec ce genre d’erreur de résolution de nom de domaine.