So beheben Sie eine langsame DNS-Abfrage
Eine langsame DNS-Abfrage ist Zeit, die vergeht, bevor die Verbindung zu einer Website überhaupt beginnt, und sie lässt sich fast immer beheben, indem Sie ändern, welchen Resolver Sie fragen. Die Seite hat noch nicht begonnen zu laden. Ihr Gerät wartet noch darauf zu erfahren, wohin es die Anfrage senden soll.
Was eine langsame Abfrage misst
Das Laden einer Seite beginnt mit einer Namensabfrage, dann einer TCP-Verbindung, dann einem TLS-Handshake, dann der eigenen Denkzeit des Servers. Nur der erste dieser Schritte ist DNS, und es ist der einzige, den Sie oft verbessern können, ohne die Website überhaupt anzufassen.
Zwei Zahlen werden hier häufig verwechselt. Eine zwischengespeicherte Abfrage kostet fast nichts, weil die Antwort schon auf Ihrem Rechner liegt oder nur einen Hop entfernt ist. Eine kalte Abfrage kann eine Anfrage an die Root beinhalten, eine weitere an die Top-Level-Domain und eine weitere an die eigenen Nameserver der Domain, jede ein Umlauf über welche Distanz auch immer Sie von diesen Servern trennt. Unter 20 ms warm und unter 100 ms kalt sind unauffällig. Alles, was sich einer Sekunde nähert, bedeutet, dass einer der Hops weit entfernt, überlastet oder in ein Timeout gelaufen ist und erneut versucht wird.
Moderne Seiten verschlimmern das, weil sie viele Hostnamen haben. Schriftarten, Analytics, Bilder und Zahlungs-Widgets brauchen jeweils ihre eigene Abfrage, und ein Browser, der zehn Hostnamen zu je 300 ms auflöst, hat drei Sekunden für DNS aufgewendet, bevor überhaupt etwas Nützliches gerendert wird.
Bestätigen, dass DNS der langsame Teil ist
Messen Sie, bevor Sie irgendetwas ändern. Der sauberste einzelne Befehl teilt eine Anfrage in ihre Phasen auf:
curl -o /dev/null -s -w "dns:%{time_namelookup} connect:%{time_connect} tls:%{time_appconnect} ttfb:%{time_starttransfer} total:%{time_total}\n" https://example.com
Ist time_namelookup nur ein kleiner Bruchteil des Gesamtwerts, ist DNS nicht Ihr Problem, und Sie sollten stattdessen über die Server-Antwortzeit lesen. Ist es ein Drittel oder mehr, machen Sie weiter. Für die Abfrage allein gibt dig Ihnen die verstrichene Zeit aus:
dig example.com | grep "Query time"
dig @1.1.1.1 example.com | grep "Query time"
dig @8.8.8.8 example.com | grep "Query time"
Unter Windows liefert PowerShell dieselbe Messung:
Measure-Command { Resolve-DnsName www.example.com }
Measure-Command { Resolve-DnsName www.example.com -Server 1.1.1.1 }
Vergleichen Sie Ihre Vorgabe mit den öffentlichen Resolvern. Ein großer Abstand zeigt, dass die Lösung bei Ihnen liegt. Ähnliche Zeiten überall deuten auf die eigenen Nameserver der Domain.
Ein Ergebnis schließt diese Anleitung vollständig aus. Antwortet ein Resolver sofort mit NXDOMAIN, ist der Name nicht veröffentlicht, und Sie haben ein anderes Problem vor sich, beschrieben unter DNS_PROBE_FINISHED_NXDOMAIN.
Warum es passiert
- Ein entfernter Resolver. Öffentliche Dienste nutzen Anycast, sodass dieselbe Adresse von einem nahegelegenen Standort antwortet. Ein Resolver des Internetanbieters oder ein einzelner Büroserver tut das nicht, und jede Abfrage zahlt den vollen Umlauf.
- Der erste Server in der Liste ist tot. Der Client wartet sein Timeout ab und fragt dann den zweiten. Bei glibc-Systemen liegt die Vorgabe bei 5 Sekunden bis zum ersten erneuten Versuch, genau die Pause, die Menschen als "es hängt und lädt dann" beschreiben.
- Sehr niedrige TTLs. Eine TTL von 30 oder 60 Sekunden bedeutet, dass fast jeder Besucher für eine frische Abfrage bezahlt, weil die zwischengespeicherte Kopie bereits abgelaufen ist.
- Lange CNAME-Ketten. Jedes Glied ist eine weitere Abfrage. Ketten aus drei oder vier sind hinter CDNs und Marketing-Tools üblich.
- Langsame autoritative Nameserver. Ein DNS-Anbieter mit wenigen Standorten antwortet für einen Teil der Welt schnell und für den Rest langsam.
- DNSSEC-Validierung. Das Validieren einer Kette fügt Abfragen hinzu. Normalerweise ist das günstig, aber eine teilweise defekte Kette verursacht erneute Versuche, die wie Langsamkeit aussehen.
- Suchdomains. Ein mit Suffixen konfigurierter Resolver probiert
example.com.corp.localvorexample.comund verbraucht für jedes Suffix zuerst eine fehlgeschlagene Abfrage. - AAAA-Abfragen ohne IPv6. Das System fragt beide Eintragstypen ab und wartet auf die Antwort, die es nicht nutzen kann.
- Ein VPN oder Filter-Proxy, der jede Abfrage durch einen Tunnel zu einem Resolver auf einem anderen Kontinent schickt.
- Ein Router als Forwarder mit einem winzigen Cache und einer zu schwachen CPU.
So beheben Sie es
Auf Ihrem Gerät
- Leeren Sie die Caches, damit Ihre Messungen ehrlich sind:
ipconfig /flushdnsunter Windows,sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponderunter macOS,sudo resolvectl flush-cachesunter Linux. - Schauen Sie, welche Server konfiguriert sind und in welcher Reihenfolge:
Get-DnsClientServerAddress,scutil --dnsoderresolvectl status. Entfernen Sie jeden Eintrag, der nicht mehr antwortet, denn ein toter erster Eintrag kostet Sie bei jeder kalten Abfrage das Timeout. - Verkürzen Sie unter Linux die Wartezeit während Ihrer Untersuchung, indem Sie
options timeout:2 attempts:2zu/etc/resolv.confhinzufügen, und entfernen Sie ungenutztesearch-Suffixe. - Trennen Sie das VPN und messen Sie erneut. Halbiert sich die Zahl, ist der Tunnel die Ursache, und seine Resolver-Einstellung ist es, was Sie ändern müssen.
In Ihrem Netzwerk
- Setzen Sie den Resolver per DHCP am Router statt Gerät für Gerät, damit jeder Client dasselbe schnelle Paar erhält.
- Geben Sie dem eigenen Forwarder des Routers einen öffentlichen Resolver vorgeschaltet statt der Vorgabe des Internetanbieters, oder umgehen Sie den Forwarder ganz, indem Sie Clients die öffentlichen Adressen direkt geben.
- Prüfen Sie bei einem Firmennetzwerk mit eigenem DNS-Server, dass er weiterleitet statt von einem einzelnen Standort aus vollständig rekursiv aufzulösen, und dass sein Cache groß genug ist, um den Arbeitstag zu überstehen.
Auf Ihrer eigenen Domain
- Erhöhen Sie die TTLs bei Einträgen, die sich selten ändern. Fünf Minuten sind eine vernünftige Untergrenze für einen Eintrag, den Sie eventuell schnell verschieben müssen; eine Stunde oder ein Tag passt für alles Stabile.
- Verflachen Sie CNAME-Ketten, wo Sie können. Zeigen Sie den Eintrag auf das endgültige Ziel statt auf eine Kette von Aliassen:
dig www.example.com CNAME +shortzeigt, wie tief Ihre geht. - Nutzen Sie einen DNS-Anbieter mit Anycast-Nameservern, und behalten Sie mindestens zwei Nameserver in getrennten Netzwerken.
- Prüfen Sie, dass DNSSEC validiert. Vergleichen Sie eine normale Abfrage mit einer, die die Validierung überspringt:
dig example.com @1.1.1.1gegendig +cd example.com @1.1.1.1. Ein großer Unterschied, oder ein SERVFAIL nur bei der ersten, bedeutet, dass die Kette defekt ist.
Prüfen Sie es von außen
Ihre eigenen Messungen beschreiben ein Netzwerk in einem Moment, was die am wenigsten aussagekräftige Stichprobe ist, die Sie nehmen können. Ein Resolver, der 8 ms von Ihnen entfernt ist, kann 400 ms von einem Kunden in einer anderen Region entfernt sein, und dieser Kunde ist es, der sich beschwert.
Beginnen Sie damit, die autoritativen Server direkt zu messen, was jeden Cache zwischen Ihnen und der Quelle entfernt:
dig NS example.com +short
dig @ns1.example-dns.net example.com | grep "Query time"
dig example.com +trace
Die Ausgabe von +trace geht die Delegation Schritt für Schritt durch, sodass ein stockender Hop sichtbar wird, statt weggemittelt zu werden. Führen Sie dann die DNS-Abfrageprüfung aus, die den Namen von Prüfpunkten in verschiedenen Ländern auflöst und jeden einzeln meldet. Das ist die Messung, die Sie von einem Laptop aus nicht vornehmen können: Sie zeigt, ob Ihre Nameserver überall langsam sind, was auf den Anbieter hindeutet, oder von einem Kontinent aus langsam, was auf dessen Netzwerkabdeckung hindeutet. Liefern manche Standorte eine andere Antwort statt einer langsameren, ist die Frage stattdessen die Verbreitung, behandelt unter so prüfen Sie die DNS-Verbreitung.
Latenz, die driftet statt zu brechen
DNS-Latenz bricht selten auf offensichtliche Weise. Sie driftet, ein Nameserver verliert einen Standort, eine TTL wird während einer Migration abgesenkt und nie wieder angehoben, und sechs Wochen später fühlt sich die Website träge an, aus Gründen, auf die niemand zeigen kann. Eine einzelne Messung kann keinen Trend zeigen, weshalb es sich lohnt, die Abfragezeit nach Zeitplan aus den Regionen aufzuzeichnen, in denen Ihre Besucher sind. HostTracker überwacht Websites seit 2004 und beobachtet inzwischen über 500.000 Websites von Prüfpunkten in 158 Städten und hält die Historie fest, die eine langsame Drift sichtbar macht. Die anderen Anleitungen hier finden Sie im Beheben-Bereich, und der Fehlerfall, in dem überhaupt nichts zurückkommt, ist DNS-Server antwortet nicht.