Odświeżanie DNS w systemach Windows i Linux

Wiele systemów operacyjnych zapisuje dane z DNS ( adresy IP i nazwy hostów) lokalnie. Pozwala to ograniczyć ilość zapytań do serwerów DNS i znacząco przyspieszyć rozwiązywanie nazw. Czasami prowadzi to jednak do sytuacji, gdy przez jakiś czas maszyna ma nieaktualne informacje.

Przykładowy problem: zmieniliśmy adres IP serwera „X”. Stacje robocze mają zapisany jego stary adres, który oczywiście nie odpowiada i połączenie z serwerem „X” nie zostaje nawiązane.

Lokalne wpisy DNS czyszczone są m.in. przy restarcie systemu. Restart wielu maszyn (jedną z szybkich i wygodnych metod opisaliśmy wcześniej) może być niemożliwy np. ze względu na konieczność zachowania ciągłości produkcji. Czy da się wyczyścić lokalny DNS w bardziej delikatny sposób?

 

Automatyczne aktualizowanie wpisów DNS

Każdy wpis z DNS zapisany na komputerze ma swoją długość życia czyli tzw. „TTL”. W Windowsie domyślna wartość wynosi 1 dzień (dla kontrolerów domeny 1h) i po tym czasie czyści się sam tzn. serwer DNS jest odpytywany ponownie, a lokalnie zapisany rekord zostaje uaktualniony.

W Linuksie wszystko zależy od dystrybucji. Przeważnie wersje serwerowe wcale nie używają lokalnego „cache-u” i za każdym razem odpytują swój serwer DNS. W wersjach „workstation” bywa różnie. Generalnie w Linuksach istnieje usługa (deamon) NSCD, która może zapisywać lokalny cache DNS (i nie tylko). Domyślny TTL dla wpisów DNS będzie wynosił 30 minut, a dokładną konfigurację znajdziecie w pliku: /etc/nscd.con


Przeglądanie zapisanych rekordów

W Windowsie wszystkie lokalne wpisy DNS i ich TTL możecie podejrzeć poleceniem:

ipconfig /displaydns

W Linuksach nie istnieje wbudowane polecenie wyświetlające lokalne wpisy DNS, gdyż tak jak wspomniałem tam raczej nie korzysta się z lokalnego cache DNS. Jeśli używacie NSCD, to być może macie na to jakiś sposób. Szczerze zachęcam do podzielenia się tym trickiem w komentarzach 🙂

Czyszczenie ręczne (wymuszenie)

W windowsie lokalne wpisy DNS wyczyścimy poleceniem:

ipconfig /flushdns

Może to wykonać użytkownik bez praw admina.

W Linuksie na którym występuje deamon NSCD użyjemy polecenia:

/etc/init.d/nscd restart

Należy to zrobić na koncie root lub z użyciem SUDO.

Mam nadzieję, że udało mi się z grubsza wyjaśnić jak to jest z tym lokalnym cache DNS. Jeśli macie jakieś uwagi lub pytania do opisanych powyżej zagadnień piszcie śmiało.

Łukasz Skalikow

Obecnie Manager IT. Przez lata byłem Inżynierem systemów. Jestem entuzjastą i specem od vSphere, Windows serwer, GPO. Od zawsze byłem zwolennikiem wiersza poleceń i automatyzacji. Obecnie, ze względu na pracę, rodzinę i wyjazdy służbowe, dużo mniej udzielam się na blogu, ale mam nadzieję, że pośród kilkuset porad opublikowanych na spece.it, wiele osób znajdzie dla siebie coś przydatnego :)

Przeczytaj także...

1 Response

  1. flecht napisał(a):

    Dość sporo dystrybucji Linuksa przechodzi na systemd, dla którego będzie wyglądało to bodaj tak:
    systemctl reload nscd

Dodaj komentarz