- How do I clear the DNS cache?
- 17 Answers 17
- Ubuntu 17.04 and higher (18.04)
- Ubuntu 22.04 and higher
- For 18.04 and higher
- For 11.10 and below
- 12.04
- By default, DNS is not cached in Ubuntu < 17.04 (but it might be cached in the network or application)
- How to flush DNS on Ubuntu and CentOS
- Flush DNS on Ubuntu Machine
- First Method: Flush DNS by using systemd-resolve
- Second Method: Flush Cache using the dns-clean command
- Flush DNS on CentOS Machine
How do I clear the DNS cache?
I just updated the DNS record ( ns1 , ns2 , ns3.myhostingcompany.com ) for a site I’ve got hosted, but I still get the domain registrar parking page. I’d like to see if the problem is Ubuntu’s cached DNS records. Is there a way to clear Ubuntu’s DNS cache? (if such a thing exists?)
Also, check /etc/hosts . I’ve just been sure that the old IP address of my domain was being cached, but only strace ping example.com revealed that I forgot to remove the /etc/hosts record which I added a time ago because of lacking patience for DNS propagation.
a lot of these answers suggest caching is disabled by default, but they also refer older versions. It certainly appears to be on by default in my machine (18.04) and various answers below do show you how to flush it, just scroll down
17 Answers 17
Ubuntu 17.04 and higher (18.04)
From Ubuntu 17.04 and onwards, systemd-resolve is used for DNS. You can flush systemd’s caches like so:
sudo systemd-resolve --flush-caches
Ubuntu 22.04 and higher
sudo resolvectl flush-caches
This didn’t work for me on 16.04 LTS — but it was useful to see yet another way it might have been cacheing: sudo systemd-resolve —statistics
Any idea why it displays this error on Ubuntu 19.10? Failed to flush caches: Unit dbus-org.freedesktop.resolve1.service not found.
For ubuntu 22.04, we need to use: sudo resolvectl flush-caches . See answer from @codezalot in systemd-resolve-command-not-found-in-ubuntu-22-04-desktop.
For 18.04 and higher
For 11.10 and below
Ubuntu doesn’t cache dns records by default so unless you’ve installed a dns cache there isn’t anything to clear.
DNS records are likely cached by your provider’s DNS servers so if you want to check if the DNS changes you made were successful you can interrogate a DNS server from your domain hosting service with dig:
dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server
It you want Ubuntu to start caching dns I recommend installing pdnsd together with resolvconf . nscd is buggy and not advisable.
Mike Shultz’s answer definitely doesn’t work on Ubuntu 20. You get this error message: sd_bus_open_system: No such file or directory
So, For 10 years later. If I disabled systemd-resolve for ubuntu and debian. Then there is no DNS cache, Each nslookup will request DNS server?
12.04
Ubuntu 12.04 uses dnsmasq which is built into network-manager , but it doesn’t cache dns so there is no need to flush it. Here is a sample line from my syslog to prove that point:
dnsmasq[2980]: started, version 2.59 cache disabled
There is also no need for any configuration of dnsmasq . If you are running with stock settings it won’t be caching dns, as for it to do so you have to explicitly set it up as this Ubuntu article describes.
If you wanted to refresh your settings you could disable and then enable networking or run
sudo service network-manager restart
This restarts dnsmasq because it is built in to network-manager ; check your syslog for the evidence for this.
If you are using a wired connection with dhcp network manager will be taking the settings direct from your router and your connection will be automatically established when you login to Ubuntu. You could check that the settings are correct in your router if you can access it via the web interface, and perhaps reboot it if necessary. If it is a general problem with dns, you could try using Google dns instead of your isp dns, and more information on that is detailed here.
Note that Ubuntu uses systemd-resolve from 17.04 and onwards so this answer doesn’t apply anymore to recent Ubuntu versions. See «flush DNS cache in Ubuntu 17.04 and higher (18.04)»
By default, DNS is not cached in Ubuntu < 17.04 (but it might be cached in the network or application)
To confirm one way or the other whether dnsmasq is caching, run ps ax | grep dnsmasq and look at the running command. Here’s a breakdown of my default 13.10 machine:
/usr/sbin/dnsmasq \ --no-resolv \ --keep-in-foreground \ --no-hosts \ --bind-interfaces \ --pid-file=/var/run/NetworkManager/dnsmasq.pid \ --listen-address=127.0.1.1 \ --conf-file=/var/run/NetworkManager/dnsmasq.conf \ --cache-size=0 \ --proxy-dnssec \ --enable-dbus=org.freedesktop.NetworkManager.dnsmasq \ --conf-dir=/etc/NetworkManager/dnsmasq.d
/etc/NetworkManager/dnsmasq.d is empty by default. So there aren’t any overrides coming in there and just to check —cache-size=0 means what we think it means (instead of an unlimited cache), man dnsmasq shows:
-c, --cache-size= Set the size of dnsmasq's cache. The default is 150 names. Setting the cache size to zero disables caching.
So while dnsmasq can cache DNS, it isn’t caching out the box. You can check your machine and various configuration directories to check you’re on the same page.
If you are seeing cache issues, this is likely happening in one of a few places:
- Upstream from your computer. Some routers cache. Many corporate networks will cache DNS. Many ISP-run DNS servers and will use their own caches. The only way to guarantee against a network cache is to use a cache you can manually refresh. This is why I like OpenDNS.
- In the client application (notably browsers). Applications can do all sorts of their own caching that Ubuntu has no effect on. How Firefox caches DNS. How to clear Chrome’s DNS cache. Other browsers (and applications) might have their own mechanisms.
- I’m scraping the barrel here but perhaps you’ve installed a non-standard DNS server in Ubuntu instead of turning caching on in dnsmasq . There are many: nscd , DJBDNS dnscache (aka TinyDNS), pdns , pdnsd , Bind9 (and its variants), and more I can’t even remember. These will probably be evidenced in /etc/resolv.conf (with config in /etc/resolvconf/` to autogen that file). The following shows an locally intercepted DNS query:
$ nslookup askubuntu.com Server: 127.0.1.1 Address: 127.0.1.1#53 Non-authoritative answer: Name: askubuntu.com Address: 198.252.206.24
If you’re not hitting 8.8.8.8 (or whatever you expect your DNS server to be), check what you are hitting instead. In my case I can see this is just dnsmasq set up to mirror DNS queries back for LXC, but in your case it might be doing bad cachey things. If you have done of the listed caches, the process for clearing each varies:
sudo /etc/init.d/nscd reload # nscd sudo /etc/init.d/named restart # bind9
How to flush DNS on Ubuntu and CentOS
D NS (Domain Name Service) is responsible for mapping a website name into the respective IP. Click here to know how to install and configure DNS on Ubuntu.
Therefore, DNS is considered being one of the critical parts of your connection to the internet. To access the frequently visited websites faster, our machines keep track of DNS records, or in other words, it caches it.
What if a website changed its address? It may cause an IP conflict. So, to avoid such a problem, your machine DNS cache should be flushed regularly. Also, clearing your DNS cache will help you removing unneeded data occupying your system and solve some technical problems related to the famous “outdated entries” error.
In this tutorial, we will show you how to flush your DNS on Ubuntu and CentOS operating systems in easy and clear steps.
Flush DNS on Ubuntu Machine
First Method: Flush DNS by using systemd-resolve
Step 1. Before flushing your DNS, you can check DNS statistics using the next command.
sudo systemd-resolve --statistics
The output should be something like that:
As per the previous screenshot, the current cache size is 6.
Step 2. Flush DNS using systemd-resolve. Since the systemd-resolve daemon is almost running on all Ubuntu systems, then we can use it to clear our DNS cache using the next command.
sudo systemd-resolve --flush-caches
Step 3. Re-run the cache statistics command.
sudo systemd-resolve --statistics
Cache Statistics After Flush
As you can see from the above screenshot, the current cache size parameter is Zero, and that is what we need.
Second Method: Flush Cache using the dns-clean command
Another method to clear our DNS cache is using the next command:
sudo /etc/init.d/dns-clean start
Third Method: Flush Cache for some Ubuntu DNS Services
Next, we will show you some commands for clearing DNS cache for some various DNS services:
sudo /etc/init.d/nscd restart
sudo /etc/init.d/named restart
sudo /etc/init.d/dnsmasq restart
sudo rndc flushname test.com
Flush DNS on CentOS Machine
To clear your system DNS cache on a machine running CentOS platform, you can use the following command.
systemctl restart dnsmasq.service
The output should be something like that:
That’s all you need to know on how to flush DNS on Ubuntu and CentOS. For any further questions, leave us a comment, and we will be happy helping you.