We've all been there - you update DNS records, verify the changes on your nameserver with dig
, but client machines stubbornly keep resolving the old records. Even after reducing TTL to 10 minutes, waiting feels inefficient during critical deployments.
Multiple layers cache DNS records:
1. Browser DNS cache (Chrome: chrome://net-internals/#dns) 2. Operating system cache (Windows: DNS Client service) 3. Local recursive resolver (office DNS server) 4. ISP's resolver
When you can't restart the DNS server:
# Flush local OS cache (Windows)
ipconfig /flushdns
# macOS
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
# Linux
sudo systemd-resolve --flush-caches
For emergency testing before propagation completes:
# Edit /etc/hosts (Linux/macOS) or C:\Windows\System32\drivers\etc\hosts
192.0.2.1 example.com www.example.com
Modern browsers implement aggressive caching:
// Chrome DevTools console (force fresh DNS lookup)
chrome://net-internals/#dns
document.getElementById('dns-view-clear-cache').click()
Some networks block rapid DNS changes for security. Try these query variations:
dig @1.1.1.1 example.com +short
dig example.com A +norecurse
nslookup -type=soa example.com
When working with domain updates, we often encounter situations where our authoritative nameserver shows the correct records via dig
or nslookup
, but local office DNS caches stubbornly cling to old records. This typically happens when:
- The TTL (Time To Live) hasn't expired on cached records
- Intermediate resolvers (like office DNS servers) ignore lower TTL values
- Client machines have their own DNS caching mechanisms
1. Client-Side DNS Cache Flushing
For Windows machines, run in Command Prompt:
ipconfig /flushdns
For macOS/Linux:
sudo dscacheutil -flushcache # macOS
sudo systemd-resolve --flush-caches # Linux (systemd)
2. Force DNS Query with No-Cache Lookup
Use dig
to bypass local cache:
dig +nocmd +nocomments +nostats example.com @8.8.8.8
Or with nslookup
:
nslookup -d2 example.com 8.8.8.8
3. Temporary DNS Override via Hosts File
Edit /etc/hosts
(Unix) or C:\Windows\System32\drivers\etc\hosts
(Windows):
# Temporary override
192.0.2.1 example.com www.example.com
4. Force Different DNS Resolution Path
Change network settings to use public DNS temporarily:
# PowerShell (Windows):
Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses ("8.8.8.8","1.1.1.1")
# Linux:
nmcli con mod eth0 ipv4.dns "8.8.8.8 1.1.1.1"
nmcli con up eth0
5. DNS Query Manipulation
Add random subdomains to force fresh lookups:
# Bash example:
RAND=$RANDOM
dig test${RAND}.example.com
6. Browser-Specific Cache Busting
Chrome/Edge special address:
chrome://net-internals/#dns
7. Network Isolation Testing
Use tcpdump to verify actual DNS traffic:
sudo tcpdump -i eth0 -n port 53
- Always reduce TTL well in advance (24-48 hours) before making DNS changes
- Consider using API-driven DNS services for instant updates
- Document these procedures for your team's runbook