专业提供IPLC、MPLS VPN、SD-WAN、IEPL、海外IDC、云专线等技术方案。
咨询热线:400-028-9798

IPLC

DNS解析及缓存技术研究与应用

发布时间:2021-05-07 13:54:02来源:匠心独运维妙维效作者:邹秋波阅读:

[导读]: 域名系统(DomainName System缩写DNS)是网络的一项核心服务技术,是实现域名与IP地址相互映射的一项网络技术,它的应用将IP地址映射到遵守特定格式的字符地址串,不仅方便记忆,也使...

域名系统(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上对应解析项设置的有效期。

DNS解析及缓存技术研究与应用

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。

DNS解析及缓存技术研究与应用

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解析及缓存技术研究与应用

另外如果DNS服务器没有配置相关PTRentry,会等待超时返回,这会降低应用响应时间。在我行年金系统上曾经出现过这种情况。通过在DNS服务器上配置相关PRTentry(尽管是无用的配置,但是能提高响应速度)

5、使用建议

有类似场景的应用系统应掌握和理解DNS解析及缓存机制,合理设置dns解析的重试、超时范围,合理利用DNScache加速解析,同时也要避免设置不合理造成的解析不同步,影响业务响应及失败,特殊场景下可通过工具或回调方式显示触发invalidatedns cache操作,保障dns解析的时效性。

免责声明:部分文章信息来源于网络以及网友投稿,本网站只负责对文章进行整理、排版、编辑,是出于传递 更多信息之目的,并不意味着赞同其观点或证实其内容的真实性,如本站文章和转稿涉及版权等问题,请作者在及时联系我们本站,我们会尽快处理。

标题:DNS解析及缓存技术研究与应用

TAG标签: DNS

地址:http://www.vecloud.com.cn/zhishibaike/234.html

常见问题