Hören Sie auf, lĂ€cherlich kurze TTLs fĂŒr DNS zu verwenden

Eine niedrige DNS-Verzögerung ist ein SchlĂŒsselmerkmal fĂŒr schnelles Arbeiten im Internet. Um sie zu minimieren, ist es wichtig, die DNS-Server sorgfĂ€ltig auszuwĂ€hlen und anonyme Rilais. Aber zuerst sollten wir uns von unnötigen Anfragen befreien.

Deshalb wurde DNS ursprĂŒnglich als stark cachebarer Protokoll entwickelt. Zonenadministratoren setzen die Lebensdauer (TTL) fĂŒr einzelne EintrĂ€ge fest, und Resolver verwenden diese Informationen beim Speichern von EintrĂ€gen im Speicher, um unnötigen Datenverkehr zu vermeiden.

Ist das Caching effizient? Vor ein paar Jahren zeigte meine kleine Untersuchung, dass es nicht perfekt ist. Schauen wir uns die aktuelle Situation an.

FĂŒr die Datensammlung habe ich Encrypted DNS Server gepatcht, um den Wert von TTL fĂŒr die Antwort zu speichern. Dies wird als das minimale TTL seiner EintrĂ€ge fĂŒr jede eingehende Anfrage definiert. Das gibt einen guten Überblick ĂŒber die Verteilung von TTL im realen Datenverkehr und berĂŒcksichtigt auch die Beliebtheit einzelner Anfragen. Die gepatchte Version des Servers lief einige Stunden.

Der resultierende Datensatz besteht aus 1 583 579 EintrÀgen (Name, QType, TTL, Zeitstempel). Hier ist die allgemeine Verteilung von TTL (X-Achse ist TTL in Sekunden):

Hören Sie auf, lĂ€cherlich kurze TTLs fĂŒr DNS zu verwenden

UnabhĂ€ngig von einem kleinen HĂŒgel bei 86 400 (hauptsĂ€chlich fĂŒr SOA-EintrĂ€ge) ist es ziemlich offensichtlich, dass die TTL im niedrigen Bereich liegen. Lassen Sie uns nĂ€her hinsehen:

Hören Sie auf, lĂ€cherlich kurze TTLs fĂŒr DNS zu verwenden

Gut, TTLs ĂŒber 1 Stunde sind statistisch nicht signifikant. Lassen Sie uns also auf den Bereich 0−3600 konzentrieren:

Hören Sie auf, lĂ€cherlich kurze TTLs fĂŒr DNS zu verwenden

Die Mehrheit der TTLs liegt zwischen 0 und 15 Minuten:

Hören Sie auf, lĂ€cherlich kurze TTLs fĂŒr DNS zu verwenden

Der ĂŒberwiegende Teil liegt zwischen 0 und 5 Minuten:

Hören Sie auf, lĂ€cherlich kurze TTLs fĂŒr DNS zu verwenden

Das ist nicht besonders gut.

Die kumulierte Verteilung macht das Problem noch offensichtlicher:

Hören Sie auf, lĂ€cherlich kurze TTLs fĂŒr DNS zu verwenden

In der HÀlfte der DNS-Antworten betrÀgt die TTL 1 Minute oder weniger, und bei drei Vierteln liegt sie bei 5 Minuten oder weniger.

Aber warten Sie, es ist tatsĂ€chlich noch schlimmer. Denn dies sind TTLs von autoritativen Servern. Client-Resolver (z. B. Router, lokale Caches) erhalten TTLs von ĂŒbergeordneten Resolvern, und diese nehmen jede Sekunde ab.

Der Client kann also tatsĂ€chlich jeden Eintrag im Durchschnitt fĂŒr die HĂ€lfte der ursprĂŒnglichen TTL verwenden, bevor er eine neue Anfrage sendet.

Vielleicht betreffen diese sehr niedrigen TTLs nur ungewöhnliche Anfragen und nicht beliebte Websites und APIs? Lassen Sie uns das sehen:

Hören Sie auf, lĂ€cherlich kurze TTLs fĂŒr DNS zu verwenden

Die X-Achse ist TTL, die Y-Achse ist die Beliebtheit der Anfragen.

Leider werden die beliebtesten Anfragen auch am schlechtesten gecached.

Lassen Sie uns das nÀher ansehen:

Hören Sie auf, lĂ€cherlich kurze TTLs fĂŒr DNS zu verwenden

Das Urteil: Es ist wirklich alles schlecht. Es war schon vorher schlecht, und jetzt ist es noch schlimmer geworden. DNS-Caching ist praktisch nutzlos geworden. Da immer weniger Menschen den DNS-Resolver ihres Providers aus berechtigten GrĂŒnden nutzen, wird die Verzögerung immer offensichtlicher.

DNS-Caching ist nur fĂŒr Inhalte nĂŒtzlich geworden, die niemand besucht.

Beachten Sie auch, dass Software unterschiedlich niedrige TTLs interpretieren kann.

Warum ist das so?

Warum wird fĂŒr DNS-EintrĂ€ge eine so niedrige TTL festgelegt?

  • Veraltete Lastverteiler haben die Standardeinstellungen beibehalten.
  • Es gibt Mythen, dass die DNS-Lastverteilung von der TTL abhĂ€ngt (das ist nicht der Fall – seit Netscape Navigator wĂ€hlen Clients eine zufĂ€llige IP-Adresse aus einer RR-Gruppe und versuchen transparent eine andere, wenn sie keine Verbindung herstellen können).
  • Administratoren möchten Änderungen sofort vornehmen, da dies die Planung erleichtert.
  • Der Administrator des DNS-Servers oder des Lastverteilers sieht seine Aufgabe darin, die Konfiguration, die die Benutzer anfordern, effizient bereitzustellen und nicht die Leistung von Websites und Diensten zu steigern.
  • Niedrige TTLs geben Seelenfrieden.
  • Menschen setzen zunĂ€chst niedrige TTLs zu Testzwecken und vergessen dann, diese zu Ă€ndern.

Ich habe „Failover“ nicht in die Liste aufgenommen, da dies zunehmend irrelevant ist. Wenn Benutzer nur fĂŒr die Anzeige einer Fehlermeldung in ein anderes Netzwerk umgeleitet werden mĂŒssen, wenn absolut alles andere kaputt ist, ist eine Verzögerung von mehr als 1 Minute wahrscheinlich akzeptabel.

DarĂŒber hinaus bedeutet eine einminĂŒtige TTL, dass, wenn die autoritativen DNS-Server lĂ€nger als 1 Minute blockiert sind, niemand mehr auf abhĂ€ngige Dienste zugreifen kann. Und Redundanz hilft nicht, wenn die Ursache ein Konfigurationsfehler oder ein Hackerangriff ist. Andererseits werden mit angemessenen TTLs viele Clients weiterhin die vorherige Konfiguration nutzen und nichts bemerken.

FĂŒr niedrige TTLs sind zu einem großen Teil CDN-Dienste und LastverteilungsgerĂ€te verantwortlich, insbesondere wenn sie CNAMEs mit niedrigen TTLs und EintrĂ€ge mit Ă€hnlichen (aber unabhĂ€ngigen) niedrigen TTLs kombinieren:

$ drill raw.githubusercontent.com
raw.githubusercontent.com.	9	IN	CNAME	github.map.fastly.net.
github.map.fastly.net.	20	IN	A	151.101.128.133
github.map.fastly.net.	20	IN	A	151.101.192.133
github.map.fastly.net.	20	IN	A	151.101.0.133
github.map.fastly.net.	20	IN	A	151.101.64.133

Jedes Mal, wenn ein CNAME oder einer der A-EintrĂ€ge ablĂ€uft, muss eine neue Anfrage gesendet werden. Beide haben ein TTL von 30 Sekunden, aber es stimmt nicht ĂŒberein. Das tatsĂ€chliche durchschnittliche TTL wird 15 Sekunden betragen.

Aber warten Sie! Es wird noch schlimmer. Einige Resolver verhalten sich in dieser Situation mit zwei miteinander verbundenen niedrigen TTLs sehr schlecht:

$ drill raw.githubusercontent.com @4.2.2.2
raw.githubusercontent.com.	1	IN	CNAME	github.map.fastly.net.
github.map.fastly.net.	1	IN	A	151.101.16.133

Der Level3-Resolver arbeitet wahrscheinlich mit BIND. Wenn Sie diese Anfrage weiterhin senden, wird immer ein TTL von 1 zurĂŒckgegeben. Im Wesentlichen, raw.githubusercontent.com wird niemals zwischengespeichert.

Hier ist ein weiteres Beispiel fĂŒr eine solche Situation mit einer sehr beliebten Domain:

$ drill detectportal.firefox.com @1.1.1.1
detectportal.firefox.com.	25	IN	CNAME	detectportal.prod.mozaws.net.
detectportal.prod.mozaws.net.	26	IN	CNAME	detectportal.firefox.com-v2.edgesuite.net.
detectportal.firefox.com-v2.edgesuite.net.	10668	IN	CNAME	a1089.dscd.akamai.net.
a1089.dscd.akamai.net.	10	IN	A	104.123.50.106
a1089.dscd.akamai.net.	10	IN	A	104.123.50.88

Mindestens drei CNAME-EintrĂ€ge. Autsch. Einer hat ein ordentliches TTL, aber das ist völlig nutzlos. Bei den anderen CNAME wird das ursprĂŒngliche TTL auf 60 Sekunden gesetzt, aber fĂŒr Domains akamai.net betrĂ€gt das maximale TTL 20 Sekunden, und keines von ihnen ist synchron.

Was ist mit Domains, die stÀndig Apple-GerÀte abfragen?

$ drill 1-courier.push.apple.com @4.2.2.2
1-courier.push.apple.com.	1253	IN	CNAME	1.courier-push-apple.com.akadns.net.
1.courier-push-apple.com.akadns.net.	1	IN	CNAME	gb-courier-4.push-apple.com.akadns.net.
gb-courier-4.push-apple.com.akadns.net.	1	IN	A	17.57.146.84
gb-courier-4.push-apple.com.akadns.net.	1	IN	A	17.57.146.85

Dasselbe Problem wie bei Firefox, und das TTL bleibt die meiste Zeit bei 1 Sekunde, wenn der Level3-Resolver verwendet wird.

Dropbox?

$ drill client.dropbox.com @8.8.8.8
client.dropbox.com.	7	IN	CNAME	client.dropbox-dns.com.
client.dropbox-dns.com.	59	IN	A	162.125.67.3

$ drill client.dropbox.com @4.2.2.2
client.dropbox.com.	1	IN	CNAME	client.dropbox-dns.com.
client.dropbox-dns.com.	1	IN	A	162.125.64.3

Bei dem Eintrag safebrowsing.googleapis.com ist der Wert TTL 60 Sekunden, wie bei den Facebook-Domains. Und wieder einmal werden diese Werte seitens des Clients halbiert.

Wie sieht es mit der Festlegung eines minimalen TTL aus?

Mit dem Namen, dem Abfragetyp, dem TTL und dem ursprĂŒnglich gespeicherten Zeitstempel habe ich ein Skript geschrieben, um 1,5 Millionen Abfragen zu simulieren, die durch einen zwischenspeichernden Resolver gehen, um das Volumen der ĂŒberflĂŒssigen Anfragen zu bewerten, die aufgrund eines abgelaufenen Cache-Eintrags gesendet wurden.

47,4 % der Anfragen wurden nach Ablauf eines bestehenden Eintrags gestellt. Das ist unangemessen hoch.

Wie wird sich die Festlegung eines minimalen TTL auf das Caching auswirken?

Hören Sie auf, lĂ€cherlich kurze TTLs fĂŒr DNS zu verwenden

Die X-Achse sind die minimalen TTL-Werte. EintrĂ€ge mit ursprĂŒnglichen TTLs ĂŒber diesem Wert sind nicht betroffen.

Die Y-Achse zeigt den Prozentsatz der Anfragen von einem Client, der bereits einen zwischengespeicherten Eintrag hat, dessen GĂŒltigkeitsdauer jedoch abgelaufen ist, und der eine neue Anfrage stellt.

Der Anteil "ĂŒberflĂŒssiger" Anfragen sinkt durch die einfache Festlegung eines minimalen TTLs von 5 Minuten von 47 % auf 36 %. Bei einer Festlegung des minimalen TTLs von 15 Minuten sinkt die Anzahl dieser Anfragen auf 29 %. Ein minimaler TTL von 1 Stunde reduziert sie auf 17 %. Ein erheblicher Unterschied!

Wie wÀre es, nichts auf der Serverseite zu Àndern, sondern stattdessen die minimalen TTLs in den DNS-Caches der Clients (Router, lokale Resolver) zu setzen?

Hören Sie auf, lĂ€cherlich kurze TTLs fĂŒr DNS zu verwenden

Die erforderliche Anzahl an Anfragen sinkt bei der Festlegung eines minimalen TTLs von 5 Minuten von 47 % auf 34 %, auf 25 % mit einem Minimum von 15 Minuten und auf 13 % mit einem Minimum von 1 Stunde. Möglicherweise liegt der optimale Wert bei 40 Minuten.

Die Auswirkungen dieser minimalen Änderung sind gewaltig.

Was sind die Konsequenzen?

NatĂŒrlich kann der Service auf einen neuen Cloud-Anbieter, einen neuen Server oder ein neues Netzwerk umgestellt werden, was von den Clients erfordert, die neuesten DNS-EintrĂ€ge zu verwenden. Ein ausreichend niedriger TTL hilft, einen solchen Übergang sanft und unauffĂ€llig zu gestalten. Aber bei einem Wechsel zur neuen Infrastruktur erwartet niemand, dass die Clients innerhalb von 1 Minute, 5 Minuten oder 15 Minuten auf neue DNS-EintrĂ€ge umsteigen. Das Setzen einer minimalen Lebensdauer von 40 Minuten anstelle von 5 Minuten wird den Benutzern nicht den Zugang zum Dienst verwehren.

Dies wĂŒrde jedoch die Latenz erheblich reduzieren und die PrivatsphĂ€re sowie ZuverlĂ€ssigkeit erhöhen, indem unnötige Anfragen vermieden werden.

NatĂŒrlich besagen die RFCs, dass man sich strikt an die TTL halten sollte. Aber die RealitĂ€t ist, dass das DNS-System viel zu ineffizient geworden ist.

Wenn Sie mit autoritativen DNS-Servern arbeiten, ĂŒberprĂŒfen Sie bitte Ihre TTLs. Brauchen Sie wirklich so lĂ€cherlich niedrige Werte?

NatĂŒrlich gibt es triftige GrĂŒnde fĂŒr die Festlegung niedriger TTLs fĂŒr DNS-EintrĂ€ge. Aber nicht fĂŒr 75 % des DNS-Traffics, der sich praktisch nicht Ă€ndert.

Und wenn Sie aus irgendwelchen GrĂŒnden wirklich niedrige TTLs fĂŒr DNS verwenden mĂŒssen, stellen Sie sicher, dass auf Ihrer Website kein Caching aktiviert ist. Aus denselben GrĂŒnden.

Wenn Sie einen lokalen DNS-Cache haben, wie dnscrypt-proxy, die es Ihnen ermöglicht, minimale TTLs festzulegen, verwenden Sie diese Funktion. Das ist in Ordnung. Nichts Schlimmes wird passieren. Stellen Sie die minimale TTL auf etwa zwischen 40 Minuten (2400 Sekunden) und 1 Stunde ein. Ein durchaus angemessener Bereich.

Quelle: habr.com

60GB SSD 8Gb DDR4