关于DNS cache

禁用“DNS Client服务”并不影响DNS解析,只是客户端不对DNS解析内容进行缓存。命令ipconfig/displaydns 显示本机DNS缓存,但在禁用“DNS Client服务”时失效。

这个服务关闭与否影响并不大,从安全性上考虑,开启它可能泄漏你的缓存内容,确定你曾经访问过的网站。从速度上考虑,关闭它可能会降低反应速度,但一般影响不大。

客户端在遇到一个域名需要解析时,查询顺序为:

1、DNS缓存(如果DNS Client服务启用的话);

2、本机hosts文件;

3、主要DNS server;

4、辅助DNS server。

 

Windows下DNS cache相关命令

刷新DNS cache:

C:/>ipconfig /flushdns
Windows IP Configuration
Successfully flushed the DNS Resolver Cache.

 

查看DNS cache:

C:/>ipconfig /displaydns

禁止DNS cache:

C:/>net stop dnscache
C:/>sc servername stop dnscache

也可以在控制面板->服务里关闭DNS client。

更改DNS cache时间:

修改注册表HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Dnscache/Parameters

MaxCacheTtl 最大DNS cache时间
MaxNegativeCacheTtl 最大失败DNS cache时间

Linux下的DNS cache相关命令

重启或停止nscd(name server cache daemon)就可以了:

$service nscd restart
$/etc/rc.d/init.d/nscd restart
$service nscd stop
$/etc/rc.d/init.d/nscd stop

也可以在service里把nscd关闭。

参考:

How do I flush DNS?

DNS Cache 的一些小技巧汇总
————————————————
 


 

DNS 缓存机制也会给我们的工作造成一些困扰。例如:前端开发的测试工作,除了清理浏览器缓存,还要清理 DNS 缓存以保证解析到正确的 IP 上。对于像我这样的 IT Pro 来说,在排错的时候也经常会忽略 DNS 缓存造成的影响。

当然,我们可以使用 ipconfig /displaydns 命令来查看缓存命中的是否是正确 IP,但输出的本文结果实在太长了点。不过这也难不倒我们,在必要时,我们其实可以使用 PowerShell 来查看 DNS 缓存中 FQDN 所对应的 IP 地址:

  1. 复制Get-DnsClientCache-Entry.cn

关于DNS cache_DNS

注意:Get-DnsClientCache PowerShell cmdlet 只适用于 Windows 8 和 Server 2012 及更新版本。

要获取更详细的用法可以使用如下命令查看帮助信息:

  1. 复制Get-HelpGet-DnsClientCache-Detailed

 

 

1. DNS解析过程

关于DNS cache_安全分析_02

 


1)、在浏览器中输入 www.baidu.com 域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

2)、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

3)、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

4)、如果要查询的域名,不由本地DNS服务器区域解析,但该DNS服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

5)、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(没有设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责 .com域的这台服务器。这台负责 .com域的服务器收到请求后,如果自己无法解析,它就会找一个管理 .com域的下一级DNS服务器地址(baidu.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找baidu.com域服务器,重复上面的动作进行查询,直至找到www.baidu.com主机。

6)、如果用的是转发模式(设置转发器),此DNS服务器就会把请求转发至上一级ISP DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

注:从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是迭代查询。