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.
Dość sporo dystrybucji Linuksa przechodzi na systemd, dla którego będzie wyglądało to bodaj tak:
systemctl reload nscd