Czym jest pamięć podręczna DNS?
Pamięć podręczna DNS to tymczasowe przechowywanie wyników zapytań DNS przez resolvery, systemy operacyjne, przeglądarki i aplikacje. Po wykonaniu wyszukiwania DNS wynik jest przechowywany przez okres określony wartością TTL (Time To Live) rekordu, dzięki czemu kolejne żądania dotyczące tej samej domeny mogą otrzymać natychmiastową odpowiedź bez odpytywania serwerów autorytatywnych.
Dlaczego pamięć podręczna DNS ma znaczenie
Bez pamięci podręcznej każde pojedyncze żądanie internetowe wymagałoby pełnego wyszukiwania DNS, co zwiększałoby opóźnienia i generowało ogromny ruch DNS. Pamięć podręczna DNS zapewnia:
- Krótszy czas odpowiedzi: odpowiedzi z pamięci podręcznej wracają w mikrosekundach, a pełne wyszukiwania trwają milisekundy
- Mniejszy ruch sieciowy: mniej zapytań do serwerów autorytatywnych
- Większą odporność: lokalna pamięć podręczna może udzielać odpowiedzi nawet wtedy, gdy serwery DNS są chwilowo nieosiągalne
- Mniejsze obciążenie serwerów: serwery autorytatywne obsługują mniej zapytań
Jak działa pamięć podręczna DNS
Hierarchia pamięci podręcznej
Pamięć podręczna DNS działa na wielu poziomach:
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)
Proces wyszukiwania w pamięci podręcznej
1. Użytkownik żąda example.com
2. Przeglądarka sprawdza własną pamięć podręczną
3. W przypadku braku wyniku system operacyjny sprawdza własną pamięć podręczną
4. W przypadku braku wyniku resolver sprawdza własną pamięć podręczną
5. W przypadku braku wyniku zapytanie rekurencyjne trafia do serwerów autorytatywnych
6. Wynik jest przechowywany na każdym poziomie zgodnie z TTL
7. Odpowiedź wraca do użytkownika
Wygaśnięcie na podstawie TTL
Każdy rekord DNS zawiera wartość TTL:
example.com. 300 IN A 203.0.113.50
^^^
TTL in seconds (5 minutes)
Pamięci podręczne przechowują ten rekord przez 300 sekund, a następnie go usuwają. Kolejne zapytanie uruchamia świeże wyszukiwanie.
Warstwy pamięci podręcznej DNS
Pamięć podręczna przeglądarki
Nowoczesne przeglądarki niezależnie przechowują wyniki DNS w pamięci podręcznej:
Chrome: korzysta z własnej pamięci podręcznej DNS (chrome://net-internals/#dns) Firefox: utrzymuje wewnętrzną pamięć podręczną (about:networking#dns) Safari: korzysta z resolvera systemowegoTypowy TTL pamięci podręcznej przeglądarki: 60 sekund (niezależnie od TTL DNS)
Pamięć podręczna systemu operacyjnego
Windows: usługa DNS Client przechowuje wyniki w pamięci podręcznej# View cache
ipconfig /displaydns
# Flush cache
ipconfig /flushdns
macOS: usługa mDNSResponder obsługuje buforowanie
# Flush cache (macOS 10.15+)
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Linux: zależy od systemu, często używany jest systemd-resolved
# Flush systemd-resolved cache
sudo systemd-resolve --flush-caches
# Check statistics
sudo systemd-resolve --statistics
Pamięć podręczna resolvera
Rekursywne resolvery DNS (DNS dostawców internetu, 8.8.8.8, 1.1.1.1) utrzymują duże pamięci podręczne obsługujące miliony użytkowników:
| Resolver | Strategia pamięci podręcznej |
|---|---|
| Google (8.8.8.8) | Respektuje TTL, pamięć globalna |
| Cloudflare (1.1.1.1) | Respektuje TTL, pamięć rozproszona |
| Resolvery dostawców internetu | Mogą ignorować niskie wartości TTL |
Przykłady działania pamięci podręcznej
Normalne działanie
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
Aktualizacja rekordu DNS
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
Strategia TTL i buforowanie
Wybór wartości TTL
| Zastosowanie | Zalecany TTL | Uzasadnienie |
|---|---|---|
| Infrastruktura statyczna | 3600-86400s (1-24 hours) | Rzadko się zmienia, mniejsze obciążenie DNS |
| Witryna produkcyjna | 300-1800s (5-30 minutes) | Równowaga między wydajnością a elastycznością |
| Aktywna migracja | 60-300s (1-5 minutes) | Szybsza propagacja podczas zmian |
| Równoważenie obciążenia | 60-120s | Szybkie przełączenie awaryjne po zmianie serwerów |
Obniżenie TTL przed migracją
Najlepsza praktyka podczas planowania zmian DNS:
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
Zatruwanie pamięci podręcznej i bezpieczeństwo
Atak polegający na zatruciu pamięci podręcznej DNS
Napastnicy próbują wprowadzić fałszywe rekordy DNS do pamięci podręcznych:
1. Napastnik zalewa resolver fałszywymi odpowiedziami
2. Jeśli jedna z nich pasuje do oczekującego zapytania, zostaje zapisana w pamięci podręcznej
3. Użytkownicy otrzymują złośliwy adres IP dla legalnej domeny
4. Zatruta odpowiedź z pamięci podręcznej jest dostarczana wielu użytkownikom
Środki ograniczające ryzyko
DNSSEC: podpisane kryptograficznie rekordy zapobiegają zatruciu pamięci podręcznejexample.com. IN A 203.0.113.50
IN RRSIG A 8 2 300 ...
Losowanie portu źródłowego: utrudnia fałszowanie odpowiedzi
Kodowanie 0x20: losowa wielkość liter w zapytaniach ułatwia walidację
Bezpieczeństwo resolvera: korzystaj z renomowanych resolverów (Cloudflare, Google, Quad9)
Sprawdzanie pamięci podręcznej DNS
Wyświetlanie zawartości pamięci podręcznej
Windows:ipconfig /displaydns | more
macOS (ograniczone informacje):
sudo killall -INFO mDNSResponder
# Check Console.app for logs
Linux (systemd-resolved):
sudo systemd-resolve --statistics
Testowanie działania pamięci podręcznej
# First query (cache miss)
time dig example.com
# Immediate repeat (cache hit)
time dig example.com
# Compare times
Problemy związane z pamięcią podręczną
Nieaktualna pamięć podręczna po zmianie DNS
Problem: zaktualizowane rekordy DNS nie są widoczne dla użytkowników Rozwiązanie:1. Poczekaj na wygaśnięcie TTL
2. Obniż TTL przed przyszłymi zmianami
3. Poproś użytkowników o wyczyszczenie lokalnej pamięci podręcznej
Nadmiernie agresywne buforowanie
Niektórzy dostawcy internetu ignorują TTL i przechowują dane dłużej:
Problem: zmiany propagują się przez wiele godzin lub dni Rozwiązanie:- Używaj niższych wartości TTL (dostawcy internetu zwykle respektują minimum 300 s)
- Rozważ DNS anycast dla usług krytycznych
- Dokumentuj znanych problematycznych dostawców internetu
Buforowanie negatywne
Nieudane wyszukiwania (NXDOMAIN) również są przechowywane w pamięci podręcznej:
Query: newsubdomain.example.com
Response: NXDOMAIN (does not exist)
Cached: 3600s (SOA minimum TTL)
Result: New subdomain won't resolve for 1 hour
Rozwiązanie: obniż minimalny TTL SOA przed dodaniem nowych rekordów
Czyszczenie pamięci podręcznej DNS
Kiedy czyścić pamięć podręczną
- Testowanie zmian DNS natychmiast po ich wprowadzeniu
- Diagnozowanie problemów z rozwiązywaniem nazw
- Po migracji do innego dostawcy DNS
- Podejrzenie zatrucia pamięci podręcznej
Jak wyczyścić pamięć podręczną
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
Najlepsze praktyki
1. Ustaw odpowiednie wartości TTL: zachowaj równowagę między wydajnością a szybkością wprowadzania zmian
2. Obniż TTL przed zmianami: zmniejsz TTL 24-48 godzin przed aktualizacjami DNS
3. Monitoruj propagację: używaj narzędzi do sprawdzania globalnego rozwiązywania DNS
4. Dokumentuj działanie pamięci podręcznej: poznaj warstwy buforowania swojej infrastruktury
5. Używaj DNSSEC: chroń się przed zatruciem pamięci podręcznej
6. Testuj dokładnie: sprawdź, czy zmiany DNS działają zgodnie z oczekiwaniami, zanim uznasz je za zakończone
7. Edukuj użytkowników: w razie potrzeby przekazuj jasne instrukcje czyszczenia pamięci podręcznej
Zaawansowane koncepcje buforowania
Wstępne pobieranie
Przeglądarki i resolvery mogą wstępnie pobierać DNS dla linków znajdujących się na stronie:
<!-- Hint to browser -->
<link rel="dns-prefetch" href="//cdn.example.com">
Rozgrzewanie pamięci podręcznej
Load balancery i sieci CDN mogą wstępnie wypełniać pamięci podręczne dla krytycznych rekordów.
Anycast i buforowanie
DNS anycast kieruje zapytania do najbliższego serwera, tworząc rozproszone geograficznie pamięci podręczne dla optymalnej wydajności.
Buforowanie DNS ma fundamentalne znaczenie dla wydajności internetu. Zrozumienie i prawidłowe konfigurowanie TTL zapewnia sprawne propagowanie zmian DNS przy jednoczesnym utrzymaniu szybkiego rozwiązywania nazw.