DNS Cache – cóż to za „zwierz”? :)

DNS Cache – cóż to za „zwierz”? :)

W ostatnim czasie kilka razy miałem okazję rozwiązywać problemy (lub brać udział w konsultacjach) związanych bezpośrednio lub pośrednio z rozwiązywaniem nazw. Mechanizmy związane z rozwiązywaniem nazw (m.in. DNS) wydaj się być proste i przejrzyste, jednak okazuje się, że często panują „miejskie legendy” i ogromne kłopoty z namierzeniem źródeł niepoprawnego/nieoczekiwanego działania usług.

Słowem wstępu rozwińmy kilka definicji, żeby uniknąć niedomówień i wątpliwości:

DNS (ang. Domain Name System) – System nazw domenowych lub jak kto woli system rozwiązywania nazw.

Strefa wyszukiwania do przodu (ang. Forward Lookup Zone) –  strefa DNS, która służy do rozwiązywania nazw DNS typu: mkrzanowicz.it na adresy IP: 185.38.248.202ForwardLookupStrefa wyszukiwania do tyłu (ang. Reverse Lookup Zone) – strefa DNS, która służy do rozwiązywania adresów IP na nazwy DNS. I tutaj uwaga, w zależności od tego czy mamy zarejestrowane rekordy PTR, czy nie (oraz ile mamy ich zarejestrowanych dla podanego adresu IP) wyniki mogą być nieoczekiwane. Posłużmy się przykładem mojego bloga:

ReverseLookupChcieliśmy się dowiedzieć co kryje się pod adresem IP: 185.38.248.202 i oczekiwaliśmy, że zwróci odpowiedź mkrzanowicz.it a zwrócił… nazwę serwera hostingującego… W moim przypadku nie ma z tym problemu – na pytanie, czy tak ma wyglądać Wasz wewnętrzny DNS musicie odpowiedzieć sobie sami, aczkolwiek cytując klasyka „nie wydaje mnie się” 🙂

Rekord A – Rekord/Wpis DNS wykorzystywany w strefach wyszukiwania do przodu, który w odpowiedzi zwraca 32-bitowy adres IPv4

Rekord AAAA – Rekord/Wpis DNS wykorzystywany w strefach wyszukiwania do przodu, który w odpowiedzi zwraca 128-bitowy adres IPv6

Rekord PTR – „Wskaźnik” na nazwę kanoniczną DNS. Wykorzystywany zazwyczaj w strefach wyszukiwania do tyłu. Po rozwiązaniu nazwy serwer DNS nie kontynuuje dalszego przeszukiwania w odróżnieniu od rekordów CNAME.

Rekord CNAME – Popularny „alias” DNS, czyli nazwa wskazująca na inną nazwę, gdzie serwer DNS próbuje rozwiązywać tą kolejną nazwę.

TTL (ang. Time To Life) – czas życia pakietu wykorzystywany w DNS oraz innych usługach sieciowych.

Plik Hosts – plik konfiguracyjny systemu Windows (%SYSTEMROOT%\System32\Drivers\etc\Hosts) służacy do sztywnego mapowania nazw domenowych na adresy IP

OK. pora przejść do konkretów 🙂

Rozprawmy się z jedną z pierwszych „miejskich legend” dotyczących kolejności rozwiązywania nazw w systemach Microsoft Windows w kontekście „miejsc”, do których sięga system próbując rozwiązać nazwy. Otóż panuje błędne przeświadczenie, że kolejność ta wygląda następująco:

  1. Lokalny Cache DNS systemu
  2. Plik Hosts
  3. Serwery DNS

Gdzie jest błąd? W punkcie 1. oraz 2. – Nie ma czegoś takiego jak wyższość cache’a nad plikiem hosts (jeśli już się upierać to „wyższość” jest odwrotna). Dlaczego? Ano dlatego, że plik hosts stanowi jakby podzbiór cache’a systemu. Mówiąc dokładnie jest ładowany do pamięci cache. Nie wierzycie? No to przeprowadźmy eksperyment:

  • Podejrzenie lokalnego Cache’a dla wybranej przypadkowej domeny:

DNSClientCache1

  • Zmiana adresu dla tej domeny w pliku Hosts:

HostsMOD

  • Efekt podejrzany w Cache’u:

DNSClientCache2

Jak widać moje słowa się potwierdzają -> Zawartość pliku Hosts zostaje załadowana do Cache’a DNS w systemie Windows. Należy o tym pamiętać i zwrócić uwagę na 2 jakże istotne fakty:

  1. Dowolna zmiana w pliku hosts powoduje całkowite wyczyszczenie cache’a DNS klienta.
  2. Jeśli klient miał wcześniej zcache’owane dane o innej wartości dla danej nazwy, to zostaną one utracone z uwagi na punkt powyżej.

Warto przy tym zwrócić uwagę, że dowolna zmiana w pliku hosts dotycząca domen microsoft.com lub związanych z update.microsoft nie będzie „działać” – twórcy systemu zaszyli głęboko w systemie zabezpieczenia uniemożliwiające zmianę tych adresów za pomocą pliku hosts.

Natomiast jak wygląda kwestia Cache’a serwera DNS w systemie Windows?

Tutaj pojawia się kolejna „miejska legenda” dotycząca faktu, jakoby można było wyczyścić tylko cały cache serwera DNS a nie poszczególne rekordy. To oczywiście kolejny mit, z którym się rozprawimy 🙂

Jak go podejrzeć? Z poziomu GUI należy uruchomić konsolkę do zarządzania usługą DNS i wybrać widok zaawansowany:

DNSVIewWtedy pojawia się folder „Cached Lookup”, w którym możemy podejrzeć rekordy zcache’owane na serwerze DNS np:

DNSServerCacheI poszczególne mogą zostać usunięte (Prawy przycisk Myszy -> „Delete”). Oczywiście cache można podejrzeć również użyciem Powershell’a:

DNSServerCachePSNastępne mity dotyczą długości przechowywania danych w Cache’u DNS. Ogólna zasada jest taka, że dane w Cache’u są przechowywane aż do upłynięcia TTL dla danego rekordu DNS, ale… Nie dłużej niż ustawiony czas w konfiguracji serwera, który domyślnie wynosi 1 dzień dla poprawnych odpowiedzi oraz 15 minut dla błędnych odpowiedzi:

DNSServerCacheDuration

Kolejny mit dotyczy możliwości wyłączenia Cache’a. Pojawia się pytanie, czy cache DNS można wyłączyć? Część publikacji odpowiada na to pytanie „nie można” co jest bzdurą. Część natomiast kieruje użytkowników do zmian wykonywanych w rejestrze, które albo w ogóle nie działają… albo co najwyżej zmniejszają interwał czasu dla Cache’a DNS.  Aby „wyłączyć” cache’owanie DNS po stronie klienckiej wystarczy wykonać polecenia:

StopDNSCache

I cieszyć się brakiem cache’owania danych DNS. Co jednak ważne – mimo wyłączenia cache’a DNS wpisy z pliku Hosts są nadal aktualne i wykorzystywane przez system! 🙂

 Tak więc przy debugowaniu problemów z rozwiązywaniem nazw pamiętajcie żeby zweryfikować:

  • Zawartość Cache’a Serwera DNS + ewentualne wyczyszczenie błędnych danych
  • Wartość rekordu otrzymywaną od serwera autorytatywnego
  • Zawartość lokalnego cache’a DNS + ewentualne jego wyczyszczenie
  • Wartość TTL dla rekordu – im większa tym dłużej trzeba będzie czekać na odświeżenie jeśli korzystacie z długiego cache’a po stronie serwera DNS oraz długiego cache’a po stronie klienta.

Mam nadzieję, że pomoże to w odpowiedzi na najczęstsze pytania dotyczące rozwiązywania nazw i pozwoli szybko wyłapać miejsca, gdzie rodzą się „nieoczekiwane wyniki”.

Enjoy 🙂

P.S. Temat rozwiązywania nazw NETBios został w tym artykule pominięty

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *