DNS解析及缓存技术研究与应用
发布时间:2021-05-07 13:54:02作者:匠心独运维妙维效阅读:0
域名系统(DomainName System缩写DNS)是网络的一项核心服务技术,是实现域名与IP地址相互映射的一项网络技术,它的应用将IP地址映射到遵守特定格式的字符地址串,不仅方便记忆,也使得网络服务器访问更加便捷。随着DNS使用逐渐增多,也出现过一些DNS相关的问题,本文从对DNS客户端解析及缓存的实现进行解读,帮使用者理顺DNS客户端配置使用和优化。
1、Linux DNS客户端
对于Linux系统,/etc/resolv.conf是作为DNS客户端使用的配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。常见的配置文件包含类似于如下字段内容:
domain ebank.com
search ebank.com
nameserver 192.168.0.1
nameserver 192.168.0.2
2、解析机制及响应时间
domain用来定义本地域名,这个是对域名没有加”.”符号的加上域名,即在进行不完全域名解析时,默认的附加域名后缀。对于search是用于定义域名的搜索列表,当访问的域名不能被DNS解析时,会将该域名加上search指定的参数,在没有设置search的情况下,search默认为domain的值。
nameserver表示本机进行解析域名时使用该地址指定的主机为域名服务器。可配置多个,但最多支持3个,超过3个无效。当发生域名解析时,resolver会依次查询/etc/resolv.conf文件中配置的nameserver,每个nameserver查询超时(默认5秒)后查询下一个。多个nameserver依次查询过程默认轮询2次,当全部尝试都失败后,会返回错误。因此在配置两个nameserver的情况下,最长超时返回时间是20秒。
在实际的生产情况下,DNS服务会是主备双活节点,当主节点发生故障,备节点仍可使用,不影响实际业务的开展。也就是说,在客户端配置nameserver会配置两个地址,提高DNS的可用性。但当主DNS服务节点因故障不可用时,根据默认的配置方式DNS轮询为5s,整体轮询次数为2次,会导致客户端服务响应时间变长;当双节点故障,DNS查询时间将会更长。因此为了提高在内网DNS出故障或切换的情况下加快响应,可以在/etc/resolv.conf里面修改timeout和attemp次数。如:
options timeout:1
options attempts:1
当加入该配置后,单一的nameserver查询时间会减少为1s,整改nameserver从前至后会轮询一次,超时间缩短为2s,极大的提高DNS解析时间。同时,当设置domain或search时,且nameserver均不可用时,将会在解析的地址后增加域信息再进行一次域名解析,因此成倍增加域名解析时间。因此不建议增加domain和search配置。
总体来看,为了加快操作系统在作为客户端进行域名解析时的速度,避免在DNS故障时造成的DNS解析响应率低,一方面可调整options参数以降低超时时间和尝试的轮询次数,另一方面不设置domain和search,使得DNS解析失败更快速,也提高主DNS故障时切换效率。
3、DNS解析缓存及失效
nscd是glibc中带的dns缓存组件,通常调用C库的网络解析函数如gethostbyaddr、gethostbyname等时会使用到nscd的缓存功能,不需要显示的调用nscd功能。通常Java或python库中相关的函数最终也是调用的C库中的解析函数,所以也会用到nscd的dns缓存功能。如果没有使用C库中相关的网络解析函数,是无法默认使用nscd的dns缓存功能的,如nslookup、dig等工具。
默认suse12中nscd服务用于dns等的缓存服务,里面配置了用于hosts(即DNS缓存),passwd,group,service等的缓存。本文主要探讨DNS缓存服务。
用于缓存时间长短的参数为:
positive-time-to-live hosts 600
negative-time-to-live hosts 0
其中positive-time-to-live正向解析缓存时间,单位秒。查看glibc-2.17/nscd目录下的代码,实际上这个参数并未使用,而是直接以DNS应答(answer)报文中带的TTL值为准,即DNSServer上对应解析项设置的有效期。
reload-count默认为5,解释如下:
Limit on the number of times a cached entry gets reloaded withoutbeing used before it getsremoved.
此参数代表是缓存nscd中缓存的dnscache记录自动reload的次数,默认是5次。由nscd主动往dnsserver发起dns请求,如果期间解析结果有变动会更新nscdcache中缓存的记录reload触发的时间点TTL+CACHE_PRUNE_INTERVAL(宏定义为15),即每次reload间隔75秒。
彻底从cache中被移除的时间应该是75*(1+5)=450s左右。
negative-time-to-live为反向解析缓存的cache时间,单位为秒,默认值为0,即不缓存DNS反向解析。
不管是正向还是反向解析cache,失效后都会被清除,nscd-d 调试的时候可以看到类似的输出:removeGETAI entry "www.baidu.com"
redhat7.5母带默认没有安装nscd,不涉及缓存。如果自行安装,则默认hosts(即dnscache)的positive和negativettl值分别为3600s(实际不生效)和20s。
4、实验验证环节
环境:
Redhat7.5,Client:master, 192.168.43.100,
DNSServer:gateway,192.168.43.1
配置/etc/resolv.conf
nameserver192.168.43.1 ##默认网关,再通过网关路由到后面公有DNSserver
配置/etc/nscd.conf中:
negative-time-to-live hosts 10
systemctlrestart nscd重启nscd生效。
测试命令:pingwww.baidu.com
Note:默认情况下,ping域名时,从DNSServer获取到IP地址,ping还会进行反向解析。
从抓包看,A记录的DNS应答报文中带的TTL为60s,即DNSServer上对应解析项设置的有效期为60s。
NSCDdebug输出中包含Reloading的记录,可以看到刚开始第一次获取到了ip,然后nscd自动从dnsserver 重新reload记录信息。每次间隔正好是60s+ 15s=75s。
Sun24 Jan 2021 12:49:16 AM EST - 23536: GETAI (www.baidu.com)
Sun24 Jan 2021 12:49:16 AM EST - 23536: GETHOSTBYADDR (39.156.66.18)
Sun24 Jan 2021 12:50:31 AM EST - 23536: Reloading "www.baidu.com"in hosts cache!
Sun24 Jan 2021 12:51:46 AM EST - 23536: Reloading "www.baidu.com"in hosts cache!
Sun24 Jan 2021 12:53:01 AM EST - 23536: Reloading "www.baidu.com"in hosts cache!
Sun24 Jan 2021 12:54:16 AM EST - 23536: Reloading "www.baidu.com"in hosts cache!
Sun24 Jan 2021 12:55:31 AM EST - 23536: Reloading "www.baidu.com"in hosts cache!
Sun24 Jan 2021 12:56:46 AM EST - 23536: remove GETAI entry www.baidu.com
ping www.baidu.com 成功。来看其中的DNS解析环节:
1)一开始是会有正向解析请求的,然后还会有反向解析请求。
2)10s内紧接着再ping,这个时候是没有正向请求的,因为被nscd cache了。 也没有反向解析请求,因为反向请求也被cache了且在有效期内(10s)。
3)超过10s再ping www.baidu.com,仍然会有发往dns server的反向解析请求。在正向解析cache有效期TTL时间内,不会再发送相关正向解析请求,仍然使用nscd缓存的正向解析cache。
4)如果在10s中间执行nscd -i hosts 则cache被invalidate, 再ping的话正向和反向请求均会发出。
另外如果DNS服务器没有配置相关PTRentry,会等待超时返回,这会降低应用响应时间。在我行年金系统上曾经出现过这种情况。通过在DNS服务器上配置相关PRTentry(尽管是无用的配置,但是能提高响应速度)
5、使用建议
有类似场景的应用系统应掌握和理解DNS解析及缓存机制,合理设置dns解析的重试、超时范围,合理利用DNScache加速解析,同时也要避免设置不合理造成的解析不同步,影响业务响应及失败,特殊场景下可通过工具或回调方式显示触发invalidatedns cache操作,保障dns解析的时效性。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:shawn.lee@vecloud.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
标题:DNS解析及缓存技术研究与应用
TAG标签:DNS
地址:http://www.vecloud.com.cn/article/234.html