Comment effacer le cache DNS?

191

Je viens mis à jour l'enregistrement DNS ( ns1, ns2, ns3.myhostingcompany.com) pour un site que j'ai accueilli, mais je reçois toujours la page de stationnement de bureau d' enregistrement de domaine.

J'aimerais savoir si le problème vient des enregistrements DNS en cache d'Ubuntu. Est-il possible d'effacer le cache DNS d'Ubuntu? (si une telle chose existe?)

Jono
la source
1
Aussi, vérifiez /etc/hosts. Je viens d’être certain que l’ancienne adresse IP de mon domaine était en cours de mise en cache, mais strace ping example.comj’ai seulement révélé que j’avais oublié de supprimer l’ /etc/hostsenregistrement que j’avais ajouté il ya un moment à cause du manque de patience pour la propagation DNS.
ulidtko
2
beaucoup de ces réponses suggèrent que la mise en cache est désactivée par défaut, mais elles font également référence aux anciennes versions. Il semble certainement être
activé

Réponses:

64

Pour 18.04 et plus

Regardez la réponse de Mike Shultz .

Pour 11.10 et moins

Ubuntu ne met pas en cache les enregistrements DNS par défaut. Par conséquent, à moins d'installer un cache DNS, rien ne doit être effacé.

Les enregistrements DNS sont probablement mis en cache par les serveurs DNS de votre fournisseur. Ainsi, si vous souhaitez vérifier si les modifications DNS que vous avez apportées ont abouti, vous pouvez interroger un serveur DNS à partir de votre service d'hébergement de domaine avec dig:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

Si vous voulez qu'Ubuntu commence à mettre en cache les dns, je recommande l'installation pdnsdavec resolvconf. nscdest buggy et pas conseillé.

Li Lo
la source
14
Des références sur la raison pour laquelle NSCD est buggy? Est-il toujours buggy aujourd'hui (2012-10)?
Jjmontes
3
Pouvez-vous mettre à jour votre réponse? ATM, cela ressemble aux versions Ubuntu 11.10+ qui mettent en cache les enregistrements DNS.
Martin Konecny
71

Ubuntu 17.04 et supérieur (18.04)

A partir d'Ubuntu 17.04 et ultérieur, systemd-resol est utilisé pour DNS. Vous pouvez vider les caches de systemd comme ceci:

sudo systemd-resolve --flush-caches
Mike Shultz
la source
2
OMG, veux-tu m'épouser? J'ai aussi résolu mon problème avec 18.04 \ o /
NiKo
5
Cela n’a pas fonctionné pour moi le 16.04 LTS - mais il était utile de voir une autre manière de le mettre en cache:sudo systemd-resolve --statistics
Phil
vous avez sauvé la journée
Danilo Gomes
1
Ne fonctionne pas le 18.04
LnxSlck le
1
Pour moi, systemctl restart systemd-resolved.servicea également travaillé le 18.04.
Justin Sane
69

12.04

Ubuntu 12.04 utilise dnsmasqce qui est intégré network-manager, mais il ne met pas en cache le DNS, il n’est donc pas nécessaire de le vider. Voici un exemple de ligne de ma syslogpreuve pour le prouver:

dnsmasq[2980]: started, version 2.59 cache disabled

Il n'y a pas non plus besoin de configuration de dnsmasq. Si vous utilisez des paramètres de stock, la mise en cache de DNS ne sera pas mise en cache. Pour ce faire, vous devez le configurer explicitement, comme décrit dans cet article sur Ubuntu .

Si vous souhaitez actualiser vos paramètres, vous pouvez désactiver puis activer la mise en réseau ou exécuter

sudo service network-manager restart

Cela redémarre dnsmasqcar il est intégré à network-manager; vérifiez votre syslogpreuve pour cela.

Si vous utilisez une connexion filaire avec dhcp network manager, les paramètres seront directement pris de votre routeur et votre connexion sera automatiquement établie lorsque vous vous connecterez à Ubuntu. Vous pouvez vérifier que les paramètres de votre routeur sont corrects si vous pouvez y accéder via l'interface Web et éventuellement le redémarrer si nécessaire. S'il s'agit d'un problème général avec DNS, vous pouvez essayer d'utiliser Google DNS au lieu de votre DNS isp. Pour plus d'informations à ce sujet, cliquez ici .

fossfreedom
la source
sudo service network-manager restarta fait le tour pour moi avec Debian
Pierre de LESPINAY Le
61

Notez que Ubuntu utilise systemd-resol à partir de 17.04 et que cette réponse ne s'applique donc plus aux versions récentes d'Ubuntu. Voir " vider le cache DNS dans Ubuntu 17.04 et supérieur (18.04) "

Par défaut, le DNS n'est pas mis en cache dans Ubuntu <17.04 (mais il peut l'être dans le réseau ou l'application)

Pour confirmer d'une manière ou d'une autre s'il dnsmasqs'agit de la mise en cache, exécutez ps ax | grep dnsmasqet examinez la commande en cours d'exécution. Voici une ventilation de ma machine 13.10 par défaut:

/ usr / sbin / dnsmasq \
  --no-resolv \
  - conserver au premier plan \
  --no-hosts \
  --bind-interfaces \
  --pid-file = / var / run / NetworkManager / dnsmasq.pid \
  --listen-address = 127.0.1.1 \
  --conf-file = / var / run / NetworkManager / dnsmasq.conf \
  --cache-size = 0 \
  --proxy-dnssec \
  --enable-dbus = org.freedesktop.NetworkManager.dnsmasq \
  --conf-dir = / etc / NetworkManager / dnsmasq.d

/etc/NetworkManager/dnsmasq.dest vide par défaut. Donc, il n'y a pas de dérogation qui arrive et juste pour vérifier --cache-size=0signifie ce que nous pensons que cela signifie (au lieu d'un cache illimité ), man dnsmasqmontre:

-c, --cache-size=<cachesize>
  Set the size of dnsmasq's cache. The default is 150 names. 
  Setting the cache size to zero disables caching.

Par conséquent , même s'il est dnsmasq possible de mettre en cache DNS, il ne cache pas. Vous pouvez vérifier votre machine et divers répertoires de configuration pour vérifier que vous êtes sur la même page.

Si vous rencontrez des problèmes de cache, cela se produit probablement à l'un des endroits suivants:

  • En amont de votre ordinateur. Certains routeurs cachent. De nombreux réseaux d'entreprise vont mettre en cache le DNS. Beaucoup de serveurs DNS exécutés par des FAI utiliseront leurs propres caches. La seule façon de garantir un cache réseau consiste à utiliser un cache que vous pouvez actualiser manuellement. C'est pourquoi j'aime OpenDNS.
  • Dans l'application cliente (notamment les navigateurs). Les applications peuvent effectuer toutes sortes de mises en cache sur lesquelles Ubuntu n’a aucun effet. Comment Firefox met en cache le DNS . Comment effacer le cache DNS de Chrome . Les autres navigateurs (et applications) peuvent avoir leurs propres mécanismes.
  • Je racle le baril ici, mais vous avez peut-être installé un serveur DNS non standard dans Ubuntu au lieu d'activer la mise en cache dnsmasq. Il y a beaucoup: nscd, DJBDNS dnscache(alias tinydns), pdns, pdnsd, Bind9 (et ses variantes), et plus je ne peux pas me souviens même pas. Celles-ci seront probablement mises en évidence /etc/resolv.conf(avec config dans / etc / resolvconf / `pour autoriser ce fichier). Voici une requête DNS interceptée localement:

    $ nslookup askubuntu.com
    Server:     127.0.1.1
    Address:    127.0.1.1#53
    
    Non-authoritative answer:
    Name:   askubuntu.com
    Address: 198.252.206.24
    

    Si vous ne cliquez pas sur 8.8.8.8 (ou sur ce que vous attendez de votre serveur DNS), vérifiez ce que vous frappez à la place. Dans mon cas, je peux voir que ceci est juste dnsmasqconfiguré pour refléter les requêtes DNS en arrière pour LXC, mais dans votre cas, cela pourrait faire de mauvaises choses en cache.

    Si vous avez créé l'une des caches répertoriées, le processus de suppression de chacune varie:

    sudo /etc/init.d/nscd reload    # nscd
    sudo /etc/init.d/named restart  # bind9
    

Sur une note légèrement liée, voir ceci pour activer la mise en cache dansdnsmasq .

Oli
la source
1
La sortie de ps aux | grep est la même que la vôtre, mais il y a quelque chose de tout à fait IS qui met en cache les DNS sur ma machine. Si ce n'est pas Dnsmasq c'est autre chose. La preuve: j'ai créé un sous-domaine sur mon serveur, mais je ne pouvais pas le cingler, hôte inaccessible. J'ai vérifié à downforeveryoneorjustme.com et c'était en place, donc le problème de propagation jeté. Ni mon routeur, ni mon FAI, car j'utilise le 8.8.8.8 du DNS de Google. Ensuite, j'ai redémarré l'ordinateur (et PAS le routeur) et j'ai pu accéder au domaine. J'avais réessayé une douzaine de fois avant de redémarrer sans succès. Première tentative après le redémarrage a atteint l'hôte.
Matteo
Et ce n’était pas la première fois que j’expérimentais la même chose, au fait. Il y a quelques mois, la même chose s'est produite et le seul moyen pour atteindre le domaine était de redémarrer l'ordinateur, mais j'avais une version plus ancienne d'Ubuntu.
Matteo
@matteo Le navigateur?
Oli
non, comme je l'ai dit, j'ai testé avec ping, pas seulement le (s) navigateur (s).
Matteo
@matteo J'ai ajouté plus mais je manque d'idées. Il n'y a pas beaucoup d'endroits où quelqu'un pourrait mettre en cache le DNS :)
Oli
39

Pour 12.04:

Ubuntu 12.04 met en cache le DNS en utilisant dnsmasq (voir man dnsmasq). Utilisez ce qui suit pour vider le cache:

sudo kill -HUP $(pgrep dnsmasq)
Zacharie
la source
Je vous remercie! Vous êtes les premiers à parler de la mise en cache par défaut de 12.04!
Tarka
6
12.04 ne met pas les DNS en cache par défaut - vérifiez votre journal système après le redémarrage de network-manager; il aura une entrée qui montre que dnsmasq commence par cache-disabled.
1
Je ne sais pas si le cache est activé par défaut, mais cette réponse a fonctionné pour moi.
Jeyk
Pourquoi pas juste sudo killall -HUP dnsmasq?
James Haigh
1
utiliser pkillau lieu de killetpgrep
Robert Siemer
15

sudo /etc/init.d/nscd restart

http://www.ubuntugeek.com/howto-clearflush-dns-cache-in-ubuntu.html

Vous pouvez également vérifier si vos modifications DNS ont été propagées à l'aide de dig et si vous vous en tenez à quelqu'un d'autre que vos serveurs DNS par défaut. Dans ce cas, google DNS.

dig @8.8.8.8 example.com

Mark Davidson
la source
12
Il est à noter que nscd n'est pas installé par défaut.
Scaine
11

Personnellement, j'utiliserais OpenDNS et utiliserais leur fonction de vérification du cache pour forcer une actualisation juste pour m'assurer que les modifications fonctionnent, mais vous ne pouvez pas garantir qu'elles actualiseront pour vos utilisateurs dans les 48 heures.

Le DNS est une bête lente. La patience vous gardera sain d'esprit.

Oli
la source
+1 J'utilise OpenDNS et effacer le cache est très utile.
Mark Davidson
Je me méfie d'OpenDNS. J'en étais content au début, mais j'ai commencé à me méfier; Bien que je suppose que si c'est un choix entre FAI et OpenDNS, je suis mieux avec OpenDNS, non?
Jono
2
Je dirais que OpenDNS est le moindre mal. Ils aimeraient monétiser votre trafic, mais uniquement sur les accès de domaine incorrect.
Oli
@ Oli Le lien est en panne. Si vous l'utilisez toujours, pourriez-vous mettre à jour les liens?
Shayan
7

Si vous utilisez nscd:

sudo /etc/init.d/nscd restart

Il convient de mentionner que ce n'est peut-être pas le système d'exploitation qui le met en cache. Tout le monde aime mettre en cache le DNS ... Quelques tests:

Vérifiez s'il s'agit de la nouvelle ou de l'ancienne adresse IP. La plupart des navigateurs mettent également le DNS en cache. Par conséquent, si vous n'avez pas redémarré Chromium ou que vous n'ayez peut-être pas accès à la version la plus récente.

ping yourdomain.com

Basculez votre serveur de noms local dans /etc/resolv.conf vers un autre fournisseur, Google ou un autre niveau, par exemple:

nameserver 8.8.8.8
nameserver 4.2.2.2

Et puis à nouveau ping.

Vérifiez que votre routeur ne met pas le DNS en cache sous quelque forme que ce soit. (Varie selon le routeur / firmware / etc)

Enfin, patience. Le DNS peut prendre un peu de temps pour se propager sur Internet.

bikesandcode
la source
2
Si vous utilisez NetworkManager et que DHCP, /etc/resolve.conf sera vidé à l'expiration du bail DHCP, vous devrez donc définir une adresse IP statique dans NetworkManager pour que cela fonctionne plus longtemps.
LassePoulsen
+1 Je n'avais pas réalisé que Firefox mettait en cache le DNS, cela m'a beaucoup aidé.
wavemode
+1 pour le changement de serveur de noms local sur google travaillé
Bibek Sharma
5

Toutes les réponses ci-dessus ont oublié une chose importante dans la résolution de noms: généralement, les serveurs DNS auxquels vous demandez la résolution de noms ne sont pas ceux qui conservent les enregistrements eux-mêmes (le serveur faisant autorité). Chaque enregistrement DNS étant associé à une valeur Time To Live, ce qui obligera chaque serveur DNS de la chaîne de résolution à effectuer la mise en cache pendant le nombre de secondes indiqué par cette valeur. Ainsi, non seulement vous pouvez mettre en cache votre ordinateur, mais CERTAINEMENT le résultat de la recherche de nom sera mis en cache quelque part sur un serveur que vous ne contrôlez pas.

La seule solution pour être immédiatement averti d'un changement d'enregistrement de nom consiste à utiliser une valeur TTL de 0 lors de la création / mise à jour de l'entrée dans le serveur de noms faisant autorité. Mais cela signifie que pour chaque résolution de nom, le serveur sera touché, ce qui n’est généralement pas autorisé par les bureaux d’enregistrement. Par exemple, ils peuvent fournir une liste de valeurs TTL prédéfinies que vous pouvez choisir.

Je gère différents noms de domaine et pour m'assurer que les modifications sont bien appliquées dans les serveurs de noms faisant autorité, j'utilise un outil appelé dnstracerpermettant d'afficher le résultat de la recherche sur chaque serveur à partir de la racine DNS.

En conclusion, même sans solution de mise en cache DNS en place, il y aura toujours un délai entre le moment où vous modifiez les enregistrements DNS et le changement observé sur un PC. Ce délai dépend grandement de la durée de vie des enregistrements et du nombre de serveurs DNS entre votre PC et le serveur de noms faisant autorité.

Benoit
la source
Bien sûr, mais si tel était le problème, redémarrer l'ordinateur ne le corrigerait pas.
Matteo
2

Pour Ubuntu 14.04, je recommande cette commande:

sudo service dns-clean
alphayax
la source
Pas sur les installations du serveur par défaut. Fonctionne uniquement à partir de 14.04.
RJ
1

J'ai utilisé la commande suivante pour vider le cache DNS sur ma boîte 12.10 ubuntu et cela a fonctionné à merveille.

sudo kill -HUP $(pgrep dnsmasq)

Un autre signal utile est le SIGUSR1, qui envoie une petite statistique à syslog ou notée par man dnsmasq:

En mode --no-daemon ou lorsque la journalisation complète est activée (-q), une sauvegarde complète du contenu du cache est effectuée.

j0inty
la source
utiliser pkillau lieu de killetpgrep
Robert Siemer
1

Sous Ubuntu 16.04, je ne pouvais pas effacer le cache sans le faire:

sudo service dnsmasq restart
Volomike
la source
0

J'ai aussi trouvé des contradictions, mais ceci: https://superuser.com/a/521562 woks pour moi (Ubuntu 13.10 avec les dernières mises à jour, aucun package réseau spécial installé).
En bref, utilisez simplement ceci
sudo /etc/init.d/dns-clean

Nitz
la source
0

Je recommande spécialement openDNS sur les serveurs distants Ubuntu, cela facilite beaucoup la tâche ...

Comment faire? Bien...

cd /etc/dhcp
sudo nano dhclient.conf

insérez ceci AVANT la ligne "request subnet-mask ..."

supersede domain-name-servers 208.67.222.222,208.67.220.220;

cela redémarrera l'interface si rapidement que vous ne devriez même pas perdre votre connexion SSH

sudo ifdown eth0 && sudo ifup eth0

vérifiez ceci pour voir si vos nouveaux OpenDNS sont correctement installés

cat /etc/resolv.conf
D.Snap
la source
Ce n'est certainement pas une réponse à la question.
Blafasel