搭建并实现智能DNS
Posted JohnnyFang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搭建并实现智能DNS相关的知识,希望对你有一定的参考价值。
智能DNS主要是利用CDN(Content Delivery Network,内容分发网络)让用户可以就近访问共享的web服务。当企业的共享服务器放在互联网中,而有访问需求的用户量比较大,且分散在各地时,如果企业只在所在地附近部署服务器,虽然用户也能访问,但是对于距离服务器较远的用户来说,必然会有网络延迟的现象出现,从而造成用户体验差的不良效果,此时就可以考虑使用CDN来解决。
- CDN工作原理
由于在各地部署CDN节点的成本比较高,同时耗费的时间比较长,对于小公司或者主营业务是互联网新技术的企业来说并不划算,一般会考虑找专门的CDN服务商来部署CDN节点。
如上图所示,假设有一个企业的业务涉及到全国范围,现在找到腾讯来部署CDN节点,腾讯会在每个省部署该企业的CDN节点,每个省的用户在访问时:
①不是直接向企业源服务器发起请求,而是通过所在地的DNS服务器向腾讯DNS来查询找到最近的CDN接入节点,本地DNS再将最近的CDN节点返回给用户;
②用户访问最近的CDN节点,如果最近的CDN节点有用户访问的资源,则将资源返回给用户;
③如果最近的CDN节点没有用户访问的资源,则转向其他节点寻求资源,获得资源后返回给用户;
④如果其他节点也没有资源则最终会向源服务器寻求资源并返回给用户。
通过CDN节点的部署,解决了网络延迟问题,从而实现高效高速访问,提升用户体验感。
虽然说现实中,企业一般是寻求CDN服务商去解决此方面的需求,不过我们也能通过实验来模拟展现CDN的相关功能。
- 搭建并实现智能DNS
假设现在有一个企业在上海和北京都有分址,北京和上海的用户都要访问www.johnnyfang.com,希望实现上海用户访问时返回的是上海的网址,北京用户访问时返回的是北京网址。
2.1 实验准备
准备两台虚拟机,一台作为服务器端,一台作为客户端,两台虚拟机原有的ip10.0.0.153和10.0.0.152作为上海服务器端的ip和上海用户的ip,再分别添加100.0.0.153和100.0.0.152作为北京服务器端的ip和北京用户的ip(如下图)。
2.2 配置ACL
实现智能DNS功能,可以借助bind中的ACL(访问控制列表),ACL可以把一个或多个地址归并为一个集合,并通过一个统一的名称调用。要注意的是,ACL只能先定义后使用,因此一般定义在配置文件中,处于options的前面。
服务器端打开/etc/named.conf配置文件,在options上面添加上海和北京的地址段(如下图)。
2.3 定义ACL数据库文件
要想实现不同地区的用户访问时返回的是就近的网址,还需定义两套数据库。进入到/var/named目录下,因笔者上一篇实验的数据还没清空,就直接复制之前的区域解析库文件生成上海和北京的ACL数据库文件,北京的ACL数据库文件中,将域名对应的网址改为100.0.0.189(如下图)。
2.4 定义View
但是以上设置的两个不同网段之间并无关联,要想在ACL和区域解析库之间实现对应关系,需要用到view技术。一旦启用了view,所有的zone都只能定义在view中,因此我们需要将/etc/named.conf中的zone切走,并剪切到/etc/named.rfc1912.zones文件中,同时将默认的file部分指定到.sh结尾的文件中(如下图)。
复制修改后的解析库文件生成上海和北京的,注意将.bj结尾的文件中file部分改过来(如下图)。
返回到/etc/named.conf配置文件添加view,设置如果用户通过访问时,返回的是所在城市的数据(如下图)。
修改保存后,执行 rndc reload 命令重新加载服务。
2.5 客户端测试
返回客户端进行测试,执行 dig www.johnnyfang.com @10.0.0.153 命令,即所处地为上海时访问,返回的域名所对应ip为10.0.0.189(如下图)。
执行 dig www.johnnyfang.com @100.0.0.153 命令,即所处地为北京时访问,返回的域名所对应的ip为100.0.0.189(如下图)。
以上是关于搭建并实现智能DNS的主要内容,如果未能解决你的问题,请参考以下文章
DNS原理及主从架构实现搭建智能DNSiptable仅开放主机指定端口NAT原理iptables实现SNAT和DNAT并持久保存规则