Sluta anvÀnda skrattretande kort TTL för DNS

LÄg DNS-fördröjning Àr en nyckelfaktor för snabb internetanvÀndning. För att minimera den Àr det viktigt att noggrant vÀlja DNS-servrar och anonyma relÀer. Men först och frÀmst bör man bli av med onödiga förfrÄgningar.

DÀrför skapades DNS ursprungligen som en starkt cachad protokoll. Zonadministratörer sÀtter livslÀngd (TTL) för individuella poster, och resolverar anvÀnder denna information nÀr de lagrar poster i minnet för att undvika onödig trafik.

Är cachningen effektiv? För ett par Ă„r sedan visade min lilla studie att den inte Ă€r perfekt. LĂ„t oss titta pĂ„ den nuvarande situationen.

För att samla information har jag patchat Encrypted DNS Server för att bevara TTL-vÀrdet för svaret. Det definieras som den minimi TTL av dess poster för varje inkommande förfrÄgan. Detta ger en bra översikt av TTL-fördelningen för den verkliga trafiken och tar Àven hÀnsyn till populÀriteten av individuella förfrÄgningar. Den patchade versionen av servern kördes i flera timmar.

Det resulterande datasetet bestÄr av 1 583 579 poster (namn, qtyp, TTL, tidsstÀmpel). HÀr Àr den övergripande fördelningen av TTL (X-axeln Àr TTL i sekunder):

Sluta anvÀnda skrattretande kort TTL för DNS

Bortsett frÄn det lilla toppvÀrdet pÄ 86 400 (frÀmst för SOA-poster) Àr det ganska uppenbart att TTL ligger i det lÄga intervallet. LÄt oss titta nÀrmare:

Sluta anvÀnda skrattretande kort TTL för DNS

Okej, TTL över 1 timme Ă€r statistiskt ovidkommande. LĂ„t oss fokusera pĂ„ intervallet 0−3600:

Sluta anvÀnda skrattretande kort TTL för DNS

De flesta TTL ligger mellan 0 och 15 minuter:

Sluta anvÀnda skrattretande kort TTL för DNS

Den övervÀldigande majoriteten ligger mellan 0 och 5 minuter:

Sluta anvÀnda skrattretande kort TTL för DNS

Detta Àr inte bra.

Den kumulativa fördelningen gör problemet Ànnu mer uppenbart:

Sluta anvÀnda skrattretande kort TTL för DNS

I hÀlften av DNS-svaren Àr TTL 1 minut eller mindre, och för tre fjÀrdedelar Àr det 5 minuter eller mindre.

Men vÀnta, det Àr faktiskt Ànnu vÀrre. Dessa Àr TTL frÄn auktoritativa servrar. Men klientresolverare (t.ex. routrar, lokala cachar) fÄr TTL frÄn överordnade resolverare, och den minskar med varje sekund.

DÀrför kan klienten i genomsnitt anvÀnda varje post under hÀlften av den ursprungliga TTL, efter vilket ett nytt förfrÄgan skickas.

Kanske gÀller dessa mycket lÄga TTL bara ovanliga förfrÄgningar, och inte populÀra webbplatser och API:er? LÄt oss se:

Sluta anvÀnda skrattretande kort TTL för DNS

X-axeln Àr TTL, Y-axeln Àr populariteten hos förfrÄgningarna.

TyvÀrr Àr de mest populÀra förfrÄgningarna ocksÄ de som cachas sÀmst.

LÄt oss zooma in:

Sluta anvÀnda skrattretande kort TTL för DNS

Dom: det Àr verkligen dÄligt. Det har alltid varit dÄligt, men nu har det blivit Ànnu sÀmre. DNS-caching har blivit praktiskt taget vÀrdelöst. Eftersom fÀrre och fÀrre mÀnniskor anvÀnder sin leverantörs DNS-resolver (av legitima skÀl) blir ökningen av latens mer mÀrkbar.

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

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

Varför sÄ?

Varför sÀtts en sÄ lÄg TTL för DNS-poster?

  • FörĂ„ldrade lastbalanserare har kvar standardinstĂ€llningar.
  • Det gĂ„r myter om att lastbalansering via DNS beror pĂ„ TTL (det gör den inte - Ă€nda sedan Netscape Navigator vĂ€ljer klienter en slumpmĂ€ssig IP-adress frĂ„n en uppsĂ€ttning RR och försöker osynligt en annan om de inte kan ansluta)
  • Administratörer vill tillĂ€mpa förĂ€ndringar omedelbart, eftersom det Ă€r mycket enklare att planera.
  • DNS-serverns eller lastbalanserarens administratör ser det som sin uppgift att effektivt distribuera den konfiguration som anvĂ€ndare begĂ€r, snarare Ă€n att snabba upp webbplatser och tjĂ€nster.
  • LĂ„ga TTL ger sinnesro.
  • Folk sĂ€tter initialt lĂ„ga TTL för testning och glömmer sedan att Ă€ndra dem.

Jag inkluderade inte "felhantering" i listan, eftersom det blir mindre aktuellt. Om du behöver omdirigera anvÀndare till ett annat nÀtverk bara för att visa en felmeddelandesida nÀr allt annat Àr trasigt, Àr kanske en latens pÄ över 1 minut acceptabel.

Dessutom betyder en minut TTL att om de auktoritativa DNS-servrarna blockeras i mer Ă€n 1 minut, kan ingen annan fĂ„ tillgĂ„ng till beroende tjĂ€nster. Och redundans hjĂ€lper inte om orsaken Ă€r en konfigurationsfel eller hack. Å andra sidan, med rimliga TTL fortsĂ€tter mĂ„nga klienter att anvĂ€nda den tidigare konfigurationen och mĂ€rker aldrig nĂ„got.

LÄga TTL ansvarar i hög grad för CDN-tjÀnster och lastbalanserare, sÀrskilt nÀr de kombinerar CNAME med lÄga TTL och poster med samma lÄga (men oberoende) TTL:

$ 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 en CNAME- eller nÄgon av A-posterna gÄr ut, mÄste en ny förfrÄgan skickas. De har bÄda en TTL pÄ 30 sekunder, men de matchar inte. Den faktiska genomsnittliga TTL kommer att vara 15 sekunder.

Men vÀnta! Det Àr fortfarande vÀrre. Vissa resolverare beter sig vÀldigt dÄligt i en sÄdan situation med tvÄ relaterade lÄga TTL:

$ 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

Level3-resolveraren arbetar sannolikt med BIND. Om du fortsÀtter att skicka denna förfrÄgan, kommer TTL alltid att returneras som 1. I grund och botten, raw.githubusercontent.com kan aldrig cacheras.

HÀr Àr ett annat exempel pÄ en sÄdan situation 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. Aj. En har en acceptabel TTL, men det Àr helt vÀrdelöst. I andra CNAME Àr den ursprungliga TTL 60 sekunder, men för domÀnerna akamai.net Àr den maximala TTL 20 sekunder, och ingen av dem Àr synkroniserade.

Hur Àr det med domÀner som stÀndigt queryar 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 med Firefox, och TTL kommer för det mesta att fastna pÄ 1 sekund nÀr man anvÀnder Level3-resolveraren.

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

I posten safebrowsing.googleapis.com Àr TTL-vÀrdet 60 sekunder, precis som för Facebook-domÀner. Och Äterigen, sett ur ett kundperspektiv, minskar dessa vÀrden med hÀlften.

Hur Àr det med att stÀlla in en minimal TTL?

Genom att anvÀnda namnet, begÀrningstypen, TTL och den ursprungligen sparade tidsstÀmpeln skrev jag ett skript för att simulera 1,5 miljoner förfrÄgningar som passerade genom en cache-resolver för att bedöma mÀngden onödiga förfrÄgningar som skickades pÄ grund av en utgÄngen cache-poster.

47,4% av förfrÄgningarna gjorde efter att den befintliga posten hade gÄtt ut. Det Àr orimligt högt.

Vad kommer att bli effekten pÄ caching om en minimal TTL sÀtts?

Sluta anvÀnda skrattretande kort TTL för DNS

X-axeln representerar de minimi TTL-vÀrden. Poster med ursprungliga TTL-vÀrden över detta pÄverkas inte.

Y-axeln visar procentandelen förfrÄgningar frÄn klienter som redan har en cachelagrad post, men vars giltighetstid har löpt ut och som gör en ny förfrÄgan.

Andelen "överskotts" förfrÄgningar minskar frÄn 47% till 36% genom att enkelt stÀlla in en minimal TTL pÄ 5 minuter. Vid en minimal TTL pÄ 15 minuter minskar antalet dessa förfrÄgningar till 29%. En minimal TTL pÄ 1 timme sÀnker dem till 17%. En betydande skillnad!

Vad sÀgs om att inte förÀndra nÄgot pÄ serversidan, utan istÀllet stÀlla in minimala TTL-vÀrden i klienternas DNS-cacher (routrar, lokala resolvers)?

Sluta anvÀnda skrattretande kort TTL för DNS

Antalet nödvÀndiga förfrÄgningar minskar frÄn 47% till 34% vid en minimal TTL pÄ 5 minuter, till 25% med ett minimum pÄ 15 minuter och till 13% med ett minimum pÄ 1 timme. Kanske Àr det optimala vÀrdet 40 minuter.

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

Vad fÄr detta för konsekvenser?

SjÀlvklart kan tjÀnsten överföras till en ny molnleverantör, en ny server, ett nytt nÀtverk, vilket krÀver att kunderna anvÀnder de senaste DNS-posterna. En tillrÀckligt lÄg TTL hjÀlper till att göra en sÄdan övergÄng smidig och osynlig. Men med övergÄngen till en ny infrastruktur förvÀntar sig ingen att kunderna skal byta till nya DNS-poster inom 1 minut, 5 minuter eller 15 minuter. Att sÀtta en minimal livslÀngd pÄ 40 minuter istÀllet för 5 minuter hindrar inte anvÀndarna frÄn att fÄ Ätkomst till tjÀnsten.

Men detta kommer att kraftigt minska latensen och förbÀttra sekretessen och pÄlitligheten, genom att undvika onödiga förfrÄgningar.

SjÀlvklart sÀger RFC att man strikt ska följa TTL. Men verkligheten Àr att DNS-systemet har blivit för ineffektivt.

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

SjÀlvklart finns det goda skÀl att stÀlla in smÄ TTL-vÀrden för DNS-poster. Men inte för 75% av DNS-trafiken som praktiskt taget inte förÀndras.

Och om du av nÄgon anledning verkligen behöver anvÀnda lÄga TTL-vÀrden för DNS, se ocksÄ till att det inte finns nÄgot cachelagring aktiverat pÄ din webbplats. Av samma skÀl.

Om du har en lokal DNS-cache som fungerar, sÄsom dnscrypt-proxy, som lÄter dig stÀlla in en minimal TTL, anvÀnd denna funktion. Det Àr okej. Inget dÄligt kommer att hÀnda. StÀll in en minimal TTL pÄ ungefÀr mellan 40 minuter (2400 sekunder) och 1 timme. En helt rimlig spann.

KĂ€lla: habr.com

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