首先我们要了解,dns查询的基本逻辑和缓存的存在位置
如图所示,基本逻辑为:
客户端 - 本机器dns解析器(如host,dnsmasq)- 本地dns服务器(比如家庭路由器)- 网络dns服务器
为了加速查询,在解析器和服务器上都有缓存在,一般而言我们要清理的是本机器上的dns缓存
显然,我们必须首先了解本地机器用的是什么解析器,可以通过看哪个进程占据了53端口来查询,因为53端口是dns服务器端口。
可以通过以下指令:
netstat -tunlp | grep 53
或者是
sudo lsof -i :53 -S
分别会下列结果
针对不同的解析器
可以用不同的命令清理
针对system-resolved:
$ sudo systemd-resolve --flush-caches
$ sudo resolvectl flush-caches
$ sudo killall -USR2 systemd-resolved
同时为了验证dns缓存真的被清理了,可以用命令来查看缓存
sudo killall -USR1 systemd-resolved # 把缓存存入systemctl journalctl
sudo journalctl -r -u systemd-resolved #查看
![image.png](https://upload-images.jianshu.io/upload_images/23200524-4f99bda11ce99858.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
针对dnsmasq:
$ sudo killall -HUP dnsmasq
$ sudo killall -USR1 dnsmasq # 把缓存大小存入syslog
参考:
https://devconnected.com/how-to-flush-dns-cache-on-linux/