Přejít na hlavní obsah

Návody / Opravte to: návody na chyby, se kterými se lidé skutečně setkávají

Jak vyprázdnit DNS cache na Windows, macOS a Linuxu

Chcete-li vyprázdnit DNS, spusťte ipconfig /flushdns na Windows, sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder na macOS, nebo resolvectl flush-caches na Linuxu se systemd-resolved. Přesný příkaz závisí na vašem operačním systému a na Linuxu na tom, jaký resolver běží.

Co je DNS cache a proč vyprázdnění pomáhá

Pokaždé, když zařízení přeloží název hostitele na IP adresu, uloží si odpověď na nějakou dobu místo toho, aby se ptalo znovu při dalším požadavku. Tato uložená odpověď žije v DNS cache operačního systému, a je oddělená od DNS cache, kterou nad ní drží váš prohlížeč. Cachování je to, co dělá prohlížení rychlým: bez něj by každý požadavek na každý prvek stránky vyvolal nové vyhledání.

Cache se stane problémem ve chvíli, kdy se záznam změní. Pokud se web přesunul na novou IP adresu, změnil poskytovatele hostingu, nebo aktualizoval CNAME, váš počítač může dál odpovídat starou hodnotou, dokud uložený záznam nevyprší. Resolvery cachují i negativní odpovědi, tedy "tento název neexistuje", na dobu danou záznamem SOA domény, takže název, který právě začal fungovat, může lokálně ještě několik minut selhávat. Vyprázdnění cache donutí další vyhledání jít ven čerstvé místo použití toho, co bylo uložené.

Jak vyprázdnit DNS na Windows

  1. Otevřete příkazový řádek. Vlastní kroky řešení potíží od Microsoftu používají pro příkazy DNS příkazový řádek se zvýšenými oprávněními (klikněte pravým tlačítkem, Spustit jako správce), takže pokud se běžná verze chová divně, začněte tam.
  2. Spusťte ipconfig /flushdns. Podle dokumentace Microsoft Learn k tomuto příkazu "vyprázdní a resetuje obsah cache resolveru DNS klienta", čímž zahodí jak negativní položky, tak vše uložené dynamicky.
  3. Potvrďte, že to zabralo, příkazem ipconfig /displaydns, který vypíše vše aktuálně v cache resolveru. Hned po vyprázdnění by měl vrátit téměř prázdný seznam; projděte pár webů a spusťte ho znovu, abyste viděli, jak se doplňují čerstvé položky.

Pokud se stará adresa pořád vrací, mohou být uložené i samotné servery DNS přidělené DHCP, spolu s zapůjčením adresy. Uvolnění a obnovení adaptéru vyzvedne obojí:

ipconfig /release
ipconfig /renew

Jak vyprázdnit DNS na macOS

Příkaz závisí na tom, jak stará je verze macOS na daném počítači, a použití nesprávného na moderním Macu tiše nic neudělá.

  • Yosemite 10.10.4 a každá verze od té doby (to pokrývá všechna aktuálně podporovaná vydání macOS, včetně Sequoia, Sonoma, Ventura, Monterey a Big Sur): sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder. První příkaz vymaže cache Directory Service; druhý pošle mDNSResponder signál HUP, aby se restartoval a zahodil, co držel.
  • Jen Yosemite 10.10 až 10.10.3 používal jiný nástroj: sudo discoveryutil mdnsflushcache.
  • Mavericks, Mountain Lion a Lion: stačil samotný sudo killall -HUP mDNSResponder.
  • Snow Leopard (10.6 až 10.6.8): jen sudo dscacheutil -flushcache, bez kroku killall.

Pokud nemáte Mac dost starý na to, aby předcházel aktualizaci Yosemite z roku 2014, použijte první příkaz. Obě části vyžadují heslo vašeho účtu a příkaz při úspěchu nevypíše žádný výstup.

Jak vyprázdnit DNS na Linuxu

Linux nemá jedinou DNS cache k vyprázdnění, protože distribuce dodávají různé zásobníky resolverů. Než vyberete příkaz, zjistěte, který je aktivní.

Nejdřív spusťte resolvectl status. Pokud vrátí nastavení DNS pro jednotlivá rozhraní, počítač běží se systemd-resolved, což je výchozí na současném Ubuntu, Fedoře a většině dalších moderních distribucí. Pokud příkaz nenajde, zkontrolujte místo toho další dvě běžné služby: systemctl status nscd nebo systemctl status dnsmasq (nebo, pokud se nepoužívá systemd, hledejte proces příkazem ps aux | grep -E 'nscd|dnsmasq').

  • systemd-resolved (systemd 239 a novější): resolvectl flush-caches. Manuál systemd ho popisuje jako vyprázdnění "všech cache DNS resource record záznamů, které služba lokálně udržuje". Funkčnost si můžete ověřit příkazem resolvectl statistics, který nahlásí aktuální velikost cache.
  • systemd-resolved na starším systemd (před přejmenováním na verzi 239): sudo systemd-resolve --flush-caches. Některé současné distribuce tento alias kompatibility drží i po přidání resolvectl, takže ho stojí za to zkusit, pokud resolvectl chybí, ale systemd-resolve ne.
  • nscd: sudo systemctl restart nscd restartuje celou službu a spolu s tím vymaže její cache. Pro zneplatnění jen cache hostů bez restartu funguje na distribucích, které tento přepínač nabízejí, sudo nscd -i hosts.
  • dnsmasq: poslání signálu HUP vymaže cache bez shození služby, podle jeho vlastní manuálové stránky: sudo killall -HUP dnsmasq. Funguje i obyčejný sudo systemctl restart dnsmasq, který navíc znovu načte konfiguraci.

Jak vymazat vlastní DNS cache prohlížeče

Chrome má vlastní DNS cache, oddělenou od té systémové, takže samotné vyprázdnění cache OS často nestačí na to, aby se změna projevila. Otevřete chrome://net-internals/#dns a klikněte na Clear host cache. Prohlížeče založené na Chromiu (Edge, Brave, Opera a další) zpřístupňují stejnou stránku na stejné adrese.

Ani to nemusí být celá oprava. Chrome si navíc drží pool už otevřených spojení na starou IP adresu a může některé z nich znovu použít místo vytvoření nového spojení, i po vyprázdnění DNS cache. Otevřete chrome://net-internals/#sockets a použijte Flush socket pools, abyste zavřeli i tato. Pokud se web pořád načítá ve staré verzi po obou krocích, zkuste anonymní okno, protože to začíná úplně bez cachovaných spojení.

Proč se stará adresa objevuje i po vyprázdnění

Pokud jste vyprázdnili každou cache na počítači a prohlížeč pořád ukazuje starý server, zpoždění obvykle už není lokální. Domácí router typicky provozuje vlastní malou DNS cache pro každé zařízení v síti, a jeho restart tuto vrstvu vymaže. Za routerem má vlastní cache i resolver vašeho poskytovatele internetu, a tu přímo vyprázdnit nemůžete; vymaže se sama, jakmile vyprší TTL uloženého záznamu.

TTL, hodnota time-to-live na DNS záznamu, je skutečný limit toho, jak rychle se změna může rozšířit. Každý resolver mezi vámi a autoritativním jmenným serverem smí odpověď držet přesně tolik sekund, než je povinen se zeptat znovu. Záznam s hodinovým TTL může některým návštěvníkům legitimně stále vracet starou adresu skoro hodinu po změně, bez ohledu na to, co vyprázdníte na vlastním počítači. Viz jak funguje šíření DNS pro to, co tento časový rámec řídí a jak zkontrolovat, zda se záznam už aktualizoval všude.

Časté otázky

Musím po vyprázdnění DNS restartovat počítač?

Ne. Každý příkaz výše se projeví okamžitě a vyčistí jen cache v paměti; restart není součástí postupu na Windows, macOS ani Linuxu.

Proč vyprázdnění DNS problém nevyřešilo?

Běžně starou odpověď stále drží tři věci: vlastní cache prohlížeče (vyčistěte ji zvlášť na chrome://net-internals/#dns), router obsluhující vaši síť, nebo prostě TTL záznamu, který ještě nevypršel nikde jinde na internetu. Pokud vyhledání úplně selže nebo vyprší časový limit, místo aby vrátilo zastaralou odpověď, ukazuje to spíš na DNS server, který neodpovídá, než na problém s cachováním.

Jak vyprázdním DNS na telefonu?

Ani iOS, ani Android nezpřístupňuje příkaz pro ruční vyprázdnění DNS. Zapnutí a vypnutí režimu letadlo, nebo přepnutí z Wi-Fi na mobilní data a zpět, donutí zařízení zahodit uložený stav DNS a při dalším požadavku přeložit znovu.

Opraví vyprázdnění DNS pomalé načítání stránek?

Samo o sobě zřídka. Poškozená nebo příliš velká lokální cache může přidat malé zpoždění, ale trvale pomalá vyhledávání obvykle způsobuje spíš samotný resolver. Viz proč je vyhledávání DNS pomalé pro pravděpodobnější příčiny a jak je otestovat.

Jaký je rozdíl mezi vyprázdněním DNS a vymazáním cache prohlížeče?

Cache prohlížeče ukládá obsah stránky: HTML, CSS, obrázky a skripty. DNS cache ukládá jen mapování názvu hostitele na IP adresu, použité k tomu, aby se vůbec našel server. Vymazání jedné nevymaže druhou, a zastaralou stránku může způsobit kterákoli z nich.

Jak potvrdím, že vyprázdnění zabralo?

Na Windows spusťte hned po vyprázdnění ipconfig /displaydns; mělo by se vrátit téměř prázdné. Na Linuxu se systemd-resolved nahlásí aktuální velikost cache resolvectl statistics. macOS nemá žádný odpovídající kontrolní příkaz, takže praktická kontrola je znovu vyhledat doménu příkazem dig example.com nebo spustit kontrolu mimo vlastní síť nástrojem jako vyhledání DNS, který se ptá z víc lokalit najednou, což navíc rozliší, jestli je zastaralá odpověď lokální u vás, nebo přichází přímo od jmenných serverů domény.

Zkontrolovat hned

Spusťte bezplatnou kontrolu na svém webu - bez registrace.

Dns query

Sledovat trvale

Dostanete upozornění ve chvíli, kdy něco přestane fungovat: HostTracker kontroluje z více než 300 lokalit a upozorní vás e-mailem, SMS, přes Slack, Telegram a další.

Funkce HostTracker

Více v této sekci: Opravte to: návody na chyby, se kterými se lidé skutečně setkávají