Wie kann ich den DNS-Cache in Linux leeren?
Dieses Tutorial behandelt die folgenden Themen:
Vielleicht ist Ihnen aufgefallen, dass Websites, die Sie häufig besuchen, viel schneller laden als andere. Dies geschieht aufgrund des Browser-Cache und des DNS-Cache, die Ihr Linux-Betriebssystem sammelt. Es ermöglicht Ihrem Linux-Rechner, die DNS-Informationen lokal abzurufen, anstatt auf den öffentlichen DNS-Resolver zu warten.
Oftmals kann dieser DNS-Cache jedoch ungültig oder beschädigt werden. Dies kann zu Problemen beim Laden Ihrer Website im Browser führen. Sie müssen Ihr Linux anweisen, den DNS-Cache in solchen Fällen zu leeren.
Dieser Artikel konzentriert sich darauf, was ein DNS-Cache ist, wie Sie den DNS-Resolver bestimmen, den Ihr Ubuntu verwendet, und wie Sie das DNS in Linux Ubuntu leeren.
Was ist ein DNS-Cache?
Das Domain Name System (DNS) ist ein globales Namenssystem, das entwickelt wurde, um Domain-Namen ihren entsprechenden Server-IP-Adressen zuzuordnen. Die Benutzerseite des DNS wird als DNS-Resolver (Stub Resolver) bezeichnet, der den DNS-Cache abfragt und die Belastung der DNS-Server reduziert.
Der DNS-Cache ist die temporäre Datenbank von Domain-zu-IP-Übersetzungen, die Ihr Betriebssystem (OS) sammelt.
Die im DNS-Cache gespeicherten Informationen bestehen aus Resource Records (RR), die die IP-Adressen der Domainnamen enthalten, die Sie häufig besuchen.
Diese Datensätze beinhalten Anforderungen wie Name, Datensatztyp, Time to Live (TTL), Klasse, Ressourcendaten und Ressourcendatenlänge. Time to live (TTL) bezieht sich auf die Zeit (in Sekunden), die ein Eintrag als gültig erachtet wird, bevor ein neuer DNS-Lookup initiiert werden muss. Alle diese Daten in einer Datensatzdatei sind im ASCII-Code, und es gibt eine separate Zeile für jeden Domain-Namen darin. So sieht ein gängiges Format eines Ressourcendatensatzes aus:
<name> <ttl> <class> <type> <rdlength> <radata>
Wenn Sie versuchen, eine Website zu laden, sendet Ihr Browser eine Anfrage an Ihr Betriebssystem, dass es die IP für diesen Domain-Namen benötigt. Das Betriebssystem sendet diese Anfrage an den lokalen DNS-Resolver, um herauszufinden, ob es einen solchen Resource Record im DNS-Cache gibt.
Wenn kein Eintrag im lokalen Cache vorhanden ist, initiiert das Betriebssystem eine DNS-Suche zum öffentlichen DNS-Server und wartet darauf, die Server-IP-Adresse der Domain zu erhalten. Sobald diese Daten geliefert wurden, speichert das Betriebssystem sie im DNS-Cache für die weitere Verwendung.
Falls der DNS-Cache einen Eintrag für die betreffende Domain hat, wird der Browser den Inhalt der Website schneller bereitstellen. Daher rationalisiert der DNS-Cache den DNS-Lookup-Prozess und fungiert als Beschleuniger, der Ihr Surferlebnis insgesamt verbessert.
Wie bereits erwähnt, ist der DNS-Cache ein temporärer Stapel von DNS-Einträgen, und als solcher kann er ablaufen oder beschädigt werden. In diesem Fall können Sie aufgrund verschiedener DNS-Fehler möglicherweise nicht auf Ihre Website oder eine andere Ihrer bevorzugten Websites zugreifen.
Diese Fehler können mit DNS-Propagation oder DNS-Spoofing-Angriffen zusammenhängen. Sie können genauso gut auf Ihre Privatsphäre bedacht sein, und das häufige Zurücksetzen der DNS-Cache-Einträge könnte in dieser Angelegenheit helfen.
Um ein Problem dieser Art zu beheben, sollten Sie einen DNS-Flush auf Ihrem Linux-Rechner erzwingen. Dadurch werden die veralteten Informationen gelöscht, und Ihr Betriebssystem wird neue Datensätze generieren, um die Ergebnisse weiterer DNS-Abfragen zwischenzuspeichern.
Finden Sie Ihren lokalen DNS-Resolver
Verschiedene Versionen der am häufigsten verwendeten Linux-Distribution, Ubuntu, können verschiedene Dienste als DNS-Resolver verwenden. Die meisten Linux-Systeme verwenden systemd-resolved oder dnsmasq als ihre DNS-Resolver-Anwendung.
Daher ist das erste, was Sie tun müssen, bevor Sie mit einem Linux-DNS-Flush beginnen, zu überprüfen, welchen DNS-Resolver Ihr System verwendet.
Um dies zu tun, müssen Sie das Terminal laden, und der einfachste Weg, dies zu tun, ist die Tastenkombination Ctrl + Alt + T.
Geben Sie dann den folgenden Befehl ein:
sudo lsof -i :53 -S
Der Befehl gibt alle Dienste aus, die auf Port 53 lauschen – dem Server-Port, der für DNS reserviert ist. Auf diese Weise können Sie sehen, welchen DNS-Resolver Ihr Linux verwendet, um seinen DNS-Cache zu leeren.
Wie aus dem obigen Screenshot hervorgeht, ist der Dienst, der auf dem DNS-Port 53 lauscht, auf der neuesten Ubuntu-Version (22.04) systemd-resolved. Dies ist die Konfiguration für alle Ubuntu-Versionen seit der Veröffentlichung 18.04.
Frühere Versionen können mit dem DNS-Resolver dnsmasq arbeiten, und wenn dies bei Ihnen der Fall ist, sieht die Ausgabe des Befehls wie im folgenden Screenshot aus:
Nachdem Sie herausgefunden haben, welchen DNS-Resolver Ihr System verwendet, können Sie mit dem richtigen Flush DNS-Befehl für Ihr Linux fortfahren.
Wie kann ich den DNS-Cache unter Linux leeren?
In den folgenden Abschnitten haben wir die Befehle aufgelistet, die Sie verwenden können, um den DNS-Cache auf verschiedenen Linux-Konfigurationen zu leeren.
Linux-DNS mit systemd-resolved leeren
Wenn Ihr Linux-System systemd-resolved service ist, können Sie einen der folgenden Befehle im Terminal-Fenster verwenden:
$ sudo resolvectl flush-caches
$ sudo systemd-resolve --flush-caches
Beachten Sie, dass keiner der obigen Befehle eine Ausgabe zur Bestätigung liefert. Sie können jedoch die folgenden entsprechenden Befehle verwenden, um den Wert für die aktuelle Cache-Größe zu überprüfen.
$ sudo systemd-resolve --statistics
$ sudo resolvectl statistics
So sieht die Ausgabe mit dem Wert Current Cache Size aus:
DNS-Cache mit Signalen leeren
Eine alternative Möglichkeit, den DNS-Cache in einem System mit systemd-resolved zu leeren, besteht darin, ein „USR2“-Signal an den DNS-Resolver zu senden.
$ sudo killall -USR2 systemd-resolved
Danach verwenden Sie das Signal „USR1“, um den Dienst anzuweisen, seinen aktuellen Zustand in das systemd-journal zu schreiben. Sie können dies tun, indem Sie die folgenden beiden Befehle nacheinander ausführen, und die Ausgabe zeigt Ihnen das Protokoll, das den Cache-Flush bestätigt.
$ sudo killall -USR1 systemd-resolved
$ sudo journalctl -r -u systemd-resolved
Cache mit dnsmasq leeren
Vorausgesetzt, dass Ihr Computer „dnsmasq“ verwendet, um DNS aufzulösen, können Sie den Befehl wie unten gezeigt ausführen.
$ sudo killall -HUP dnsmasq
Da die Ausführung dieses Befehls keine Bestätigung ausgibt, können Sie wieder eine „USR1“ verwenden, um den Vorgang zu signalisieren. Dadurch werden die Statistiken in der Datei „syslog“ protokolliert, und die Verwendung eines „tail“-Befehls zeigt Ihnen, dass die Cache-Größe 0 ist.
$ sudo killall -USR1 dnsmasq
$ tail -f n1000 /var/log/syslog |grep "cache size"
DNSmasq, das einen Dienst ausführt
In bestimmten Fällen kann Dnsmasq als Dienst auf Ihrem Server ausgeführt werden. Um zu überprüfen, ob dnsmasq aktiv ist, können Sie diesen Befehl ausführen:
$ sudo systemctl is-active dnsmasq
Bei Systemen, die auf SysVinit basieren, können Sie sehen, ob dnsmasq eingeschaltet ist, und mit dem folgenden Befehl fortfahren:
$ sudo service dnsmasq status
Abhängig von der Art der Systemkonfiguration können Sie einen der beiden folgenden Befehle verwenden, um den Dienst neu zu starten.
$ sudo systemctl restart dnsmasq
$ sudo service dnsmasq restart
Ein Neustart des Dnsmasq-Dienstes wird den gesammelten Cache in Ihrem System zurücksetzen.
Leeren Sie den DNS-Cache mit Nscd in RedHat
Falls Sie die RedHat Linux-Distribution verwenden, wird sie höchstwahrscheinlich den Name Server Cache Daemon (Nscd) ausführen. Sie können den DNS-Cache dieses Dienstes leeren, indem Sie einen der hier beschriebenen Befehle ausführen.
$ sudo systemctl restart nscd.service
$ sudo service nscd restart
DNS-Cache in Google Chrome leeren
Neben dem DNS-Cache des Betriebssystems stapelt der Google Chrome-Browser auch DNS-Cache. Um sicherzustellen, dass der DNS-Cache von Chrome Sie nicht am Zugriff auf Ihre Website behindert, sollten Sie ihn leeren.
Sie müssen den Chrome-Browser öffnen und dies in die Adressleiste einfügen:
chrome://net-internals/#dns
Dadurch werden Sie auf die interne Netzwerkeinstellungsseite von Chrome weitergeleitet, und Sie sollten auf die Schaltfläche “Host-Cache löschen” klicken, um den Cache zu leeren.
Zusammenfassend lässt sich sagen, dass Sie Ihren Linux-DNS-Cache leeren sollten, wenn Sie DNS-Fehler haben oder mit der DNS-Verbreitung zu tun haben. Darüber hinaus kann das Löschen dieses Caches dazu beitragen, DNS-Spoofing-Probleme zu beheben oder ein sicheres Netzwerkerlebnis für sich selbst aufzubauen. Das Befolgen der in diesem Artikel beschriebenen Schritte wird Ihnen helfen, dies unabhängig zu tun und solche Probleme zu lösen.