Skip to content
RU
← All articles

How to Flush DNS Cache: Windows, Mac, Linux, Browsers

In short. There are at least five DNS caches between you and an answer, and flushing one leaves the other four untouched. That is why "I flushed DNS and still see the old site" is the normal outcome rather than a puzzle — the copy that is actually serving you is usually one you cannot flush at all.

The five caches, and which ones you control

A name is resolved through a chain, and every link may keep its own copy with its own timer. Flushing is a per-link operation.

CacheWho controls itCan you flush it?Typical lifetime
Browser's own resolver cacheYouYesMinutes, browser-specific
Operating system resolverYouYesFollows the record's TTL
Router on your networkYou, by restarting itUsuallyFollows TTL, sometimes longer
Recursive resolver (ISP or public)Not youNoStrictly the record's TTL
Authoritative answer itselfThe domain ownerNot a cache — the sourceWhatever TTL is published

The fourth row is the one that matters and the one every guide omits. The recursive resolver holds the copy that most of your traffic actually uses, it belongs to your provider or to a public service, and no command on your machine reaches it. It will re-ask when the TTL it was given expires and not one second sooner.

Flushing your own caches changes what you see. It says nothing about what your visitors see, and it cannot accelerate a DNS change for anyone else. If you are waiting for a record to take effect worldwide, flushing is not a lever — it is a way to check on your own machine, and nothing more.

A chain of five caches between a browser and an authoritative source, with only the first three marked as controllable
Five links, each with its own copy and its own timer. You can clear the first three; the one carrying most traffic is not yours.

Before flushing: look at what is actually cached

Flushing destroys the evidence. Reading it first tells you whether there is anything to fix and how long it will last.

# Ask a public resolver WITHOUT making it fetch a fresh answer —
# this shows the cached copy and its remaining lifetime
dig example.com A @1.1.1.1 +norecurse +noall +answer
# example.com.  212  IN  A  203.0.113.10
#               ^ seconds until this resolver re-asks

# Compare against the source of truth, bypassing every cache
dig +short example.com A @$(dig +short NS example.com | head -1)

Three readings and three conclusions. If the cached value matches the authoritative one, nothing is stale and flushing achieves nothing. If they differ and the number is counting down, you know exactly how long the difference lasts. If the authoritative servers disagree with each other, no amount of flushing will help — that is a zone problem, covered in the resolver disagreement guide.

Flushing each layer

Windows

ipconfig /flushdns
ipconfig /displaydns | more     # inspect before flushing

macOS

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

Linux

# systemd-resolved (most modern distributions)
resolvectl statistics            # cache size and hit rate, before
sudo resolvectl flush-caches

# dnsmasq
sudo systemctl restart dnsmasq

# nscd (older systems)
sudo systemctl restart nscd

Many Linux systems run no DNS cache at all, in which case there is nothing to flush and every lookup already goes upstream. resolvectl statistics tells you whether a cache exists before you go looking for a command to clear it.

Browsers keep their own, separately

This is the most common reason a flush appears not to work. Chromium browsers maintain an internal host cache that the operating system command does not touch, plus a pool of open sockets to addresses already resolved.

# Chrome, Edge, Opera, Brave — both of these, in this order
chrome://net-internals/#dns      -> Clear host cache
chrome://net-internals/#sockets  -> Flush socket pools

Clearing the host cache while a connection to the old address is still pooled leaves the browser using that connection. Flushing sockets is what actually forces a new one. Firefox has an equivalent under about:networking#dns; Safari relies on the system cache and a restart.

The router

Most home routers cache DNS for every device behind them, which is why one machine can be flushed and still get the old answer. A restart clears it. The signature is that every device on the network agrees on a stale value while a phone on mobile data sees the new one.

An operating system cache being cleared while a separate browser cache and socket pool retain the old address
The system command does not reach the browser's own cache or its open connections, which is why the flush so often appears to do nothing.

Why you still see the old site after flushing everything

Work down this list; each item is a different cache and a different owner.

  1. Browser socket pool. An open connection to the old address is reused regardless of DNS. Flush sockets, or restart the browser.
  2. Router cache. Restart it, or test from a device on a different network.
  3. Your recursive resolver still holds it. You cannot flush this. Confirm with +norecurse and read the remaining TTL — that number is your answer.
  4. The record has not actually changed. Ask an authoritative nameserver directly before blaming caching.
  5. Something else caches the destination. A CDN or reverse proxy serving old content is not a DNS problem at all, and no DNS flush will move it.

Point five catches people regularly. If DNS now resolves correctly and the page is still old, DNS is finished doing its job — the stale copy is in an HTTP cache. The header checker shows cache headers such as age and x-cache, which distinguishes the two in one request.

Negative answers are cached too

A "this name does not exist" answer is cached like any other, and its lifetime comes from the zone's SOA record rather than from the record you just created. Publish a name that previously did not exist and resolvers which asked during the gap will keep saying it does not exist for the duration of that negative TTL.

# The last number in the SOA is the negative caching TTL
dig +short SOA example.com
# ns1.example.com. hostmaster.example.com. 2026082301 7200 3600 1209600 3600
#                                                                        ^ negative TTL

This is why a newly added subdomain sometimes appears instantly for one person and not for another: the second person's resolver asked a minute too early and is honouring the answer it was given.

What flushing is actually for

Used correctly it is a diagnostic instrument, and a good one. It answers exactly one question: is the thing I am seeing my own stale copy?

SituationDoes flushing help?What actually resolves it
You changed a record and want to verify itYesFlush, then re-query
You want visitors to see the change soonerNoNothing — their resolvers honour the old TTL
Site loads for colleagues, not for youOftenFlush all your layers, including the browser
You migrated and traffic still hits the old serverNoWait out the previously published TTL
Page content is stale but the address is rightNoPurge the HTTP or CDN cache instead
A newly created name says it does not existLocally onlyWait out the negative TTL from the SOA

Lower the TTL before a migration, never during one. Resolvers honour the lifetime they were given when they cached the record, so a value lowered after the change applies to the next change and does nothing for this one.

A timeline where a TTL is lowered ahead of a planned change, shortening the window during which stale copies persist
Lowering the TTL only affects future caching. Done ahead of a migration it shortens the window; done during one it changes nothing.

Checking without flushing at all

If the question is "has my change taken effect", you do not need to flush anything — you need to look at resolvers other than your own.

The propagation check queries resolvers in different regions and shows what each currently returns, which is the honest version of the question people are really asking. The DNS lookup reads records and their TTLs from outside your network, so your own caches cannot skew the result.

For records that must not change without you knowing — the address behind your main hostname, MX, the NS set — a single lookup only proves the value was right when you looked. Scheduled DNS monitoring records the answer over time and alerts on change, which catches an unauthorised edit or a failed zone transfer in minutes.

Several regional resolvers each reporting an answer, some already updated and some still holding the previous value
The real question is what other resolvers return. Flushing your own answers a much smaller question.

Frequently asked questions

I flushed DNS and nothing changed. Why?

Most likely the browser's own cache or a pooled connection, then the router, then your recursive resolver — which you cannot flush and which will hold the old answer until the TTL expires. Check the remaining TTL with +norecurse to see how long that is.

Does flushing speed up propagation for my visitors?

No. It affects only the machine you run it on. Every other resolver keeps its copy for the TTL it was given, and there is no mechanism to invalidate that remotely.

How long until a DNS change is visible everywhere?

At most the TTL that was published before the change. That is the number resolvers were handed when they cached the old value, which is why lowering the TTL afterwards does not help.

Do I need to restart my router?

If every device on your network sees the old value while a phone on mobile data sees the new one, yes — that pattern points squarely at the router's cache.

Is flushing DNS safe?

Yes. It discards cached answers, so the next lookups go upstream and are marginally slower until the cache refills. Nothing is lost.

The address is correct but the page is still old.

Then DNS has finished its job and something is caching the content: a CDN, a reverse proxy or the browser's HTTP cache. Look at the response headers rather than at DNS — an age or x-cache header names the culprit.

Checklist

  • Read the cached value and its remaining TTL before flushing anything.
  • Flush the browser's host cache and its socket pools, not just the OS.
  • Restart the router when every device on the network agrees on a stale value.
  • Accept that the recursive resolver is not yours to flush.
  • Ask an authoritative nameserver to confirm the record actually changed.
  • Check the SOA negative TTL when a newly created name reports as missing.
  • Distinguish a stale address from stale content by reading cache headers.
  • Lower TTLs before a migration, not during it.
  • Use a propagation check rather than flushing to answer "has it taken effect".
  • Monitor records that must not change silently.

Check your website right now

Check your site's DNS →
More articles: DNS
DNS
Best Public DNS Servers 2026: Speed, Privacy and Filtering
21.07.2026 · 846 views
DNS
MX Records for Email: Step-by-Step Setup Guide
15.04.2026 · 765 views
DNS
DNS Not Resolving: 8 Causes and How to Fix
15.04.2026 · 762 views
DNS
DNS TTL Guide: Optimal Values for Every Record Type
16.03.2026 · 688 views