修改linux 本地DNS缓存
DNS的工作原理
DNS提供的服务是用来将域名转换为IP地址的工作。TCP/IP协议详解中给的定义是:它是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。属于应用层协议。
DNS工作流程
![](https://img.haomeiwen.com/i2332017/7af305b3c56d6f9d.png)
在浏览器中输入www.qq.com域名,操作系统DNS进程会检查自己的本地dns缓存,如果存在对应ip,直接告诉浏览器,没有缓存进入下一步
-
检查本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
-
如果hosts里没有这个域名的映射,则查找本地DNS服务器(TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器)配置,得到dns server 10.10.10.10,发送消息给本地dns,让dns查找, 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性,如果缓存列表没有,下一步
-
如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
-
如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用的是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
DNS缓存 nscd
ubuntu服务器一般默认安装nscd,nscd(Name Service Cache Daemon)是一种能够缓存 passwd、group、hosts 的本地缓存服务,分别对应三个源 /etc/passwd、/etc/hosts、/etc/resolv.conf。其最为明显的作用就是加快 DNS 解析速度,在接口调用频繁的内网环境建议开启。
首先查看nscd服务是否开启
ps -e |grep nscd
nscd 默认配置文件位置 /etc/nscd.conf
# 日志文件
#logfile /var/log/nscd.log
# 调试级别
debug-level 5
# 等待请求的线程数
threads 6
# 最大线程数
max-threads 128
# 运行用户
server-user nscd
paranoia no
# 禁用passwd缓存
enable-cache passwd no
# 禁用group缓存
enable-cache group no
# 启用hosts缓存
enable-cache hosts yes
# 指定缓存命中项的TTL,单位为s
positive-time-to-live hosts 5
# 指定缓存未命中项的TTL,单位为s
negative-time-to-live hosts 20
# 散列表大小
suggested-size hosts 211
# 启用hosts文件的修改情况检查
check-files hosts yes
persistent hosts yes
shared hosts yes
# 最大缓存库大小
max-db-size hosts 33554432
通过service nscd start
开启
查看nscd dns缓存列表
想添加dns缓存,可以修改本地hosts 在/etc/hosts,保存
通过下面命令查询,是否缓存到本地dns列表
nscd -f hosts