Der DNS-Cache speichert aufgelöste Domain-Namen lokal, um wiederholte Anfragen an DNS-Server zu vermeiden. Nach einem Wechsel des DNS-Servers oder bei Netzwerkproblemen kann ein veralteter Cache jedoch zu Verbindungsfehlern führen. Mit dem Leeren des Caches erzwingst du eine neue DNS-Abfrage.
DNS-Caching auf der Kommandozeile
Das System selbst cached DNS-Einträge nicht auf Systemebene. Das Caching übernimmt ein separater Dienst. Welcher Dienst auf deinem System läuft, hängt von der Distribution ab:
- systemd-resolved – Ubuntu, Fedora, Arch und die meisten modernen Distributionen
- dnsmasq – Häufig bei Netzwerk-Managern oder als eigenständiger DNS-Server
- nscd – RHEL, CentOS und andere Red-Hat-basierte Systeme
Cache mit systemd-resolved leeren
Die meisten aktuellen Distributionen verwenden systemd-resolved für DNS-Caching. Prüfe zuerst, ob der Dienst aktiv ist:
systemctl is-active systemd-resolved
Die Ausgabe active bestätigt, dass der Dienst läuft. Leere den Cache mit:
sudo resolvectl flush-caches
Bei älteren Versionen von systemd (vor 239) verwendest du stattdessen:
sudo systemd-resolve --flush-caches
Um zu überprüfen, ob der Cache tatsächlich geleert wurde, zeigst du die Cache-Statistiken an:
resolvectl statistics
Die Werte für Current Cache Size sollten nach dem Flush bei 0 liegen.
Cache mit dnsmasq leeren
Dnsmasq ist ein leichtgewichtiger DNS- und DHCP-Server, der oft in Verbindung mit NetworkManager zum Einsatz kommt. Um den Cache zu leeren, startest du den Dienst neu:
sudo systemctl restart dnsmasq
Alternativ auf Systemen ohne systemd:
sudo service dnsmasq restart
Ein Neustart von dnsmasq unterbricht kurzzeitig die DNS-Auflösung. Bei produktiven Servern solltest du das berücksichtigen.
Cache mit nscd leeren
Der Name Service Cache Daemon (nscd) cached neben DNS auch andere Namensauflösungen wie Benutzer und Gruppen. Auf Red-Hat-basierten Systemen ist er oft der Standard.
Leere den DNS-Cache gezielt:
sudo nscd -i hosts
Das Flag -i hosts invalidiert nur den Hosts-Cache, ohne andere Caches zu beeinflussen. Alternativ startest du den gesamten Dienst neu:
sudo systemctl restart nscd
Welcher Caching-Dienst läuft?
Falls du nicht weißt, welcher Dienst auf deinem System aktiv ist, prüfst du alle drei:
systemctl is-active systemd-resolved dnsmasq nscd
Die Ausgabe zeigt für jeden Dienst active oder inactive.
DNS-Auflösung testen
Nach dem Leeren des Caches kannst du mit dig prüfen, ob die DNS-Auflösung funktioniert:
dig example.com
Die Antwort sollte die aktuelle IP-Adresse der Domain enthalten. Achte auf die Query time – beim ersten Aufruf nach dem Flush ist sie höher, da die Anfrage tatsächlich an den DNS-Server geht.
Zusammenfassung
| Caching-Dienst | Befehl zum Leeren |
|---|---|
| systemd-resolved | sudo resolvectl flush-caches |
| dnsmasq | sudo systemctl restart dnsmasq |
| nscd | sudo nscd -i hosts |
Der richtige Befehl hängt davon ab, welcher DNS-Caching-Dienst auf deinem System läuft. Mit systemctl is-active findest du schnell heraus, welcher Dienst aktiv ist.