首先我们要了解,dns查询的基本逻辑和缓存的存在位置
dns 查询说明
如图所示,基本逻辑为:
客户端 - 本机器dns解析器(如host,dnsmasq)- 本地dns服务器(比如家庭路由器)- 网络dns服务器
为了加速查询,在解析器和服务器上都有缓存在,一般而言我们要清理的是本机器上的dns缓存
常见的解析器
显然,我们必须首先了解本地机器用的是什么解析器,可以通过看哪个进程占据了53端口来查询,因为53端口是dns服务器端口。
可以通过以下指令:
netstat -tunlp | grep 53
或者是
sudo lsof -i :53 -S
分别会下列结果
image.png
image.png
针对不同的解析器
可以用不同的命令清理
针对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 #查看

针对dnsmasq:
$ sudo killall -HUP dnsmasq
$ sudo killall -USR1 dnsmasq # 把缓存大小存入syslog
image.png
参考:
https://devconnected.com/how-to-flush-dns-cache-on-linux/