linux下清理dns 缓存

linux下清理dns 缓存,第1张

首先我们要了解,dns查询的基本逻辑和缓存的存在位置

如图所示,基本逻辑为:

客户端 - 本机器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.101

2. 如果要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服务来达成清除DNS

Cache的效果。使用的命令是:

#

service

nscd

restart

#

/etc/init.d/nscd

restart

如果是清除BIND服务器上的CACHE,使用的命令是:

#

rndc

flush

如果是用dnsmasq实现的DNS服务器,使用的命令是:

$

sudo

/etc/init.d/dnsmasq

restart

另外,重启系统也行。

可以多关注《Linux就该这么学》这本书,我都是从这里面学到的


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7555833.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-07
下一篇2023-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存