web-dev-qa-db-fra.com

Comment effacer le cache DNS?

Je viens de mettre à jour l'enregistrement DNS (ns1, ns2, ns3.myhostingcompany.com) pour un site que j'ai hébergé, mais j'obtiens toujours la page de stationnement du 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?)

189
Jono

Pour 18.04 et plus

Regardez 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. Par conséquent, 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 vous recommande d'installer pdnsd avec resolvconf. nscd est bogué et déconseillé.

63
Li Lo

12.04

Ubuntu 12.04 utilise dnsmasq qui est intégré à network-manager, mais il ne fonctionne pas dans le cache DNS. Il n'est donc pas nécessaire de le vider. . Voici un exemple de ligne de mon syslog pour prouver ce point:

dnsmasq[2980]: started, version 2.59 cache disabled

De plus, aucune configuration de dnsmasq n'est nécessaire. 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 explicitement le configurer comme suit: article sur Ubunt décrit.

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 dnsmasq car il est intégré à network-manager; vérifiez votre syslog pour obtenir des preuves à ce sujet.

Si vous utilisez une connexion filaire avec dhcp network manager prendra les paramètres directement 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 ISP DNS. Pour plus d'informations, détaillé ici .

70
user76204

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 versions supérieures) (18.04) "

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

Pour confirmer d'une manière ou d'une autre si dnsmasq est en cache, exécutez ps ax | grep dnsmasq et 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\
  - taille du cache = 0 \
 - proxy-dnssec\
 --enable-dbus = org.freedesktop.NetworkManager.dnsmasq\
 --conf-dir =/etc/NetworkManager/dnsmasq.d

/etc/NetworkManager/dnsmasq.d est vide par défaut. Donc, il n'y a pas de dérogations et vérifier que --cache-size=0 signifie ce que nous pensons que cela signifie (au lieu d'un cache unlimited ), man dnsmasq indique:

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

Ainsi, alors que dnsmasq peut mettre en cache le DNS, il ne cache pas la boîte. 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. De nombreux serveurs DNS gérés par les fournisseurs de services Internet utilisent 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 faire toutes sortes de leurs propres mises en cache sur lesquelles Ubuntu n'a aucun effet. Comment Firefox met en cache 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 dans dnsmasq. Il y en a beaucoup: nscd, DJBDNS dnscache (alias TinyDNS), pdns, pdnsd, Bind9 (et ses variantes) et plus encore, je ne m'en souviens même pas. Ceux-ci seront probablement représentés par /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 simplement dnsmasq configuré pour refléter les requêtes DNS en arrière pour LXC, mais dans votre cas, il se peut qu'il fasse 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 dans dnsmasq .

63
Oli

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
57
Mike Shultz

Pour 12.04:

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

Sudo kill -HUP $(pgrep dnsmasq)
40
zechariah

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 se sont propagées à l'aide de Dig et en recherchant une personne autre que vos serveurs DNS par défaut. Dans ce cas, google DNS.

Dig @8.8.8.8 example.com

16
Mark Davidson

Personnellement, je tiliserais OpenDNS et utiliserais leur fonction de vérification du cache pour forcer une actualisation afin de s’assurer que les modifications fonctionnent, mais vous ne pouvez pas garantissent une actualisation pour vos utilisateurs dans les 48 heures.

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

11
Oli

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.

7
bikesandcode

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é). Comme chaque enregistrement DNS est associé à une valeur Durée de vie, 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 être sûr que les modifications sont bien appliquées dans les serveurs de noms faisant autorité, j'utilise un outil appelé dnstracer qui permet 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, il y aura toujours un délai entre le moment où vous modifiez les enregistrements DNS et la modification affichée sur un PC. Ce délai dépend grandement du TTL des enregistrements et du nombre de serveurs DNS entre votre PC et le serveur de noms faisant autorité.

5
Benoit

Pour Ubuntu 14.04, je recommande cette commande:

Sudo service dns-clean
2
alphayax

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.

1
j0inty

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

0
Nitz

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

Sudo service dnsmasq restart
0
Volomike

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ère cette 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
0
D.Snap