Linux服务器如何清除dns缓存

说实话,我以前管Linux服务器DNS缓存清理这事儿,真是头疼。
不同系统用着完全不一样,搞混了轻则半天网打不开,重则客户投诉你把网络搞崩了。
所以记住这三种方法,得按具体情况来。

第一种是NSCD服务。
这玩意儿挺常见的,尤其是一些老系统。
你想想,DNS查询都攒在缓存里,不清理的话,改了IP地址人家还老想着用老IP,不是闹着玩嘛。
清理方法就是重启NSCD服务。
命令是 sudo systemctl restart nscd 或者老系统用 /etc/init.d/nscd restart。
我记得有回我重启NSCD,屏幕突然蓝屏了,吓我一跳。
后来查了半天,原来是某个脚本没写好,跟NSCD冲突了。
所以重启前最好先看看日志,journalctl -u nscd 这命令挺管用。

第二种是BIND。
这服务我接触得少点,但确实有企业用。
BIND自带个 rndc 工具,专门干清理缓存这活儿。
命令 sudo rndc flush 这下子所有缓存都清空了。
有意思的是,rndc 配置得不好,或者权限没对,你敲命令都没反应。
有回我碰见 rndc 连不上,查了半天发现是防火墙把端口给封了。
所以清理前得确认 rndc 能用,sudo rndc status 能看到状态就对了。

第三种是dnsmasq。
这服务小而美,适合小型站点或者开发环境。
清理方法简单粗暴,直接重启服务就行 sudo systemctl restart dnsmasq。
我之前在虚拟机里搭测试环境,每次改DNS后都直接重启dnsmasq,比用 rndc 方便多了。
不过有个坑,dnsmasq重启慢,有时候你会觉得网突然断了,其实是它还在启动。
这时候就得用 sudo journalctl -u dnsmasq -f 看实时日志了。

说白了,选哪种方法全看服务器上装了啥。
如果实在分不清,先查查服务状态。
命令是 systemctl status nscd 或者 systemctl status dnsmasq。
有些系统还会在 /etc/resolv.conf 文件里写DNS服务器,但这个只是客户端的缓存,服务器上得看具体服务。
我这十年摸爬滚打下来,发现最保险的办法是先备份配置文件,然后根据服务手册来。
手册里一般会写清理缓存的具体步骤,比我们瞎猜靠谱多了。

清除 Linux/Unix/Mac 上的 DNS 查询缓存

哎哟,这个问题啊,我之前自己操作过几次,下面给你详细说说:
Linux系统 首先,你得知道Linux上的DNS缓存是咋回事。
它可能是由nscd、dnsmasq或者BIND(named)管理的。
每种情况处理方式都不太一样。


nscd缓存:这个是由nscd(NameServiceCacheDaemon)管理的。
你只需要重启服务就可以刷新缓存了。
命令是这样的:sudo /etc/init.d/nscd restart 或者 sudo service nscd restart 或者 sudo service nscd reload。
如果你需要调整缓存行为,可以看看 /etc/nscd.conf 这个配置文件。


dnsmasq缓存:dnsmasq是一个轻量级的DNS服务器。
清除缓存也很简单,直接重启服务即可:sudo /etc/init.d/dnsmasq restart 或者 sudo service dnsmasq restart。


BIND(named)缓存:如果是在用BIND作为DNS服务器,重启服务可以清空缓存:sudo /etc/init.d/named restart。
如果你想清除特定域名或视图的缓存,可以用rndc工具。
比如,要清除所有缓存,就用 sudo rndc restart;要清除特定域名,就用 sudo rndc flushname example.com;清除视图缓存,可以用 sudo rndc flush lan 或者 sudo rndc flush wan。

MacOSX系统 Mac的DNS缓存管理方式也跟版本有关。


macOS 1 0.5 及之后版本:使用 dscacheutil 命令,命令是 sudo dscacheutil -flushcache。


macOS 1 0.5 之前版本:用 lookupd 命令,命令是 sudo lookupd -flushcache。

注意事项
修改DNS缓存后,可能还需要清除浏览器或应用程序的本地缓存。

/etc/hosts 文件是静态主机映射表,需要手动编辑。
比如,你可以用 sudo vi /etc/hosts 来编辑,内容大概是这样的:1 2 7 .0.0.1 localhost 和 1 9 2 .1 6 8 .1 .1 0 nas01
有些Linux发行版可能没默认安装nscd或dnsmasq,你得根据实际服务来操作。

反正你看着办吧,操作前最好先备份一下,别弄丢了重要数据。
我还在想这个问题,如果还有什么不清楚的,随时问我。

如何清空linux的DNS缓存

诶,你问我Linux怎么清DNS缓存是吧?上周有个客人问我这个,我给你捋捋...
如果你用的是NSCD这个缓存守护进程,最直接的办法就是重启它。
命令就是 systemctl restart nscd 或者老系统可能是 /etc/init.d/nscd restart。
执行完这命令,NSCD里的DNS缓存就清空了,挺快的。

要是你用的是BIND做DNS服务器,那得用 rndc flush 这个命令。
这个命令专门给BIND用的,直接把缓存冲掉。
不过用之前得确认你装了bind-utils这个包,不然命令找不到。

还有一种是dnsmasq,现在一些轻量级系统会用它。
清缓存的方法是 sudo systemctl restart dnsmasq,重启服务顺便把缓存清了。

当然了,最粗暴但也有效的方法就是重启整个系统。
系统一重启,啥缓存都得清,包括DNS缓存。
不过这个操作大,一般不推荐,除非你实在懒得一个个重启服务了。

反正根据你用的DNS软件选方法就行。
NSCD、BIND、dnsmasq,它们清缓存的命令都不一样。
选对命令,缓存清得干净,网速和DNS解析准头儿自然就上去了。

如何清除linux下DNS缓存

安装nscd:Ubuntu,终端,sudo apt-get install nscd。

重启nscd:sudo service nscd restart 或 sudo /etc/init.d/nscd restart。

清除DNS缓存。