引子:
外网DNS是用户访问网站的第一道门,如果外网DNS调度不准确,会出现跨网,跨地域等问题,调度问题是外网DNS关注的首要问题。如何让用户就近接入?有没有好的设置方法可供参考?
一、问题说明
调度问题直观的表现是VIEW设置多少个,ACL是否匹配正确。ACL设置一般企业会采购IPIP库的结果,国内基本可以得到正确的结果,海外的IPIP归属地也不会有很大的波动。如果请求能正常到达要访问的权威服务器,看似就万事大吉了。但是在观察业务数据的时候,发现问题并没有那么简单。
1、按照地域分NS
这是一个演变的过程,按照改进的过程叙述。
第一步:国内一般的方法是华北,华东,华南,三个地域建ns。海外选择离业务近的点建ns。中国和海外的ns设置不同的地址。自建权威服务器注册到DNS服务商。按照地域顺序往后排序。每个view配置相同的ns。认为DNS解析会按照最近的NS来请求。
问题:
前两台NS会收到很多访问的请求,用户的来源IP和之前给这个NS设定的覆盖范围也不一致,其他的NS请求量相对低。和用户分布的趋势不符合。
如果这样的话,即使分了ACL,也没有达到多个NS覆盖多个的问题。用户域名请求的时间仍旧很高。那么local DNS不是应该像很多NS同时发请求,然后选择一个就近的接入,以后就按照这个NS来请求吗?
当然不会,这样用户还需要在不同的NS上随机挑选,这样更加增加了local DNS的请求时间。
2、glue 记录
local DNS第一次解析域名的时候,ns的地址是由.com权威提供的,本地递归DNS最终是缓存权威DNS上的ns记录。.com权威提供的方式是通过glue记录。在注册域名的时候,需要额外填写。
glue记录是非常容易忽略的一个问题,应该搭建常规的DNSserver并不是必须的选项,因此常常会忽略,我也是在注意到问题之后,才发现对glue记录并不了解。
加入没有glue记录,local DNS拿到了请求之后,还要在询问NS地址是什么,
查看 www.baidu.com的glue记录:
请求命令:
dig www.baidu.com

位于返回请求的ADDITIONAL SECTION中。
3、实验过程
实验验证一下第一次请求的过程:
先来看一下请求的TTL值

第二次递减:

第三次递减:

第四次递减:

变为0:

重新开始请求:

看下对应的抓包过程:
第一次请求的过程:

192.58.128.30
J.root-servers.net192.58.128.30美国
A.root-servers.net198.41.0.4美国
E.root-servers.net192.203.230.10美国
分别像这几个根存问结果:
首先像 J.root-servers.net192.58.128.30美国 询问,
给服务器回复了 *.gtld-servers.net的地址 .com顶级域



com回复之后,继续往下看:
com回复了baidu的ns

选择了第一个百度权威NS发起请求。
百度权威NS回复了请求,中带有NS信息

继续像百度权威NS发起请求,得到答复。
已经缓存住了baidu 的NS地址:
这时直接向NS询问www.a.shifen.com的地址

本地递归DNS最终是缓存权威DNS上的NS记录。
4、结论
如果想实现按照NS调度,不同的View应该配置不同的NS地址,用户请求从com得到请求之后,再去查询NS ,就会按照NS配置的地址到想让他去的NS解析了。不足之处,第一次因为从glue拿地址,所以第一次没有办法实现智能解析
5、bind配置minimal-responses 选项
minimal-responses
如果是yes,当产生响应的时候,服务器将只会按照需要将记录添加到authority和additional的数据部分。(例如,delegations,negative responses)。这样会改善服务器的性能。默认值为no。
网友评论