dns 视图


Berkeley Internet Name Domain (BIND)  --伯克利网络名字域

bind 9 版本加入了视图功能


CDN 内容分发网络


将网站源服务器中的内容存储到分布于各地的CDN网络节点上,通过智能网络流量分配控制系统,
将终端用户的访问请求自动指向健康可用且距离本地最近的CDN专用服务器上,以提高用户访问
的响应速度和服务的可用性,改善互联网上的服务质量。

 

  缓存服务器  + 智能DNS(DNS view)

 

IP库如何获得?

IANA(互联网数字分配机构,internet assigned numbers authority)

ARIN (American registry for internet numbers)
北美,南美

RIPE
欧洲,中东,北非

APNIC
亚洲,大洋洲

 

ftp.apnic.net   ripe


[root@li ~]# ls /share/soft/dns/
china  crtc         howto_ripe_dbase             wangtong.txt
cnc    dianxin.txt  ripe-dbase-client-v3.tar.gz


--IP库的下载方法写在此文件里
[root@li dns]# cat /share/soft/soft/dns/howto_ripe_dbase

wangtong
shell> ./whois3 -h whois.apnic.net -l -i mb MAINT-CNCGROUP > /var/cnc

dianxin
shell> ./whois3 -h whois.apnic.net -l -i mb MAINT-CHINANET > /var/chinanet

tietong
shell> ./whois3 -h whois.apnic.net -l -i mb MAINT-CN-CRTC > /var/crtc


下载下来后的文件,需要经过grep,awk,sed和手动的处理

 


DNS view

根据你访问过来的IP对应ACL列表来判断,从而解析到不同的服务器主机

在CDN中应用很多,也是解决目前区域间带宽小和延迟大的问题的一种方法。


DNS 视图
view优点:
    优化访问速度
    成本低,无需额外设备
    配置灵活简单
    负载均衡

 

[root@li ~]# yum install bind* -y


实验前准备:
1,主机名 
2,时间同步
3,关闭iptables,selinux
  iptables 的关闭:
 iptables -F
 iptables -X
 iptables -Z
 chkconfig iptables off

  selinux 的关闭:
 vim /etc/selinux/config
 SELINUX=disabled --确认为disabled,如果不是则改成disabled,但需要reboot电脑才能生效

 

视图的在DNS里的配置原理:
 每一个view由match-clients来匹配网段,如:
  match-clients {10.1.1.0/24;20.1.1.0/24}
   --表示只有10.1.1和20.1.1网段可以访问此view
--那么因为定义的网段可能有很多,所以使用了acl,定义方法如下

acl "internalnet" {10.1.1.0/24;20.1.1.0/24;30.1.1.0/24}

view "internel" {
 match-clients { "internalnet"; };
};

 

--或者使用include 来定义一个文件,在文件里写多网段IP

vim /var/named/chroot/var/named/internalnet    --在此文件里写IP库

include "internalnet";

view "internel" {
 match-clients { internalnet;}
};

 


第一步:定义ACL文件  (用来放网段的文件,IP库)

[root@li ~]# vim /var/named/chroot/var/named/dx  --电信IP库
acl dx {
2.2.2.97;
2.2.2.201;  --IP写法
200.11.22.33/24; --网段写法   
}


[root@li ~]# vim /var/named/chroot/var/named/wt  --网通IP库
acl wt {
2.2.2.100;
2.2.2.66;
100.10.20.30/24;
}

 

第二步:配置named.conf


[root@li ~]# vim /var/named/chroot/etc/named.conf
options {
        directory "/var/named";
};

include "dx";;
include "wt";;


view "dx" {
        match-clients {dx;};
        zone "cluster.com" IN {
                type master;
                file "data/dx.cluster.com.zone";
        };
};

view "wt" {
        match-clients {wt;};
        zone "cluster.com" IN {
                type master;
                file "data/wt.cluster.com.zone";
        };
};


view "others" {
        match-clients {any;};
        zone "cluster.com" IN {
                type master;
                file "data/others.cluster.com.zone";
        };
};

 

第三步:配置named.conf里定义的三个zone文件
# vim /var/named/chroot/var/named/data/dx.cluster.com.zone

$TTL 86400
@       IN      SOA     dx.     root.   (
                        2011080801
                        120
                        60
                        1D
                        86400 )
        IN      NS      li.cluster.com.
li      IN      A       2.2.2.10 --DNS服务器的IP
www     IN      A       1.1.1.1  --此为www.cluster.com域名的电信线路的IP,或者是在电信机房的服务器的IP


# vim /var/named/chroot/var/named/data/wt.cluster.com.zone

$TTL 86400
@       IN      SOA     wt.     root.   (
                        2011080801
                        120
                        60
                        1D
                        86400 )
        IN      NS      li.cluster.com.
li      IN      A       2.2.2.10
www     IN      A       2.2.2.2  --网通线路的


# vim /var/named/chroot/var/named/data/others.cluster.com.zone

$TTL 86400
@       IN      SOA     others.     root.   (
                        2011080801
                        120
                        60
                        1D
                        86400 )
        IN      NS      li.cluster.com.
li      IN      A       2.2.2.10
www     IN      A       3.3.3.3 --除了电信和网通外的用户指向的服务器IP,如果你只有电信和网通两个线路,可以随意指向其中一个。但这里是实验,我假设有三个线路,所以这里指向第三个IP 3.3.3.3

 

第四步:修改属主,确保运行权限OK
[root@li data]# chown named.named /var/named/chroot/etc/*
[root@li data]# chown named.named /var/named/chroot/var/named/*
[root@li data]# chown named.named /var/named/chroot/var/named/data/*

 

第五步: 重启服务
 /etc/init.d/named restart


验证:

 


===================================


--主 从 DNSview 的实现

 

先备份或删除或快照上面的全部配置


 主DNS         从DNS
 2.2.2.10   2.2.2.6;2.2.2.7;2.2.2.8 三个IP 
主机名 li.cluster.com    slave.cluster.com

 


准备工作:
两台机都一样要做
1,主机名
2,时间同步
3,关闭iptables,selinux
4,确保从DNS上的三个IP不要冲突

 

第一大步:在主域DNS上操作


1,先定义好acl文件,步骤省略

 


2,配置named.conf配置文件
[root@li dns]# vim /var/named/chroot/etc/named.conf

options {
        directory "/var/named";
};

include "dx";;
include "wt";;

view "dx" {
        match-clients { dx; 2.2.2.6; !2.2.2.7; !2.2.2.8; };
        zone "cluster.com" IN {
                type master;
                file "data/dx.cluster.com.zone";
        };
};

view "wt" {
        match-clients { wt; !2.2.2.6; 2.2.2.7; !2.2.2.8; };
        zone "cluster.com" IN {
                type master;
                file "data/wt.cluster.com.zone";
        };
};

view "others" {
        match-clients { any; !2.2.2.6; !2.2.2.7; 2.2.2.8; };
        zone "cluster.com" IN {
                type master;
                file "data/others.cluster.com.zone";
        };
};


第二大步:写好主域DNS的三个zone文件,写的内容自己定(下面省略)

[root@dns ~]# vim /var/named/chroot/var/named/data/dx.cluster.com.zone

[root@dns ~]# vim /var/named/chroot/var/named/data/wt.cluster.com.zone

[root@dns ~]# vim /var/named/chroot/var/named/data/others.cluster.com.zone
 
改好属主和权限,重启主域的named服务
/etc/init.d/named restart

 

第三大步:对从DNS服务器进行操作

1,定义acl文件,和主域的acl文件一样,可以SCP过来

 

2,修改named.conf
[root@slave ~]# # vim /var/named/chroot/etc/named.conf


options {
        directory "/var/named";
};

include "dx";;
include "wt";;

view "dx" {
        match-clients { dx; 2.2.2.6; !2.2.2.7; !2.2.2.8; };
        transfer-source  2.2.2.6; --transfer-source用来同步不同的view
        zone "cluster.com" IN {
                type slave;  --类型为slave
                masters { 2.2.2.10; }; --指定主DNS服务器的IP
                file "slaves/dx.slave.cluster.com.zone";
        };
};

view "wt" {
        match-clients {wt; !2.2.2.6; 2.2.2.7; !2.2.2.8; };
        transfer-source 2.2.2.7;
        zone "cluster.com" IN {
                type slave;
                masters { 2.2.2.10; };
                file "slaves/wt.salve.cluster.com.zone";
        };
};

view "others" {
        match-clients {any; !2.2.2.6; !2.2.2.7; 2.2.2.8; };
        transfer-source 2.2.2.8;
        zone "cluster.com" IN {
                type slave;
                masters { 2.2.2.10; };
                file "slaves/others.salve.cluster.com.zone";
        };
};

 

3,修改好属主和权限,重启从DNS服务器的named服务
/etc/init.d/named restart

 

第四大步:验证
从DNS重启named服务后,查看/var/named/chroot/var/named/slaves/目录 ,可以看到马上同步过来了,说明成功
[root@slave ~]# ls /var/named/chroot/var/named/slaves/
dx.slave.cluster.com.zone      wt.slave.cluster.com.zone
others.slave.cluster.com.zone

nslookup去验证,可以解析,并可以实现view的功能

 


===============================================================

 

实现子域及其子域view

  主域DNS服务器  子域DNS服务器
  2.2.2.10   2.2.2.15
 主机名 li.cluster.com  li.son.cluster.com

  主域名 cluster.com 
  子域名 son.cluster.com

 


第一步:定义acl文件
--我这里还是沿用上面实验已经做好的acl,所以这一步省略

 

第二步:修改配置文件,先和第一个实验一样

[root@dns ~]# vim /var/named/chroot/etc/named.conf

options {
        directory "/var/named";
};

include "dx";;
include "wt";;

view "dx" {
        match-clients {dx;};
        zone "cluster.com" IN {
                type master;
                file "data/dx.cluster.com.zone";
        };
};

view "wt" {
        match-clients {wt;};
        zone "cluster.com" IN {
                type master;
                file "data/wt.cluster.com.zone";
        };
};

view "others" {
        match-clients {any;};
        zone "cluster.com" IN {
                type master;
                file "data/others.cluster.com.zone";
        };
};


第三步:在主域服务器上,把每个view都加上子域的授权


[root@li etc]# vim /var/named/chroot/var/named/data/dx.cluster.com.zone

$TTL 86400
@       IN      SOA     dx.     root.   (
                        2011080801
                        120
                        60
                        1D
                        86400 )
        IN      NS      li.cluster.com.
son.cluster.com.        IN      NS      li.son.cluster.com.
li      IN      A       2.2.2.10
www     IN      A       1.1.1.1
li.son.cluster.com.     IN      A       2.2.2.15

 


# vim /var/named/chroot/var/named/data/wt.cluster.com.zone
$TTL 86400
@       IN      SOA     dx.     root.   (
                        2011080801
                        120
                        60
                        1D
                        86400 )
        IN      NS      li.cluster.com.
son.cluster.com.        IN      NS      li.son.cluster.com.
li      IN      A       2.2.2.10
www     IN      A       2.2.2.2
li.son.cluster.com.     IN      A       2.2.2.15

 


# vim /var/named/chroot/var/named/data/others.cluster.com.zone
$TTL 86400
@       IN      SOA     dx.     root.   (
                        2011080801
                        120
                        60
                        1D
                        86400 )
        IN      NS      li.cluster.com.
son.cluster.com.        IN      NS      li.son.cluster.com.
li      IN      A       2.2.2.10
www     IN      A       3.3.3.3
li.son.cluster.com.     IN      A       2.2.2.15

 

重启主域上的named服务

/etc/init.d/named restart

 

第四步:

子域服务器前面的步骤一样

先准备
1,主机名
2,时间同步
3,关闭iptables,selinux

4,然后在子域服务器上安装好bind软件
  yum install bind* -y

 

5, 先定义电信,网通IP库,需要和主域一致
我这里直接从主域DNS用scp拷过来

# scp /var/named/chroot/var/named/dx  2.2.2.15:/var/named/chroot/var/named/

# scp /var/named/chroot/var/named/wt  2.2.2.15:/var/named/chroot/var/named/

 

6,配置子域DNS服务器的named.conf文件
[root@son ~]# vim /var/named/chroot/etc/named.conf
options {
        directory "/var/named";
};

include "dx";;
include "wt";;

view "dx" {
        match-clients {dx;};
        zone "son.cluster.com" IN { --和主域的区别就在这里,写的是子域名
                type master;
                file "data/dx.son.cluster.com.zone";
        };
};

view "wt" {
        match-clients {wt;};  
        zone "son.cluster.com" IN {    --同上
                type master;
                file "data/wt.son.cluster.com.zone";
        };
};

view "others" {
        match-clients {any;};
        zone "son.cluster.com" IN { --同上
                type master;
                file "data/others.son.cluster.com.zone";
        };
};


7,按照named.conf的配置写三个zone文件

# vim /var/named/chroot/var/named/data/dx.son.cluster.com.zone
$TTL 86400
@       IN      SOA     dx.     root.   (
                        2011080801
                        120
                        60
                        1D
                        86400 )
        IN      NS      li.son.cluster.com.
li      IN      A       2.2.2.15
www     IN      A       11.11.11.11

# vim /var/named/chroot/var/named/data/wt.son.cluster.com.zone
$TTL 86400
@       IN      SOA     wt.     root.   (
                        2011080801
                        120
                        60
                        1D
                        86400 )
        IN      NS      li.son.cluster.com.
li      IN      A       2.2.2.15
www     IN      A       22.22.22.22

# vim /var/named/chroot/var/named/data/others.son.cluster.com.zone
$TTL 86400
@       IN      SOA     others.     root.   (
                        2011080801
                        120
                        60
                        1D
                        86400 )
        IN      NS      li.son.cluster.com.
li      IN      A       2.2.2.15
www     IN      A       33.33.33.33


8.修改权限属主,确保运行OK;并重启named服务
[root@son data]# chown named.named /var/named/chroot/var/named/
[root@son data]# chown named.named /var/named/chroot/var/named/*
[root@son data]# chown named.named /var/named/chroot/var/named/data/*


[root@son data]# /etc/init.d/named restart

 

9,验证:

再使用另一台电脑来测试:


--下面是我的DNS记录的情况,照着这张表来测试
[root@li etc]# www.cluster.com
[root@li etc]# dx  1.1.1.1
[root@li etc]# wt  2.2.2.2
[root@li etc]# others 3.3.3.3
[root@li etc]#
[root@li etc]#
[root@li etc]# www.son.cluster.com
[root@li etc]# dx 11.11.11.11
[root@li etc]# wt 22.22.22.22
[root@li etc]# others 33.33.33.33
[root@li etc]#
[root@li etc]#
[root@li etc]# li.cluster.com  2.2.2.10
[root@li etc]# li.son.cluster.com 2.2.2.15

 

当客户端DNS指向主域:
--三种情况:
第一种情况:客户端属于othersIP段
  命令   结果 
 nslookup  www.cluster.com 3.3.3.3  OK 
 nslookup  www.son.cluster.com   33.33.33.33 OK 

第二种情况:客户端属于电信IP段
  命令   结果 
 nslookup  www.cluster.com 1.1.1.1  OK 
 nslookup  www.son.cluster.com   33.33.33.33 --有问题


第二种情况:客户端属于网通IP段
  命令   结果 
 nslookup  www.cluster.com 2.2.2.2  OK 
 nslookup  www.son.cluster.com   33.33.33.33 --有问题

 

当客户端DNS指向子域:
--这样客户端就不能通过子域查主域的记录
所以在options { }里加上一句
  forwarders { 2.2.2.10; };

--加完全局转发后,重启named服务,再做下面测试
第一种情况:客户端属于othersIP段
  命令   结果 
 nslookup  www.cluster.com 3.3.3.3  OK 
 nslookup  www.son.cluster.com   33.33.33.33 OK 

第二种情况:客户端属于电信IP段
  命令   结果 
 nslookup  www.cluster.com 3.3.3.3        --有问题 
 nslookup  www.son.cluster.com   11.11.11.11 OK


第二种情况:客户端属于网通IP段
  命令   结果 
 nslookup  www.cluster.com 3.3.3.3        --有问题 
 nslookup  www.son.cluster.com   22.22.22.22 OK

 

 


解决方法: 主DNS要有三个IP


在上面的基础上做以下改变

1,主DNS上的操作
除了2.2.2.10外还要两个IP
# ifconfig eth0:0 2.2.2.12  netmask 255.255.255.0
# ifconfig eth0:1 2.2.2.13  netmask 255.255.255.0

 


2,修改主DNS上的配置文件
# vim /var/named/chroot/etc/named.conf
options {
        directory "/var/named";
};

include "dx";;
include "wt";;

view "dx" {
        match-clients {dx;};
        query-source address 2.2.2.10 port *; --表示客户端以电信的IP访问过来则是以2.2.2.10这个IP去查询子域
        zone "cluster.com" IN {
                type master;
                file "data/dx.cluster.com.zone";
        };
};


view "wt" {
        match-clients {wt;};
        query-source address 2.2.2.12 port *; --表示客户端以网通的IP访问过来则是以2.2.2.12这个IP去查询子域
        zone "cluster.com" IN {
                type master;
                file "data/wt.cluster.com.zone";
        };
};

 

view "others" {
        match-clients {any;};
        query-source address 2.2.2.13 port *; --表示客户端以其他的IP访问过来则是以2.2.2.13这个IP去查询子域
        zone "cluster.com" IN {
                type master;
                file "data/others.cluster.com.zone";
        };
};

 

3.把2.2.2.10加到电信的acl文件里,2.2.2.12加到网通的acl文件里(主域和子域的ACL文件都要加)


4.保存后,重启named服务
/etc/init.d/named restart


5.验证:
 客户端DNS指向主域,查主域记录或子域记录都能实现view,一切OK
 客户端DNS指向子域(子域做全局转发主域),查子域记录能view,查主域记录还是不能view


解决方法:上面不能做全局转发,而应该换成把子域也做成主域的从域
 
 也就是主有3个IP,子也有3个IP(同时又是主的从域)  --课后题目