Vad är DNS-cache?
DNS-cachelagring är tillfällig lagring av DNS-frågeresultat hos resolvers, operativsystem, webbläsare och applikationer. När en DNS-uppslagning görs cachelagras resultatet under den tid som anges av postens TTL (Time To Live), så att efterföljande frågor om samma domän kan besvaras direkt utan att auktoritativa servrar behöver frågas.
Varför DNS-cachelagring är viktigt
Utan cachelagring skulle varje webbförfrågan kräva en fullständig DNS-uppslagning, vilket skapar latens och stora mängder DNS-trafik. DNS-cachelagring ger:
- Snabbare svarstider: Cachade svar returneras på mikrosekunder i stället för millisekunder för fullständiga uppslagningar
- Mindre nätverkstrafik: Färre frågor till auktoritativa servrar
- Bättre motståndskraft: Den lokala cachen kan ge svar även när DNS-servrar tillfälligt inte kan nås
- Lägre serverbelastning: Auktoritativa servrar hanterar färre frågor
Så fungerar DNS-cachelagring
Cachehierarkin
DNS-cachelagring sker på flera nivåer:
Browser Cache (seconds to minutes)
↓
OS Cache (seconds to minutes)
↓
Local Resolver Cache (minutes to hours)
↓
ISP Resolver Cache (minutes to hours)
↓
Authoritative Name Server (source of truth)
Processen för cacheuppslagning
1. Användaren frågar efter example.com
2. Webbläsaren kontrollerar sin cache
3. Om svaret saknas kontrollerar operativsystemet sin cache
4. Om svaret saknas kontrollerar resolvern sin cache
5. Om svaret saknas görs en rekursiv fråga till auktoritativa servrar
6. Resultatet cachelagras på varje nivå enligt TTL
7. Svaret returneras till användaren
TTL-baserad utgång
Varje DNS-post innehåller ett TTL-värde:
example.com. 300 IN A 203.0.113.50
^^^
TTL in seconds (5 minutes)
Cacher lagrar posten i 300 sekunder och kastar sedan bort den. Nästa fråga utlöser en ny uppslagning.
DNS-cachelagringens lager
Webbläsarcache
Moderna webbläsare cachelagrar DNS-resultat separat:
Chrome: Använder en egen DNS-cache (chrome://net-internals/#dns) Firefox: Har en intern cache (about:networking#dns) Safari: Använder systemets resolverTypisk TTL för webbläsarcache: 60 sekunder (oavsett DNS-TTL)
Operativsystemets cache
Windows: DNS Client-tjänsten cachelagrar resultat# View cache
ipconfig /displaydns
# Flush cache
ipconfig /flushdns
macOS: mDNSResponder hanterar cachelagringen
# Flush cache (macOS 10.15+)
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Linux: Varierar mellan system, ofta systemd-resolved
# Flush systemd-resolved cache
sudo systemd-resolve --flush-caches
# Check statistics
sudo systemd-resolve --statistics
Resolvercache
Rekursiva DNS-resolvers (ISP:s DNS, 8.8.8.8 och 1.1.1.1) underhåller stora cacher som betjänar miljontals användare:
| Resolver | Cache-strategi |
|---|---|
| Google (8.8.8.8) | Respekterar TTL, global cache |
| Cloudflare (1.1.1.1) | Respekterar TTL, distribuerad |
| ISP-resolvers | Kan ignorera låga TTL-värden |
Exempel på cachebeteende
Normal drift
Query 1: example.com
→ Full lookup: 50ms
→ Cached for 300s (TTL)
Query 2: example.com (1 minute later)
→ Cache hit: 1ms
Query 3: example.com (10 minutes later)
→ Cache expired, full lookup: 50ms
→ Re-cached for 300s
Uppdatera en DNS-post
Original: example.com → 203.0.113.50 (TTL: 300s)
Time: 10:00 - DNS updated to 203.0.113.51
Client queries at 10:02
→ Still cached: 203.0.113.50 (expires 10:05)
Client queries at 10:06
→ Cache expired, new lookup: 203.0.113.51
→ Cached until 10:11
TTL-strategi och cachelagring
Välja TTL-värden
| Användningsområde | Rekommenderad TTL | Motivering |
|---|---|---|
| Statisk infrastruktur | 3600-86400s (1-24 timmar) | Ändras sällan, minskar DNS-belastningen |
| Produktionswebbplats | 300-1800s (5-30 minuter) | Balanserar prestanda och flexibilitet |
| Aktiv flytt | 60-300s (1-5 minuter) | Snabbare propagation under ändringar |
| Lastbalansering | 60-120s | Snabb redundans när servrar ändras |
Sänka TTL före en flytt
Bästa praxis när DNS-ändringar planeras:
Day -7: example.com TTL 3600s (1 hour)
Day -2: Reduce to 300s (5 minutes)
Day 0: Make DNS change
→ Max 5 minute cache retention
Day +1: Restore TTL to 3600s
Cacheförgiftning och säkerhet
Attack med DNS-cacheförgiftning
Angripare försöker lägga in falska DNS-poster i cacher:
1. Angriparen översvämmar resolvern med falska svar
2. Om ett svar matchar en pågående fråga cachelagras det
3. Användare får en skadlig IP-adress för en legitim domän
4. Den förgiftade posten levereras till många användare från cachen
Säkerhetsåtgärder
DNSSEC: Kryptografiskt signerade poster förhindrar förgiftningexample.com. IN A 203.0.113.50
IN RRSIG A 8 2 300 ...
Slumpmässiga källportar: Gör svar svårare att förfalska
0x20-kodning: Slumpmässig skiftning av frågans bokstäver underlättar validering
Säker resolver: Använd välrenommerade resolvers (Cloudflare, Google, Quad9)
Kontrollera DNS-cache
Visa cacheinnehåll
Windows:ipconfig /displaydns | more
macOS (begränsad information):
sudo killall -INFO mDNSResponder
# Check Console.app for logs
Linux (systemd-resolved):
sudo systemd-resolve --statistics
Testa cachebeteende
# First query (cache miss)
time dig example.com
# Immediate repeat (cache hit)
time dig example.com
# Compare times
Cache-relaterade problem
Föråldrad cache efter DNS-ändring
Problem: Uppdaterade DNS-poster syns inte för användare Lösning:1. Vänta tills TTL löper ut
2. Sänk TTL före framtida ändringar
3. Be användare tömma sin lokala cache
Alltför aggressiv cachelagring
Vissa internetleverantörer ignorerar TTL och cachelagrar längre:
Problem: Ändringar tar timmar eller dagar att slå igenom Lösning:- Använd lägre TTL-värden (internetleverantörer respekterar vanligtvis minst 300 sekunder)
- Överväg anycast-DNS för kritiska tjänster
- Dokumentera kända problematiska internetleverantörer
Negativ cachelagring
Misslyckade uppslagningar (NXDOMAIN) cachelagras också:
Query: newsubdomain.example.com
Response: NXDOMAIN (does not exist)
Cached: 3600s (SOA minimum TTL)
Result: New subdomain won't resolve for 1 hour
Lösning: Sänk SOA:s minsta TTL innan du lägger till nya poster
Töm DNS-cachen
När cachen ska tömmas
- Testa DNS-ändringar omedelbart
- Felsöka upplösningsproblem
- Efter flytt till en annan DNS-leverantör
- Vid misstänkt cacheförgiftning
Så tömmer du cachen
Windows:ipconfig /flushdns
macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Linux (systemd-resolved):
sudo systemd-resolve --flush-caches
Chrome:
Navigate to: chrome://net-internals/#dns
Click: "Clear host cache"
Firefox:
Toggle network.dnsCacheExpiration in about:config
Or restart browser
Bästa praxis
1. Ange lämpliga TTL-värden: Balansera prestanda och ändringshastighet
2. Sänk TTL före ändringar: Sänk TTL 24-48 timmar före DNS-uppdateringar
3. Övervaka propagation: Använd verktyg för att kontrollera global DNS-upplösning
4. Dokumentera cachebeteende: Förstå infrastrukturens cachelager
5. Använd DNSSEC: Skydda mot cacheförgiftning
6. Testa noggrant: Verifiera att DNS-ändringar fungerar som väntat innan de godkänns
7. Utbilda användare: Ge tydliga instruktioner för att tömma cache vid behov
Avancerade cachekoncept
Förhämtning
Webbläsare och resolvers kan förhämta DNS för länkar på en sida:
<!-- Hint to browser -->
<link rel="dns-prefetch" href="//cdn.example.com">
Värma cache
Lastbalanserare och CDN:er kan förfylla cacher med kritiska poster.
Anycast och cachelagring
Anycast-DNS dirigerar frågor till närmaste server och skapar geografiskt distribuerade cacher för optimal prestanda.
DNS-cachelagring är grundläggande för internetprestanda. Genom att förstå och konfigurera TTL-värden korrekt säkerställer du att DNS-ändringar slår igenom effektivt samtidigt som upplösningen förblir snabb.