DNS-Cache auf dem Mac leeren
Um den DNS-Cache auf dem Mac zu leeren, öffnen Sie das Terminal unter Programme › Dienstprogramme und führen aus:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Geben Sie Ihr Anmeldepasswort für den Mac ein, wenn danach gefragt wird. Klappt es, wird nichts ausgegeben. Auch ein Neustart des Mac leert den Cache: Apples Artikel zum DNS-Cache sagt, dass Sie den Mac neu starten können, um die zwischengespeicherten Informationen zu aktualisieren.
Dieser Apple-Artikel ist archiviert und wird nicht mehr aktualisiert. Sein neuester Eintrag, für OS X Yosemite 10.10.4 und neuer, lautet sudo killall -HUP mDNSResponder; dscacheutil -flushcache ist der Befehl, den er für Snow Leopard nennt. Apple hat keine neuere Fassung veröffentlicht, deshalb führt die Zeile oben beides aus: Der Teil mit killall ist der, den Apple für aktuelle Versionen nennt, und dscacheutil -flushcache leert laut seiner Handbuchseite (man dscacheutil) den Cache des Verzeichnisdienstes, wobei die Seite auch sagt, ihn nur in Extremfällen zu verwenden. Eine veraltete DNS-Antwort ist ein solcher Fall. Mole Mac leert den DNS-Cache nicht; das ist eine Aufgabe für das Terminal.
Was der DNS-Cache ist
Wenn eine App eine Verbindung zu example.com aufbaut, muss macOS diesen Namen zuerst in eine IP-Adresse übersetzen. Auf dem Mac läuft diese Abfrage über mDNSResponder. Seine Handbuchseite (man mDNSResponder) beschreibt ihn als den Daemon, der DNS-Abfragen im Auftrag anderer Prozesse ausführt und einen Cache der Antworten führt.
Der Cache spart bei jeder wiederholten Abfrage einen Umlauf. Jede Antwort wird so lange behalten, wie die DNS-Einträge der Domain es erlauben, und dann neu geholt. Meist funktioniert das, ohne dass es jemand bemerkt. Schief geht es, wenn die zwischengespeicherte Antwort schon vor ihrem Ablauf veraltet ist: Eine Website ist auf einen neuen Server umgezogen, Sie haben die DNS-Server gewechselt, oder eine Abfrage ist einmal fehlgeschlagen, und dieses Fehlergebnis wird weiter verwendet.
-HUP in killall -HUP mDNSResponder legt fest, welches Signal killall sendet; ohne die Option sendet killall TERM (man killall). Apple nennt die HUP-Form als Weg, den DNS-Cache zurückzusetzen, lassen Sie die Option also nicht weg und ersetzen Sie sie nicht durch -9.
Wann das Leeren des DNS-Cache hilft
| Situation | Warum das Leeren hilft |
|---|---|
| Eine Website oder ein Server ist umgezogen, und Ihr Mac erreicht noch die alte Adresse | Die zwischengespeicherte Antwort ist noch nicht abgelaufen |
| Sie haben die DNS-Server in den Netzwerkeinstellungen geändert | Alte Antworten der vorherigen Server liegen noch im Cache |
Sie haben /etc/hosts bearbeitet, und die Änderung wird ignoriert |
Laut Handbuchseite von hosts liest mDNSResponder die Datei, und er hält eventuell noch die frühere Antwort |
| Eine Website ließ sich vor einer Minute nicht auflösen und scheitert weiter, obwohl andere Geräte sie erreichen | Eine fehlgeschlagene Abfrage ist eventuell zwischengespeichert |
Wann es nicht hilft
Das Leeren betrifft nur den Resolver-Cache des Mac selbst. Mehrere verbreitete Konstellationen machen es wirkungslos:
- Proxy. Läuft der Verkehr über einen HTTP- oder SOCKS-Proxy, löst oft der Proxy die Namen selbst auf. Prüfen Sie das mit
scutil --proxy, das die aktuelle Proxy-Konfiguration des Systems ausgibt. - VPN. Ein VPN kann eigene DNS-Server einrichten oder nur bestimmte Domains dorthin leiten.
scutil --dnszeigt jeden verwendeten Resolver; ergänzende Resolver, die eine Domain nennen, werden nur für diese Domain genutzt. Scheitert eine Firmen-Domain, ist das DNS des VPN die richtige Stelle zum Suchen. - Der eigene Cache des Browsers. Browser können eigene kurzlebige DNS-Ergebnisse behalten und offene Verbindungen wiederverwenden. Beenden Sie den Browser nach dem Leeren vollständig und öffnen Sie ihn neu, statt nur den Tab neu zu laden.
- Caches weiter oben. Auch Ihr Router und Ihr DNS-Anbieter speichern Antworten zwischen. Das Leeren auf dem Mac kann sie nicht dazu bringen, einen neuen Eintrag früher zu holen.
- Die Website ist wirklich nicht erreichbar, oder sie ist in Ihrem Netzwerk gesperrt. Scheitern auch andere Geräte in einem anderen Netzwerk, liegt es nicht am DNS Ihres Mac.
Laden Seiten langsam, statt zu scheitern, ist der DNS-Cache selten der Engpass. Ruckelndes WLAN auf dem Mac und Welche App nutzt mein Netzwerk behandeln wahrscheinlichere Ursachen.
Prüfen, was Ihr Mac tatsächlich auflöst
Fragen Sie den System-Resolver, um die Antwort zu sehen, die Ihre Apps bekommen:
dscacheutil -q host -a name example.com
Laut Handbuchseite von dscacheutil führt -q eine Abfrage über die Standardaufrufe aus und liefert zwischengespeicherte Ergebnisse oder holt aktuelle Daten.
Fragen Sie dann einen DNS-Server direkt:
dig example.com
dig geht nicht über den Resolver von macOS. Laut seiner Handbuchseite verwendet es die Server aus /etc/resolv.conf, und diese Datei trägt unter macOS einen Hinweis, dass sie für die DNS-Auflösung der meisten Prozesse im System nicht herangezogen wird. Liefert dig die neue Adresse und dscacheutil die alte, liegt der Unterschied im Cache des Mac oder in seiner Resolver-Konfiguration, und ein Leeren sollte helfen. Liefern beide die alte Adresse, hat sich der Eintrag weiter oben noch nicht geändert.
So sehen Sie, welche DNS-Server der Mac verwendet:
scutil --dns
Von Hand eingetragene Server finden Sie unter Systemeinstellungen › Netzwerk: Wählen Sie einen Netzwerkdienst aus, klicken Sie auf Details und dann auf DNS (Apple).
/etc/hosts prüfen, bevor Sie den Cache verdächtigen
/etc/hosts übersteuert DNS für jeden Namen, den die Datei enthält. Entwicklerwerkzeuge, Werbeblocker und alte Anleitungen tragen dort manchmal Zeilen ein und lassen sie stehen. So lesen Sie die Datei:
cat /etc/hosts
Eine normale Datei hat nur ein paar Zeilen für localhost und Kommentare, die mit # beginnen. Sehen Sie dort die Domain, die Probleme macht, ist diese Zeile der Grund für ihre Auflösung. Bearbeiten Sie nur diese Zeile, mit einem Editor, den Sie über sudo starten, behalten Sie eine Kopie des Originals und leeren Sie danach den Cache. Löschen Sie nicht die Einträge für localhost.
Das Ergebnis prüfen
- Führen Sie den Befehl zum Leeren aus.
- Führen Sie
dscacheutil -q host -a name example.comerneut mit der problematischen Domain aus und prüfen Sie die Adresse. - Beenden Sie den Browser oder die App mit dem Problem und öffnen Sie sie neu.
- Scheitert es weiter, vergleichen Sie mit
dig,scutil --dnsundscutil --proxy, um zu sehen, welche Ebene antwortet.
Was Sie lassen sollten
- Leeren Sie den DNS-Cache nicht nach Zeitplan oder als Tuning. Ein gefüllter Cache macht Abfragen schneller, ein leerer macht die nächsten paar langsamer.
- Löschen Sie
/etc/hostsnicht und ändern Sie nicht ihre Zugriffsrechte. - Wechseln Sie auf einem Firmen- oder Schul-Mac mit VPN oder Verwaltungsprofil nicht die DNS-Server, ohne mit der zuständigen Verwaltung zu sprechen; interne Namen lassen sich sonst eventuell nicht mehr auflösen.
- Ändern Sie keine Proxy- oder VPN-Einstellungen, um „DNS zu testen“. Finden Sie zuerst heraus, welche Ebene antwortet.
Häufige Fragen
Wie leere ich den DNS-Cache auf dem Mac?
Führen Sie sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder im Terminal aus und geben Sie Ihr Passwort ein. Auch ein Neustart des Mac leert ihn.
Wie lautet der Befehl zum Leeren des DNS-Cache unter aktuellem macOS?
Apples archivierter Artikel nennt sudo killall -HUP mDNSResponder für OS X 10.10.4 und neuer, und Apple hat keinen neueren veröffentlicht. Zusätzlich vorher sudo dscacheutil -flushcache auszuführen ist verbreitet; es leert nur zwischengespeicherte Daten.
Leert das Leeren des DNS-Cache auf dem Mac auch den Browser-Cache?
Nein. Es leert nur den Resolver-Cache von macOS. Beenden Sie den Browser und öffnen Sie ihn neu, damit er nicht seine eigenen DNS-Ergebnisse oder offenen Verbindungen wiederverwendet.
Warum geht eine Website nach dem Leeren noch an die alte Adresse?
Prüfen Sie /etc/hosts, einen Proxy oder ein VPN und ob dig die neue Adresse zeigt. Hat sich der DNS-Eintrag weiter oben noch nicht geändert, hilft kein lokales Leeren.
Kann Mole den DNS-Cache leeren?
Nein. Mole Mac enthält keine Funktion zum Leeren des DNS-Cache; führen Sie den Terminal-Befehl oben aus oder starten Sie den Mac neu.