Wie lösche ich den DNS-Cache?


191

Ich aktualisierte nur den DNS - Eintrag ( ns1, ns2, ns3.myhostingcompany.com) für eine Seite , die ich habe gehostet haben, aber ich habe immer noch die Domain - Registrar Parkseite.

Ich würde gerne sehen, ob das Problem die zwischengespeicherten DNS-Einträge von Ubuntu sind. Gibt es eine Möglichkeit, den DNS-Cache von Ubuntu zu löschen? (Wenn so etwas existiert?)


1
Überprüfen Sie auch /etc/hosts. Ich war mir nur sicher, dass die alte IP-Adresse meiner Domain zwischengespeichert wurde, habe jedoch strace ping example.comfestgestellt, dass ich vergessen habe, den vor einiger /etc/hostsZeit hinzugefügten Eintrag zu entfernen, da ich keine Geduld für die DNS-Weitergabe habe.
Ulidtko

2
Viele dieser Antworten deuten darauf hin, dass die Zwischenspeicherung standardmäßig deaktiviert ist. Sie verweisen jedoch auch auf ältere Versionen. In meinem Computer (18.04.)
Scheint

Antworten:


64

Für 18.04 und höher

Schau dir die Antwort von Mike Shultz an .

Für 11.10 und darunter

Ubuntu speichert DNS-Einträge standardmäßig nicht im Cache. Wenn Sie also keinen DNS-Cache installiert haben, müssen Sie nichts löschen.

DNS-Einträge werden wahrscheinlich von den DNS-Servern Ihres Providers zwischengespeichert. Wenn Sie also überprüfen möchten, ob die von Ihnen vorgenommenen DNS-Änderungen erfolgreich waren, können Sie einen DNS-Server von Ihrem Domain-Hosting-Dienst mit dig abfragen:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

Wenn Ubuntu DNS zwischenspeichern soll, empfehle ich die Installation pdnsdzusammen mit resolvconf. nscdist fehlerhaft und nicht ratsam.


14
Irgendwelche Hinweise, warum nscd fehlerhaft ist? Ist es heute noch fehlerhaft (2012-10)?
jjmontes

3
Können Sie Ihre Antwort-ATM aktualisieren, klingt es, als ob Ubuntu-Versionen ab 11.10 DNS-Einträge zwischenspeichern.
Martin Konecny

70

Ubuntu 17.04 und höher (18.04)

Ab Ubuntu 17.04 wird die Systemauflösung für DNS verwendet. Sie können die Caches von systemd folgendermaßen leeren:

sudo systemd-resolve --flush-caches

2
OMG, willst du mich heiraten? Löste mein Problem mit 18.04 zu \ o /
NiKo

5
Bei 16.04 LTS hat das nicht funktioniert - aber es war nützlich, noch eine andere Art des Cache-Speicherns zu sehen:sudo systemd-resolve --statistics
Phil,

Du hast den Tag gerettet
Danilo Gomes

1
Funktioniert nicht am 18.04
LnxSlck

1
Bei mir systemctl restart systemd-resolved.servicehat auch am 18.04 gearbeitet.
Justin Sane

69

12.04

Ubuntu 12.04 verwendet dnsmasqdas, in das es eingebaut ist network-manager, aber es speichert keine DNS zwischen, so dass es nicht notwendig ist, es zu leeren. Hier ist eine Beispielzeile von mir syslog, um diesen Punkt zu beweisen:

dnsmasq[2980]: started, version 2.59 cache disabled

Es ist auch keine Konfiguration von erforderlich dnsmasq. Wenn Sie mit Standardeinstellungen arbeiten, werden DNS nicht zwischengespeichert. Dazu müssen Sie sie explizit einrichten, wie in diesem Ubuntu-Artikel beschrieben.

Wenn Sie Ihre Einstellungen aktualisieren möchten, können Sie das Netzwerk deaktivieren und dann aktivieren oder ausführen

sudo service network-manager restart

Dies wird neu gestartet, dnsmasqweil es eingebaut ist network-manager. Überprüfen Sie Ihre syslogfür die Beweise dafür.

Wenn Sie eine Kabelverbindung mit DHCP verwenden network manager, werden die Einstellungen direkt von Ihrem Router übernommen und Ihre Verbindung wird automatisch hergestellt, wenn Sie sich bei Ubuntu anmelden. Sie können überprüfen, ob die Einstellungen in Ihrem Router korrekt sind, wenn Sie über die Weboberfläche darauf zugreifen können, und ihn ggf. neu starten. Wenn es sich um ein allgemeines Problem mit DNS handelt, können Sie versuchen, Google DNS anstelle Ihres ISP DNS zu verwenden. Weitere Informationen hierzu finden Sie hier .


sudo service network-manager restarthabe den Trick für mich mit Debian gemacht
Pierre de LESPINAY

61

Beachten Sie, dass Ubuntu ab 17.04 systemd-resolve verwendet, sodass diese Antwort nicht mehr auf neuere Ubuntu-Versionen zutrifft. Siehe " DNS-Cache in Ubuntu 17.04 und höher leeren (18.04) "

Standardmäßig wird DNS in Ubuntu <17.04 nicht zwischengespeichert (möglicherweise jedoch im Netzwerk oder in der Anwendung).

Führen Sie den Befehl running aus, um auf die eine oder andere Weise zu bestätigen, ob der dnsmasqCache aktiv ist ps ax | grep dnsmasq. Hier ist eine Aufschlüsselung meiner Standard-13.10-Maschine:

/ usr / sbin / dnsmasq \
  --no-resolv \
  --Halte im Vordergrund \
  --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.dist standardmäßig leer. Es kommen also keine Overrides rein und nur zu überprüfen --cache-size=0bedeutet, was wir denken, dass es bedeutet (anstelle eines unbegrenzten Caches), man dnsmasqzeigt:

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

Während also dnsmasq kann DNS - Cache, wird die Box nicht das Caching aus. Sie können Ihr Gerät und verschiedene Konfigurationsverzeichnisse überprüfen, um sicherzustellen, dass Sie sich auf derselben Seite befinden.

Wenn Cache-Probleme auftreten, geschieht dies wahrscheinlich an einer der folgenden Stellen:

  • Upstream von Ihrem Computer. Einige Router zwischenspeichern. In vielen Unternehmensnetzwerken wird DNS zwischengespeichert. Viele ISP-DNS-Server verwenden eigene Caches. Die einzige Möglichkeit, einen Netzwerkcache zu schützen, besteht darin, einen Cache zu verwenden, den Sie manuell aktualisieren können. Deshalb mag ich OpenDNS.
  • In der Client-Anwendung (insbesondere in Browsern). Anwendungen können alle Arten von Caching durchführen, auf die Ubuntu keinen Einfluss hat. Wie Firefox DNS zwischenspeichert . So leeren Sie den DNS-Cache von Chrome . Andere Browser (und Anwendungen) verfügen möglicherweise über eigene Mechanismen.
  • Ich schabe hier am Lauf herum, aber vielleicht haben Sie in Ubuntu einen nicht standardmäßigen DNS-Server installiert, anstatt das Caching einzuschalten dnsmasq. Es gibt viele: nscd, DJBDNS dnscache(aka tinydns) pdns, pdnsd, Bind9 (und seine Varianten), und mehr kann ich nicht einmal erinnern. Diese werden wahrscheinlich in /etc/resolv.conf(mit config in / etc / resolvconf / `, um diese Datei automatisch zu erzeugen) angezeigt. Das Folgende zeigt eine lokal abgefangene DNS-Abfrage:

    $ 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
    

    Wenn Sie 8.8.8.8 nicht treffen (oder was auch immer Sie von Ihrem DNS-Server erwarten), überprüfen Sie stattdessen, was Sie treffen. In meinem Fall sehe ich, dass dies nur dnsmasqeingerichtet ist, um DNS-Abfragen für LXC zurückzuspiegeln, aber in Ihrem Fall kann es sein, dass es schlechte Cachey-Dinge tut.

    Wenn Sie die aufgelisteten Caches gelöscht haben, ist der Löschvorgang unterschiedlich:

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

In einem leicht verwandten Hinweis sehen Sie dies, um das Caching zu aktivierendnsmasq .


1
Meine Ausgabe von ps aux | grep ist die gleiche wie Ihre, aber auf meinem Computer werden DNSs definitiv zwischengespeichert. Wenn es nicht dnsmasq ist, ist es etwas anderes. Beweis: Ich habe eine Subdomain auf meinem Server erstellt, konnte sie aber nicht pingen, Host nicht erreichbar. Ich habe auf downforeveryoneorjustme.com nachgesehen und es war aktiv. Weder mein Router noch mein ISP, da ich den DNS 8.8.8.8 von Google verwende. Dann habe ich den Computer (und NICHT den Router) neu gestartet und konnte die Domain erreichen. Ich hatte es ein Dutzend Mal versucht, bevor ich ohne Glück einen Neustart durchführte. Versuchen Sie es zuerst, nachdem der Neustart den Host erreicht hat.
Matteo

Und das war übrigens nicht das erste Mal, dass ich das Gleiche erlebte. Vor Monaten passierte dasselbe und die einzige Möglichkeit, die Domain zu erreichen, bestand darin, den Computer neu zu starten, aber dann hatte ich eine ältere Ubuntu-Version.
Matteo

@matteo Der Browser?
Oli

nein, wie gesagt habe ich mit ping getestet, nicht (nur) den browser (s).
Matteo

@ Matteo Ich habe mehr hinzugefügt, aber mir gehen die Ideen aus. Es gibt einfach nicht so viele weitere Orte jemand könnte DNS - Cache :)
Oli

39

Für den 12.04 .:

Ubuntu 12.04 cacht DNS mit dnsmasq (siehe man dnsmasq). Verwenden Sie Folgendes, um den Cache zu leeren:

sudo kill -HUP $(pgrep dnsmasq)

Danke! Sie sind der erste, der etwas über das Standard-Caching von 12.04 erwähnt hat!
Tarka,

6
12.04 zwischenspeichert standardmäßig keine DNS - überprüfen Sie Ihr Syslog nach dem Neustart des Netzwerkmanagers. Es wird einen Eintrag geben, der anzeigt, dass dnsmasq mit deaktiviertem Cache beginnt.

1
Ich weiß nicht, ob der Cache standardmäßig aktiviert ist, aber diese Antwort hat bei mir funktioniert.
Jeyk

Warum nicht einfach sudo killall -HUP dnsmasq?
James Haigh

1
Verwenden Sie pkillanstelle von killundpgrep
Robert Siemer


11

Persönlich würde ich OpenDNS verwenden und die Cache-Prüffunktion verwenden , um eine Aktualisierung zu erzwingen, um sicherzustellen, dass die Änderungen funktionieren. Sie können jedoch nicht garantieren, dass sie für Ihre Benutzer innerhalb von 48 Stunden aktualisiert werden.

DNS ist eine langsame Bestie. Geduld wird dich gesund halten.


+1 Ich benutze OpenDNS und ein leerer Cache ist sehr nützlich.
Mark Davidson

Ich bin misstrauisch gegenüber OpenDNS. Zuerst war ich damit zufrieden, aber dann wurde ich misstrauisch. obwohl ich denke, wenn es eine Wahl zwischen ISP und OpenDNS ist, bin ich mit OpenDNS besser dran, oder?
Jono

2
Ich würde sagen, OpenDNS ist das kleinere Übel. Sie möchten Ihren Datenverkehr monetarisieren, jedoch nur bei schlechten Domain-Zugriffen.
Oli

@Oli Der Link ist ausgefallen. Wenn Sie es noch verwenden, können Sie die Links bitte aktualisieren?
Shayan

7

Wenn Sie nscd verwenden:

sudo /etc/init.d/nscd restart

Erwähnenswert ist, dass es möglicherweise nicht das Betriebssystem ist, das es zwischenspeichert. Jeder mag es, DNS zwischenzuspeichern ... Einige Tests:

Überprüfen Sie, ob es sich um die neue oder die alte IP handelt. In den meisten Browsern wird auch DNS zwischengespeichert. Wenn Sie also Chromium oder etwas anderes nicht neu gestartet haben, wird möglicherweise nicht die neueste Version angezeigt.

ping yourdomain.com

Wechseln Sie Ihren lokalen Nameserver in der /etc/resolv.conf zu einem anderen Provider, Google oder Level, Beispiele:

nameserver 8.8.8.8
nameserver 4.2.2.2

Und dann nochmal pingen.

Stellen Sie sicher, dass Ihr Router kein DNS in irgendeiner Form zwischenspeichert. (Variiert je nach Router / Firmware / usw.)

Endlich Geduld. Die Verbreitung von DNS im Internet kann einige Zeit in Anspruch nehmen.


2
Wenn Sie NetworkManager und DHCP verwenden, wird /etc/resolve.conf nach Ablauf der DHCP-Lease gelöscht. Sie müssen daher in NetworkManager eine statische IP-Adresse festlegen, damit dies über einen längeren Zeitraum funktioniert.
LassePoulsen

+1 Ich habe nicht bemerkt, dass Firefox DNS zwischenspeichert. Dies hat sehr geholfen.
Wavemode

+1 für die Umstellung lokaler Nameserver auf Google hat funktioniert
Bibek Sharma

5

Bei allen obigen Antworten wurde eines bei der Namensauflösung vergessen: Im Allgemeinen sind die DNS-Server, zu denen Sie die Namensauflösung anfordern, nicht die, auf denen die Datensätze selbst gespeichert sind (der autorisierende Server). Da jeder DNS-Eintrag einen Time To Live-Wert enthält, muss jeder DNS-Server in der Auflösungskette während der in diesem Wert angegebenen Anzahl von Sekunden einen Cachevorgang durchführen. Sie können also nicht nur in Ihrem Computer einen Cache speichern, sondern das Ergebnis der Namenssuche wird BESTIMMT auf einem Server zwischengespeichert, den Sie nicht steuern können.

Die einzige Lösung, die bei einer Änderung des Namensdatensatzes sofort benachrichtigt wird, ist die Verwendung des TTL-Werts 0 beim Erstellen / Aktualisieren des Eintrags auf dem autorisierenden Namensserver. Dies bedeutet jedoch, dass bei jeder Namensauflösung der Server betroffen ist, was normalerweise von den Registraren nicht zugelassen wird. Sie können beispielsweise eine Liste vordefinierter TTL-Werte bereitstellen, aus denen Sie auswählen können.

Ich verwalte verschiedene Domain-Namen und um sicherzugehen, dass die Änderungen auf den autorisierenden Nameservern gut angewendet werden, verwende ich ein Tool namens dnstracer, das die Suchergebnisse auf jedem Server aus dem DNS-Stammverzeichnis anzeigen kann.

Selbst wenn keine DNS-Caching-Lösung vorhanden ist, gibt es eine Verzögerung zwischen dem Zeitpunkt, an dem Sie die DNS-Einträge ändern, und dem Zeitpunkt, an dem die Änderung auf einem PC angezeigt wird. Diese Verzögerung hängt stark von der TTL der Datensätze und der Anzahl der DNS-Server zwischen Ihrem PC und dem maßgeblichen Nameserver ab.


Natürlich, aber wenn das das Problem wäre, würde ein Neustart des Computers es nicht beheben.
Matteo

2

Für Ubuntu 14.04 empfehle ich diesen Befehl:

sudo service dns-clean

Nicht auf dem Standardserver installiert. Funktioniert nur am 14.04 und darunter.
RJ

1

Ich habe den folgenden Befehl verwendet, um den DNS-Cache auf meiner 12.10 Ubuntu-Box zu leeren, und es hat fantastisch funktioniert.

sudo kill -HUP $(pgrep dnsmasq)

Ein weiteres hilfreiches Signal ist der SIGUSR1, der eine kleine Statistik an syslog ausgibt, oder wie aus folgender Anmerkung hervorgeht man dnsmasq:

Im --no-daemon-Modus oder bei aktivierter vollständiger Protokollierung (-q) wird ein vollständiger Speicherauszug des Cache-Inhalts erstellt.


Verwenden Sie pkillanstelle von killundpgrep
Robert Siemer

1

Unter Ubuntu 16.04 konnte ich den Cache nur löschen, wenn ich Folgendes tat:

sudo service dnsmasq restart

0

Ich habe auch Widersprüche gefunden, aber diese: https://superuser.com/a/521562 Woks für mich (Ubuntu 13.10 mit den neuesten Updates, keine speziellen Netzwerkpakete installiert).
Kurz gesagt, benutze dies einfach
sudo /etc/init.d/dns-clean


0

Ich empfehle openDNS speziell in entfernten Ubuntu-Servern, es lindert viele Schmerzen ...

Wie es geht? Gut...

cd /etc/dhcp
sudo nano dhclient.conf

Fügen Sie dies VOR der Zeile "Subnetzmaske anfordern ..." ein

supersede domain-name-servers 208.67.222.222,208.67.220.220;

Dadurch wird die Schnittstelle so schnell neu gestartet, dass Sie nicht einmal Ihre SSH-Verbindung verlieren sollten

sudo ifdown eth0 && sudo ifup eth0

Überprüfen Sie dies, um festzustellen, ob Ihr brandneues openDNS korrekt installiert ist

cat /etc/resolv.conf

Das ist definitiv keine Antwort auf die Frage.
Blafasel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.