智能DNS又称为解析切割,是对请求DNS解析的IP地址进行判断,将域名解析成不一样的地址web
通常智能DNS应用常见的场景就是CDN,中国特点社会主义的网络致使了电信和联通这2个特点的运营商,而这2个运营商经过在北京某机房的100G带宽相连,这就致使了电信用户访问联通的网络就会很是慢。玩游戏的童鞋就知道用游戏加速器来解决问题,但通常的用户访问在不一样运营商网络的服务器时,变得很是慢。因而苦逼的服务提供商为了更好的用户体验就不得不去花费一笔钱去买CDN服务了。。。。vim
CDN的原理就是在智能DNS基础上进行web的反向代理缓存实现的。经过不一样地域的请求解析到对应地域的缓存服务器上,而后缓存服务器对主服务器进行数据请求,最终返回给客户。这对于静态页面的网站有着很好的加速。缓存
这里就不得不提一下著名的提供智能DNS解析服务的DNSpod(目前已被腾讯收购,软件源代码已经开源,宣称非BIND能够比拟,有兴趣的童鞋能够去研究研究)。还有比较著名的CDN服务提供商有帝盟等。。。服务器
还会一种会使用到智能DNS的场景:在公司内部NS服务器上区份内部和外部的请求,将内部请求解析到内网地址上,外网请求解析到外网地址上,此篇博文针对此应用展开网络
BIND实现智能DNS的原理是经过view的方式,首先判断客户请求的来源,而后返回不一样的IPide
规划:为lustlost.com域进行智能解析性能
分2个网段,192.168.92.0/24网段的请求解析到192.168.92.102主机上, 其它网段解析到172.19.19.102主机网站
这里172.19.19.102模拟外网。spa
这和通常公司的模式很接近,为公司内部提供内部私网地址的解析,避免路由器性能浪费。为外部提供公网地址的解析。3d
ns服务器的IP地址为192.168.92.102和172.19.19.102
[root@lustlost ~]# yum install bind caching-nameserver –y #安装bind和caching-nameserver,这里的caching-nameserver已经给咱们在相应目录下提供了配置文件,根区域和本地区域的数据文件,并且它的主配置是默认以view方式配置的
[root@lustlost etc]# cp /etc/named.caching-nameserver.conf named.conf #用cp备份原配置文件,创建要使用的配置文件,而后进行修改
[root@lustlost etc]# vim /etc/named.conf
- #首先定义控制列表,这里定义了内网的网段
- acl innet {
- 127.0.0.0/8;
- 192.168.92.0/24;
- };
- #全局配置,精简一点,只配置数据文件目录位置
- options {
- directory "/var/named";
- };
- #建立内网用户的view
- view in {
- match-clients { innet; }; #定义用户为控制列表中所定义的
- recursion yes; #容许内网用户进行递归查询
- #下面是定义根区域和本地区域的正反解析
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "localhost" IN {
- type master;
- file "localhost.zone";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.local";
- };
- #定义内部网络用户解析
- zone "lustlost.com" IN {
- type master;
- file "lustlost.com.in";
- allow-transfer { none; }; #不容许区域传送
- allow-update { none; }; #不容许更新
- };
- };
- #定义外部网络用户解析
- view out {
- match-clients { any; }; #容许全部用户(这里之因此容许全部用户,
- 是由于bind对配置文件是从上往下读取解析的,
- 匹配不到上面view所定义的acl,
- 才会到这个view中来)
- recursion no; #不容许外部网络用户进行递归查询(咱们不是免费的公共dns)
- zone "lustlost.com" IN {
- type master;
- file "lustlost.com.out";
- allow-transfer { none; };
- allow-update { none; };
- };
- };
[root@lustlost etc]# named-checkconf #配置完成后注意检查配置文件的语法错误
至此就配置好了主配置文件,接下来建立区域数据文件
[root@lustlost etc]# cd /var/named/
[root@lustlost named]# vim lustlost.com.in #建立内部网络客户解析区域文件
- #这里就随便创建几个记录了
- $TTL 600
- $ORIGIN lustlost.com
- @ IN SOA ns.lustlost.com. admin.lustlost.com. (
- 2012070801
- 1H
- 10M
- 1W
- 1D
- )
- IN NS ns
- IN MX 10 mail
- ns IN A 192.168.92.102
- mail IN A 192.168.92.100
- www IN A 192.168.92.101
[root@lustlost named]# cp lustlost.com.in lustlost.com.out #建立外部网络客户解析区域文件
- $TTL 600
- $ORIGIN lustlost.com
- @ IN SOA ns.lustlost.com. admin.lustlost.com. (
- 2012070801
- 1H
- 10M
- 1W
- 1D
- )
- IN NS ns
- IN MX 10 mail
- ns IN A 172.19.19.102
- mail IN A 172.19.19.100
- www IN A 172.19.19.101
至此全部配置都已经完成
检查下配置有无出错
检查无错误后启动服务
查看下当前网络配置(为了方便,在网卡上配置了2个不一样的地址,下面客户机也同样)
查看下客户机的网络配置
因而用这台客户机用不一样地址去请求解析DNS
使用192.168.92.0/24网段去解析的结果
使用172.19.19.0/24网段去解析的结果
能够看到,使用不一样网段成功的解析到了不一样的地址。
这就是基于BIND的智能DNS解析,使用了BIND的view功能,至于dnspod,在智能DNS解析方面应该有更增强大的功能,有兴趣能够去官网下载源代码安装研究