Jak wyczyścić pamięć podręczną DNS w Windows, macOS i Linuksie
Aby wyczyścić DNS, uruchom ipconfig /flushdns w Windows, sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder w macOS, albo resolvectl flush-caches w Linuksie z systemd-resolved. Dokładne polecenie zależy od systemu operacyjnego, a w Linuksie także od tego, jaki resolver jest w nim uruchomiony.
Czym jest pamięć podręczna DNS i dlaczego czyszczenie pomaga
Za każdym razem, gdy urządzenie rozwiązuje nazwę hosta na adres IP, zapisuje odpowiedź na jakiś czas, zamiast pytać ponownie przy następnym żądaniu. Ta zapisana odpowiedź mieszka w pamięci podręcznej DNS systemu operacyjnego i jest odrębna od pamięci podręcznej DNS, którą Twoja przeglądarka trzyma na wierzchu. To cache'owanie sprawia, że przeglądanie jest szybkie: bez niego każde żądanie o każdy zasób na stronie wywoływałoby świeże zapytanie.
Pamięć podręczna staje się problemem w chwili, gdy rekord się zmienia. Jeśli strona przeniosła się pod nowy adres IP, zmieniła dostawcę hostingu albo zaktualizowała rekord CNAME, Twoja maszyna może dalej odpowiadać starą wartością, dopóki zapisany wpis nie wygaśnie. Resolvery cache'ują też odpowiedzi negatywne, czyli "ta nazwa nie istnieje", przez okres ustalony rekordem SOA domeny, więc nazwa, która właśnie zaczęła działać, wciąż może lokalnie zawodzić przez kilka minut. Wyczyszczenie pamięci podręcznej wymusza, żeby następne zapytanie wyszło świeże, zamiast korzystać z tego, co było zapisane.
Jak wyczyścić DNS w Windows
- Otwórz Wiersz polecenia. Własne kroki rozwiązywania problemów Microsoftu używają podniesionej sesji (kliknij prawym przyciskiem, Uruchom jako administrator) dla poleceń DNS, więc zacznij od tego, jeśli zwykła wersja zachowuje się dziwnie.
- Uruchom
ipconfig /flushdns. Zgodnie z dokumentacją Microsoft Learn dla tego polecenia, "wyczyszcza i resetuje zawartość pamięci podręcznej resolvera klienta DNS", odrzucając zarówno wpisy negatywne, jak i wszystko zapisane dynamicznie. - Potwierdź, że zadziałało, poleceniem
ipconfig /displaydns, które wypisuje wszystko obecnie znajdujące się w pamięci podręcznej resolvera. Zaraz po wyczyszczeniu powinno to zwrócić niemal pustą listę; przejdź na kilka stron i uruchom je ponownie, żeby zobaczyć, jak zapełniają się świeże wpisy.
Jeśli stary adres wciąż wraca, przyczyną mogą być same serwery DNS przydzielone przez DHCP, zapisane razem z dzierżawą. Zwolnienie i odnowienie karty sieciowej podchwytuje oba:
ipconfig /release
ipconfig /renew
Jak wyczyścić DNS w macOS
Polecenie zależy od tego, jak stara jest wersja macOS na maszynie, a użycie niewłaściwego dla nowoczesnego Maca po cichu nic nie robi.
- Yosemite 10.10.4 i każda wersja od tego czasu (obejmuje to wszystkie obecnie wspierane wydania macOS, w tym Sequoia, Sonoma, Ventura, Monterey i Big Sur):
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder. Pierwsze polecenie czyści pamięć podręczną Directory Service; drugie wysyła do mDNSResponder sygnał HUP, żeby się zrestartował i porzucił to, co trzymał. - Tylko Yosemite od 10.10 do 10.10.3 używał innego narzędzia:
sudo discoveryutil mdnsflushcache. - Mavericks, Mountain Lion i Lion: samo
sudo killall -HUP mDNSResponderwystarczało. - Snow Leopard (10.6 do 10.6.8): samo
sudo dscacheutil -flushcache, bez kroku killall.
Jeśli nie masz Maca na tyle starego, żeby poprzedzał aktualizację Yosemite z 2014 roku, użyj pierwszego polecenia. Obie części wymagają hasła Twojego konta, a polecenie po sukcesie nie wypisuje żadnego wyniku.
Jak wyczyścić DNS w Linuksie
Linux nie ma jednej pamięci podręcznej DNS do wyczyszczenia, bo różne dystrybucje wysyłają różne stosy resolverów. Sprawdź, który z nich jest aktywny, zanim wybierzesz polecenie.
Uruchom najpierw resolvectl status. Jeśli zwraca ustawienia DNS dla poszczególnych interfejsów, maszyna działa na systemd-resolved, co jest domyślne w obecnym Ubuntu, Fedorze i większości innych nowoczesnych dystrybucji. Jeśli polecenie nie zostanie znalezione, sprawdź zamiast tego dwie inne popularne usługi: systemctl status nscd albo systemctl status dnsmasq (a jeśli systemd nie jest używany, poszukaj procesu poleceniem ps aux | grep -E 'nscd|dnsmasq').
- systemd-resolved (systemd 239 i nowszy):
resolvectl flush-caches. Podręcznik systemd opisuje to jako czyszczenie "wszystkich pamięci podręcznych rekordów zasobów DNS, jakie usługa utrzymuje lokalnie". Możesz sprawdzić, czy zadziałało, poleceniemresolvectl statistics, które podaje bieżący rozmiar pamięci podręcznej. - systemd-resolved na starszym systemd (sprzed zmiany nazwy w wersji 239):
sudo systemd-resolve --flush-caches. Niektóre obecne dystrybucje wciąż trzymają to jako alias kompatybilności nawet po dodaniuresolvectl, więc warto tego spróbować, jeśliresolvectlbrakuje, asystemd-resolvenie. - nscd:
sudo systemctl restart nscdrestartuje całą usługę i przy okazji czyści jej pamięć podręczną. Żeby unieważnić tylko pamięć podręczną hostów bez restartu, na dystrybucjach udostępniających tę flagę działasudo nscd -i hosts. - dnsmasq: wysłanie mu sygnału HUP czyści pamięć podręczną bez zatrzymywania usługi, zgodnie z jego własną stroną man:
sudo killall -HUP dnsmasq. Zwykłesudo systemctl restart dnsmasqteż działa i dodatkowo przeładowuje konfigurację.
Jak wyczyścić własną pamięć podręczną DNS przeglądarki
Chrome trzyma własną pamięć podręczną DNS, odrębną od systemu operacyjnego, więc samo wyczyszczenie pamięci podręcznej systemu często nie wystarcza, żeby zmiana zaczęła być widoczna. Otwórz chrome://net-internals/#dns i kliknij Clear host cache. Przeglądarki oparte na Chromium (Edge, Brave, Opera i inne) udostępniają tę samą stronę pod tym samym adresem.
To wciąż może nie być cała naprawa. Chrome trzyma też pulę już otwartych połączeń do starego adresu IP i może ponownie użyć jednego z nich zamiast nawiązywać nowe połączenie, nawet gdy pamięć podręczna DNS jest pusta. Otwórz chrome://net-internals/#sockets i użyj Flush socket pools, żeby zamknąć również te połączenia. Jeśli strona wciąż ładuje starą wersję po obu krokach, spróbuj okna prywatnego, bo zaczyna ono bez żadnych zapisanych połączeń.
Dlaczego stary adres wciąż się pojawia po wyczyszczeniu
Jeśli wyczyściłeś każdą pamięć podręczną na maszynie, a przeglądarka wciąż pokazuje stary serwer, opóźnienie zwykle nie jest już lokalne. Domowy router zwykle prowadzi własną, małą pamięć podręczną DNS dla każdego urządzenia w sieci, a jego restart czyści tę warstwę. Poza routerem resolver Twojego dostawcy internetu też trzyma własną pamięć podręczną, a Ty nie masz bezpośredniego sposobu, żeby ją wyczyścić; czyści się sama, gdy upłynie TTL zapisanego wpisu.
TTL, czyli wartość time-to-live na rekordzie DNS, jest prawdziwym ograniczeniem tego, jak szybko może rozprzestrzenić się zmiana. Każdy resolver między Tobą a autorytatywnym serwerem nazw ma prawo trzymać odpowiedź przez dokładnie tyle sekund, zanim będzie musiał zapytać ponownie. Rekord z jednogodzinnym TTL może zgodnie z zasadami wciąż zwracać niektórym odwiedzającym stary adres nawet po niemal godzinie od zmiany, niezależnie od tego, co wyczyścisz na własnej maszynie. Zobacz jak działa propagacja DNS, żeby dowiedzieć się, co kontroluje ten harmonogram i jak sprawdzić, czy rekord skończył się aktualizować wszędzie.
Najczęściej zadawane pytania
Czy muszę zrestartować komputer po wyczyszczeniu DNS?
Nie. Każde powyższe polecenie działa natychmiast i czyści tylko pamięć podręczną w RAM; restart nie jest częścią tego procesu ani w Windows, ani w macOS, ani w Linuksie.
Dlaczego wyczyszczenie DNS nie rozwiązało problemu?
Trzy rzeczy zwykle wciąż trzymają starą odpowiedź: własna pamięć podręczna przeglądarki (wyczyść ją osobno pod chrome://net-internals/#dns), router obsługujący Twoją sieć, albo TTL rekordu, który po prostu jeszcze nie wygasł nigdzie indziej w internecie. Jeśli zapytanie w ogóle zawodzi albo przekracza limit czasu, zamiast zwrócić nieaktualną odpowiedź, to wskazuje raczej na serwer DNS, który nie odpowiada, niż na problem z cache'owaniem.
Jak wyczyścić DNS na telefonie?
Ani iOS, ani Android nie udostępnia ręcznego polecenia czyszczenia DNS. Włączenie i wyłączenie trybu samolotowego albo przełączenie z Wi-Fi na dane komórkowe i z powrotem zmusza urządzenie do porzucenia zapisanego stanu DNS i ponownego rozwiązania nazw przy następnym żądaniu.
Czy wyczyszczenie DNS naprawia wolne ładowanie stron?
Rzadko samo w sobie. Uszkodzona albo zbyt duża lokalna pamięć podręczna może dodać niewielkie opóźnienie, ale konsekwentnie wolne zapytania częściej są spowodowane przez sam resolver. Zobacz dlaczego zapytania DNS są wolne, żeby poznać bardziej prawdopodobne przyczyny i jak je sprawdzić.
Jaka jest różnica między wyczyszczeniem DNS a wyczyszczeniem pamięci podręcznej przeglądarki?
Pamięć podręczna przeglądarki przechowuje treść stron: HTML, CSS, obrazy i skrypty. Pamięć podręczna DNS przechowuje wyłącznie mapowanie nazwy hosta na adres IP, używane w pierwszej kolejności do znalezienia serwera. Wyczyszczenie jednej nie czyści drugiej, a nieaktualna strona może być spowodowana przez którąkolwiek z nich.
Jak potwierdzić, że czyszczenie zadziałało?
W Windows uruchom ipconfig /displaydns zaraz po wyczyszczeniu; powinno wrócić niemal puste. W Linuksie z systemd-resolved resolvectl statistics podaje bieżący rozmiar pamięci podręcznej. macOS nie ma odpowiednika polecenia do inspekcji, więc praktycznym sprawdzeniem jest ponowne wyszukanie domeny poleceniem dig example.com albo uruchomienie sprawdzenia spoza własnej sieci narzędziem takim jak zapytanie DNS, które pyta z wielu lokalizacji naraz, co też wyklucza, czy nieaktualna odpowiedź jest lokalna dla Ciebie, czy pochodzi z własnych serwerów nazw domeny.