
如图所示,基本逻辑为:
客户端 - 本机器dns解析器(如host,dnsmasq)- 本地dns服务器(比如家庭路由器)- 网络dns服务器
为了加速查询,在解析器和服务器上都有缓存在,一般而言我们要清理的是本机器上的dns缓存
显然,我们必须首先了解本地机器用的是什么解析器,可以通过看哪个进程占据了53端口来查询,因为53端口是dns服务器端口。
可以通过以下指令:
分别会下列结果
针对不同的解析器
可以用不同的命令清理
针对system-resolved:
同时为了验证dns缓存真的被清理了,可以用命令来查看缓存
针对dnsmasq:
参考:
https://devconnected.com/how-to-flush-dns-cache-on-linux/
1. DNS存放位置:/etc/resolv.conf ,格式:nameserver 9.181.2.1012. 如果要disableDNS, 就将该配置文件置为invalid nameserver: echo "nameserver 9.123.253.45" >/etc/resolv.conf
3. 要totally disableDNS, 还需要将系统中的DNS缓存清空:
(1) 用DNS缓存程序NSCD(name service cache daemon)负责管理DNS缓存
service nscd restart
Note: NSCD Name Service Cache Daemon, DNS缓存程序,负责管理DNS缓存。
(2)另一种实现DNS缓存则是用Bind来架设Caching Name Server
rndc flush
(3) 如果你的DNS服务器是用dnsmasq实现的
sudo dnsmasq restart
Note: DNSmasq是一个轻巧的容易使用的DNS服务工具,它可以应用在内部网和Internet连接的时候的IP地址NAT转换,也可以用做小型网络的DNS服务
4. 如果在程序中调用getaddrinfo和getnameinfo来获取域名对应的IP,在同一进程中,上一次成功获取的结果会被保留下来,即使在下一次调用之前disable了DNS并清空了系统的DNS缓存,下一次仍然能够解析出正确的IP。此时需要在调用这两个函数之前用res_init()函数来清空他们自己保留的缓存。
如果是清除NSCD上的Cache,可重新启动NSCD服务来达成清除DNSCache的效果。使用的命令是:
#
service
nscd
restart
或
#
/etc/init.d/nscd
restart
如果是清除BIND服务器上的CACHE,使用的命令是:
#
rndc
flush
如果是用dnsmasq实现的DNS服务器,使用的命令是:
$
sudo
/etc/init.d/dnsmasq
restart
另外,重启系统也行。
可以多关注《Linux就该这么学》这本书,我都是从这里面学到的
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)