Sluta anvÀnda löjligt liten TTL för DNS

LÄg DNS-latens Àr nyckeln till snabb internetsurfning. För att minimera det Àr det viktigt att noggrant vÀlja DNS-servrar och anonyma relÀer. Men det första du behöver göra Àr att bli av med vÀrdelösa frÄgor.

Det Àr dÀrför DNS ursprungligen designades som ett mycket cachebart protokoll. Zonadministratörer stÀller in en tid att leva (TTL) för enskilda poster, och resolvers anvÀnder denna information nÀr de lagrar poster i minnet för att undvika onödig trafik.

Är cachning effektiv? För ett par Ă„r sedan visade min lilla research att den inte var perfekt. LĂ„t oss ta en titt pĂ„ det aktuella lĂ€get.

För att samla information har jag patchat Krypterad DNS-server för att lagra TTL-vÀrdet för svaret. Den definieras som den minsta TTL för dess poster, för varje inkommande begÀran. Detta ger en bra översikt över TTL-fördelningen av verklig trafik, och tar Àven hÀnsyn till populariteten för enskilda frÄgor. Den korrigerade versionen av servern fungerade i flera timmar.

Den resulterande datamÀngden bestÄr av 1 583 579 poster (namn, qtype, TTL, tidsstÀmpel). HÀr Àr den övergripande TTL-fördelningen (x-axeln Àr TTL i sekunder):

Sluta anvÀnda löjligt liten TTL för DNS

Bortsett frÄn en mindre stöt pÄ 86 400 (mest för SOA-poster) Àr det ganska uppenbart att TTL:erna Àr i det lÄga intervallet. LÄt oss ta en nÀrmare titt:

Sluta anvÀnda löjligt liten TTL för DNS

Ok, TTL över 1 timme Àr inte statistiskt signifikanta. LÄt oss sedan fokusera pÄ intervallet 0-3600:

Sluta anvÀnda löjligt liten TTL för DNS

De flesta TTL:er Àr mellan 0 och 15 minuter:

Sluta anvÀnda löjligt liten TTL för DNS

De allra flesta Àr frÄn 0 till 5 minuter:

Sluta anvÀnda löjligt liten TTL för DNS

Det hÀr Àr inte sÀrskilt bra.

Kumulativ fördelning gör problemet Ànnu mer uppenbart:

Sluta anvÀnda löjligt liten TTL för DNS

HÀlften av DNS-svaren har en TTL pÄ 1 minut eller mindre och tre fjÀrdedelar har en TTL pÄ 5 minuter eller mindre.

Men vÀnta, det Àr faktiskt Ànnu vÀrre. Detta Àr trots allt TTL frÄn auktoritativa servrar. Men klientupplösare (t.ex. routrar, lokala cachar) tar emot TTL frÄn uppströmslösare, och den minskar för varje sekund.

SÄledes kan klienten faktiskt anvÀnda varje post för i genomsnitt hÀlften av den ursprungliga TTL innan han skickar en ny begÀran.

Kanske pÄverkar dessa mycket lÄga TTL:er bara ovanliga förfrÄgningar och inte populÀra webbplatser och API:er? LÄt oss ta en titt:

Sluta anvÀnda löjligt liten TTL för DNS

X-axeln Àr TTL, Y-axeln Àr sökpopularitet.

TyvÀrr Àr de mest populÀra frÄgorna ocksÄ de sÀmst cachade.

LÄt oss zooma in:

Sluta anvÀnda löjligt liten TTL för DNS

Omdöme: Det Àr riktigt dÄligt. Det var redan dÄligt innan, men det blev Ànnu vÀrre. DNS-cachelagring har blivit praktiskt taget vÀrdelös. Eftersom fÀrre personer anvÀnder sin internetleverantörs DNS-resolver (av goda skÀl) blir ökningen av latens mer mÀrkbar.

DNS-cache har bara blivit anvÀndbart för innehÄll som ingen besöker.

Observera ocksÄ att programvaran kan pÄ olika sÀtt tolka lÄga TTL.

Varför sÄ?

Varför Àr DNS-poster instÀllda pÄ en sÄ liten TTL?

  • Äldre lastbalanserare lĂ€mnas med standardinstĂ€llningar.
  • Det finns myter om att DNS-belastningsbalansering beror pĂ„ TTL (detta stĂ€mmer inte - eftersom Netscape Navigator vĂ€ljer klienter en slumpmĂ€ssig IP-adress frĂ„n RR-uppsĂ€ttningen och försöker transparent med en annan om de inte kan ansluta)
  • Administratörer vill tillĂ€mpa Ă€ndringar omedelbart, sĂ„ det Ă€r lĂ€ttare att planera.
  • Administratören för en DNS-server eller belastningsutjĂ€mnare ser sin uppgift som att effektivt distribuera den konfiguration som efterfrĂ„gas av anvĂ€ndare, och inte pĂ„skynda driften av webbplatser och tjĂ€nster.
  • LĂ„g TTL ger sinnesfrid.
  • MĂ€nniskor satte initialt lĂ„ga TTL för testning och glömmer sedan att Ă€ndra dem.

Jag tog inte med "failover" i listan eftersom det blir mindre relevant. Om du behöver omdirigera anvÀndare till ett annat nÀtverk bara för att visa en felsida nÀr absolut allt annat Àr trasigt, Àr en fördröjning pÄ mer Àn 1 minut förmodligen acceptabel.

Dessutom innebĂ€r en minuts TTL att om auktoritativa DNS-servrar blockeras i mer Ă€n 1 minut, kommer ingen annan att kunna komma Ă„t beroende tjĂ€nster. Och redundans hjĂ€lper inte om orsaken Ă€r ett konfigurationsfel eller ett hack. Å andra sidan, med rimliga TTL:er kommer mĂ„nga klienter att fortsĂ€tta att anvĂ€nda den tidigare konfigurationen och mĂ€rker aldrig nĂ„got.

LÄga TTL:er Àr till stor del felet hos CDN-tjÀnster och lastbalanserare, sÀrskilt nÀr de kombinerar CNAME:er med lÄga TTL:er och poster med lika lÄga (men oberoende) TTL:er:

$ 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

Varje gÄng CNAME eller nÄgon av A-posterna löper ut mÄste en ny begÀran skickas. BÄda har 30 sekunders TTL men det Àr inte samma sak. Den faktiska genomsnittliga TTL kommer att vara 15 sekunder.

Men vÀnta! Det Àr Ànnu vÀrre. Vissa resolvers beter sig vÀldigt dÄligt i den hÀr situationen med tvÄ lÀnkade lÄga TTL:er:

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

Level3-resolvern körs förmodligen pÄ BIND. Om du fortsÀtter att skicka denna begÀran kommer den alltid att returnera en TTL pÄ 1. I huvudsak, raw.githubusercontent.com aldrig cachad.

HÀr Àr ett annat exempel pÄ den hÀr situationen med en mycket populÀr domÀn:

$ 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

Minst tre CNAME-poster. Ja. En har hyfsad TTL, men den Àr helt vÀrdelös. I andra CNAME Àr den initiala TTL 60 sekunder, men för domÀner akamai.net Den maximala TTL Àr 20 sekunder och ingen av dem Àr i fas.

Hur Àr det med domÀner som stÀndigt efterfrÄgar Apple-enheter?

$ 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

Samma problem som Firefox och TTL kommer att fastna pÄ 1 sekund för det mesta nÀr du anvÀnder Level3 resolver.

Dropbox?

$ drill client.dropbox.com @8.8.8.8 client.dropbox.com. 7 I 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 I CNAME client.dropbox-dns.com. client.dropbox-dns.com. 1 IN A 162.125.64.3

Vid inspelningen safebrowsing.googleapis.com TTL-vÀrdet Àr 60 sekunder, samma som Facebook-domÀner. Och Äterigen, ur kundens synvinkel, halveras dessa vÀrden.

Vad sÀgs om att stÀlla in en lÀgsta TTL?

Med hjÀlp av namnet, förfrÄgningstypen, TTL och den ursprungligen lagrade tidsstÀmpeln skrev jag ett skript för att simulera 1,5 miljoner förfrÄgningar som gÄr genom en caching-resolver för att uppskatta mÀngden extra förfrÄgningar som skickas pÄ grund av en utgÄngen cachepost.

47,4 % av förfrÄgningarna gjordes efter att den befintliga posten hade löpt ut. Detta Àr orimligt högt.

Vad blir effekten pÄ cachning om ett lÀgsta TTL stÀlls in?

Sluta anvÀnda löjligt liten TTL för DNS

X-axeln Àr de minsta TTL-vÀrdena. Poster med original-TTL över detta vÀrde pÄverkas inte.

Y-axeln Àr procentandelen förfrÄgningar frÄn en klient som redan har en cachad post, men den har löpt ut och gör en ny begÀran.

Andelen "extra" förfrÄgningar minskas frÄn 47 % till 36 % genom att helt enkelt stÀlla in minsta TTL till 5 minuter. Genom att stÀlla in minsta TTL till 15 minuter sjunker antalet förfrÄgningar till 29 %. En minsta TTL pÄ 1 timme minskar dem till 17 %. Betydande skillnad!

Vad sÀgs om att inte Àndra nÄgot pÄ serversidan, utan istÀllet stÀlla in minsta TTL i klientens DNS-cachar (routrar, lokala resolvers)?

Sluta anvÀnda löjligt liten TTL för DNS

Antalet nödvÀndiga förfrÄgningar minskas frÄn 47 % till 34 % nÀr man stÀller in en minsta TTL pÄ 5 minuter, till 25 % med minst 15 minuter och till 13 % med minst 1 timme. Det optimala vÀrdet Àr kanske 40 minuter.

Effekten av denna minimala förÀndring Àr enorm.

Vilka Àr konsekvenserna?

Naturligtvis kan tjÀnsten migreras till en ny molnleverantör, en ny server, ett nytt nÀtverk, vilket krÀver att klienter anvÀnder de senaste DNS-posterna. Och en ganska liten TTL hjÀlper till att göra en sÄdan övergÄng smidigt och omÀrkligt. Men med övergÄngen till en ny infrastruktur förvÀntar sig ingen att kunderna ska migrera till nya DNS-poster inom 1 minut, 5 minuter eller 15 minuter. Att stÀlla in minimilivslÀngden till 40 minuter istÀllet för 5 minuter hindrar inte anvÀndare frÄn att komma Ät tjÀnsten.

Detta kommer dock att avsevÀrt minska latensen och förbÀttra integriteten och tillförlitligheten genom att undvika onödiga förfrÄgningar.

Naturligtvis sÀger RFC:erna att TTL mÄste följas strikt. Men verkligheten Àr att DNS-systemet har blivit för ineffektivt.

Om du arbetar med auktoritativa DNS-servrar, kontrollera dina TTL:er. Behöver du verkligen sÄ löjligt lÄga vÀrden?

Naturligtvis finns det goda skÀl för att stÀlla in smÄ TTL:er för DNS-poster. Men inte för de 75 % av DNS-trafiken som förblir praktiskt taget oförÀndrad.

Och om du av nÄgon anledning verkligen behöver anvÀnda lÄga TTL:er för DNS, se ocksÄ till att caching inte Àr aktiverat pÄ din webbplats. Av samma skÀl.

Om du har en lokal DNS-cache igÄng, som t.ex dnscrypt-proxy, som lÄter dig stÀlla in minsta TTL, anvÀnd denna funktion. Det hÀr Àr bra. Inget dÄligt kommer att hÀnda. StÀll in minsta TTL till cirka 40 minuter (2400 sekunder) och 1 timme. Ganska rimlig rÀckvidd.

KĂ€lla: will.com

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster