Comment vider le cache DNS local dans CentOS

20

Je cherche un moyen de vider le cache DNS local sur un CentOS 6.

Le système ne exécute aucun serveur DNS ou quoi que ce soit, et je souhaite que chaque requête DNS soit envoyée au serveur de noms configuré, même pour les doublons.

La plupart de ce que j'ai trouvé en ligne me disent de faire service nscd restart, de recharger ou de faire nscd -i hosts. Cependant, aucun ne semble vider le cache.

Je me demande donc si quelqu'un a une idée de la façon dont je pourrais faire cela. Existe-t-il une sorte de commutateur dans le noyau que je dois retourner? Tout type de travail est également bien.

zee
la source
Que faites-vous pour vérifier si le cache a été vidé ou non?
John
ok c'est un peu compliqué, j'ai un programme sur mon système qui écoute sur le port 53 et transmet les requêtes DNS d'une certaine manière, et aussi un proxy http utilisant localhost comme 'serveur DNS'; sur la première requête (disons wget -e 'http_proxy=localhost:3128' xxx.com), je peux voir que la requête est correctement transmise, mais pas toutes les suivantes. Si j'attends assez longtemps (le cache expire), cela fonctionnera à nouveau.
zee
Et j'ai également configuré le proxy (calmar) pour ne mettre en cache aucun objet, donc je suppose que c'est le système qui cache toujours la réponse d'une manière ou d'une autre
zee
1
nscd -i hosts -> fonctionne à chaque fois. J'ai redémarré nscd 3 fois de suite et il ne voulait pas vider le cache.
Danie
nscd ne semble pas être une chose dans CentOS 7 minimal. Je sais que la question appelle CentOS 6, mais le titre appelle CentOS en général. Quelle est la méthode CentOS 7?
duct_tape_coder

Réponses:

11

Ce n'est pas votre boîte locale qui met en cache les requêtes DNS mais c'est le résolveur DNS que vous utilisez dans votre /etc/resolv.confqui met en cache.

Pour éviter d'obtenir la réponse de ces requêtes mises en cache:

  1. Changez le résolveur.

    $ dig @<resolve-ip> www.google.com

  2. Videz le cache DNS sur le résolveur, si vous pouvez accéder au serveur DNS.

    $ sudo /etc/init.d/bind restart

pradeepchhetri
la source
Hmm mais j'ai mis dns_nameservers 127.0.0.1en place un fichier de configuration proxy, et l'auditeur ne transmet les requêtes qu'au serveur de noms préconfiguré, ne devrait-il pas être le cas que resolv.conf ne soit même pas consulté?
zee
4
"bash: /etc/init.d/bind: Aucun fichier ou répertoire de ce type" Et la méthode de l'OP obtient "Impossible de redémarrer nscd.service: Impossible de charger l'unité nscd.service: Aucun fichier ou répertoire de ce type." Je suppose que ceux-ci ont été déplacés / modifiés. Pourquoi ne peuvent-ils pas simplement laisser des choses qui fonctionnent, ou au moins conserver des alias? Assez mauvais pour devoir devenir un spécialiste du système d'exploitation pour simplement utiliser une boîte Linux. Pire encore quand vous devez réapprendre le système d'exploitation avec chaque version.
JosephK
3

Même après l'actualisation ou le vidage du cache DNS sur la machine cliente si cela ne fonctionne pas, regardez que votre serveur ou machine cliente est lié à n'importe quel serveur NIS si oui, puis changez les "hôtes: fichiers nis dns" en "hôtes: fichiers dns nis" dans le fichier /etc/nsswitch.conf et vous devez également modifier l'adresse IP dans la liste des hôtes du serveur maître NIS.

Vilas Addagatla
la source
Cela a conduit à ma solution. Dans / etc / hosts se trouvait l'ancienne adresse IP précédemment configurée statiquement. Quelque chose que j'avais fait il y a quelque temps. La suppression de cette ligne (ou son remplacement par la nouvelle adresse IP) a résolu le problème et m'a permis d'envoyer une requête ping à ma machine en utilisant son nom d'hôte.
Paul
3

Je suis presque certain que ce n'est pas le système qui met en cache la réponse - cette partie (mise en cache du système) n'est gérée que par le nscddémon. Redémarrer (ou arrêter complètement) ce démon réinitialise ou élimine la mise en cache du système d'exploitation des réponses aux demandes de service de noms.

J'offrirai deux possibilités, bien que l'écouteur personnalisé que vous avez configuré sur le port 53 trouble considérablement les eaux:

  • A) Votre système émet des requêtes en amont, mais le résolveur de nom en amont immédiat met en cache la réponse en fonction de ses paramètres ou du TTL de l'enregistrement.
  • B) Votre écouteur personnalisé met en cache les réponses en interne et remet simplement cette réponse directement au système lorsqu'il est demandé à nouveau avant l'expiration du temps de cache.
John
la source
Merci pour l'entrée, mais l'auditeur ne fait que transmettre la requête et la réponse, ce n'est que 200 lignes de code après tout. Ce ne devrait donc pas être le deuxième cas; l'auditeur imprime également tout ce qu'il reçoit, donc je suis sûr qu'il ne reçoit rien: |
zee