修改linux 本地DNS缓存

DNS的工作原理

DNS提供的服务是用来将域名转换为IP地址的工作。TCP/IP协议详解中给的定义是:它是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。属于应用层协议。

DNS工作流程

image

在浏览器中输入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

清理缓存

nscd -i passwd
nscd -i group
nscd -i hosts

你可能感兴趣的:(修改linux 本地DNS缓存)