智能DNS试验

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

bind 9 版本加入了视图功能   view  


智能DNS


CDN 内容分发网络  content  distributed network


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

bind+squid  实现基本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


# tar xf /share/soft/dns/ripe-dbase-client-v3.tar.gz -C /usr/src/
# cd /usr/src/whois-3.1/

# ./configure ;make ;make install
# which whois3
/usr/local/bin/whois3

 

--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和手动的处理


参考网址:
http://bbs.chinaunix.net/thread-577601-1-1.html

 


--下面是引用网络上的IP库,也是由下面的脚本所产生的

中国电信IP地址段:

http://files.liubaishui.com/ChinaTelcom.txt

中国联通(网通)IP地址段

http://files.liubaishui.com/UNICOM_CNC.txt

中国铁通IP地址段

http://files.liubaishui.com/CTT.txt

中国移动IP地址段

http://files.liubaishui.com/CMCC.txt


--使用下面的脚本,就会在当前运行的目录下产生chinanet(电信),unicom(网通),others(其它)这三个IP库文件
# vim /share/soft/dns/ripe.sh
#!/bin/sh
mkdir /root/apnic -p
touch /root/apnic/ip_apnic
FILE=/root/apnic/ip_apnic
rm -f $FILE
wget http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest -O $FILE
grep 'apnic|CN|ipv4|' $FILE | cut -f 4,5 -d'|'|sed -e 's/|/ /g' | while read ip cnt
do
echo $ip:$cnt
        mask=$(cat << EOF | bc | tail -1
pow=32;
define log2(x) {
if (x<=1) return (pow);
pow--;
return(log2(x/2));
}
log2($cnt)
EOF)
       echo $ip/$mask>> cn.net
if whois [email protected] | grep -i ".*chinanet.*\|.*telecom.*">/dev/null;then
echo $ip/$mask >> chinanet
elif whois [email protected] | grep -i ".*unicom.*">/dev/null;then
echo $ip/$mask >> unicom
else
echo $ip/$mask >> others
fi
done


DNS view

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

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


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

 

实验前准备:
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电脑才能生效
4,配置好yum

 


视图的在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;}
};

 

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

 

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

[root@li ~]# vim /var/named/chroot/var/named/dianxin  --电信IP库
acl dx {
10.1.1.153;
10.1.1.101;  --IP写法
200.11.22.0/24; --网段写法   
}


[root@li ~]# vim /var/named/chroot/var/named/wangtong  --网通IP库
acl wt {
10.1.1.73;
10.1.1.174;
100.10.20.0/24;
}

 

第二步:配置named.conf


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

include "dianxin";;
include "wangtong";;


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.   (
                        2011102401
                        120
                        60
                        1D
                        86400 )
        IN      NS      dns.cluster.com.
li      IN      A       2.2.2.35 
dns     IN      A       2.2.2.36 --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.   (
                        2011102401
                        120
                        60
                        1D
                        86400 )
        IN      NS      li.cluster.com.
li      IN      A       2.2.2.35
dns     IN      A       2.2.2.36
www     IN      A       2.2.2.2  --网通线路的


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

$TTL 86400
@       IN      SOA     others.     root.   (
                        2011102401
                        120
                        60
                        1D
                        86400 )
        IN      NS      li.cluster.com.
li      IN      A       2.2.2.35
dns     IN      A       2.2.2.36
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.36   2.2.2.37;2.2.2.38;2.2.2.39 三个IP 
主机名 dns.cluster.com    slave.cluster.com


--关于三个IP,你可以用内网的IP去只做同步;还有就是可以使用加密的key来做传输,有兴趣可以网上去找文档

 

准备工作:
两台机都一样要做
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 "dianxin";;
include "wangtong";;

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

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

view "others" {
        match-clients { any; !2.2.2.37;!2.2.2.38;2.2.2.39 };
        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 "dianxin";;
include "wangtong";;

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

view "wt" {
        match-clients {wt; !2.2.2.37;2.2.2.38;!2.2.2.39; };
        transfer-source 2.2.2.38;
        zone "cluster.com" IN {
                type slave;
                masters { 2.2.2.36; };
                file "slaves/wt.salve.cluster.com.zone";
        };
};

view "others" {
        match-clients {any; !2.2.2.37;!2.2.2.38;2.2.2.39; };
        transfer-source 2.2.2.39;
        zone "cluster.com" IN {
                type slave;
                masters { 2.2.2.36; };
                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.36   2.2.2.37
 主机名 dns.cluster.com  dns.son.cluster.com

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

--主域DNS服务器上的操作
第一步:定义acl文件
--我这里还是沿用上面实验已经做好的acl,所以这一步省略


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

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

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

include "dianxin";;
include "wangtong";;

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的zone文件都加上子域的授权


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

$TTL 86400
@       IN      SOA     dx.     root. (
                        2011102401
                        30
                        60
                        120
                        86400 )
        IN      NS      dns.cluster.com.
son.cluster.com.        IN      NS      dns.son.cluster.com.
li      IN      A       2.2.2.35
dns     IN      A       2.2.2.36
www     IN      A       1.1.1.1
dns.son.cluster.com.    IN      A       2.2.2.37 

 


# vim /var/named/chroot/var/named/data/wt.cluster.com.zone
$TTL 86400
@       IN      SOA     wt.     root. (
                        2011102401
                        30
                        60
                        120
                        86400 )
        IN      NS      dns.cluster.com.
son.cluster.com.        IN      NS      dns.son.cluster.com.
li      IN      A       2.2.2.35
dns     IN      A       2.2.2.36
www     IN      A       2.2.2.2
dns.son.cluster.com.    IN      A       2.2.2.37

 

 

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

$TTL 86400
@       IN      SOA     others. root. (
                        2011102401
                        30
                        60
                        120
                        86400 )
        IN      NS      dns.cluster.com.
son.cluster.com.        IN      NS      dns.son.cluster.com.
li      IN      A       2.2.2.35
dns     IN      A       2.2.2.36
www     IN      A       3.3.3.3
dns.son.cluster.com.    IN      A       2.2.2.37

 


重启主域上的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/dianxin  2.2.2.37:/var/named/chroot/var/named/

# scp /var/named/chroot/var/named/wangtong  2.2.2.37:/var/named/chroot/var/named/

 

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

include "dianxin";;
include "wangtong";;

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.son. root. (
                        2011102401
                        30
                        60
                        120
                        86400 )
        IN      NS      dns.son.cluster.com.
dns     IN      A       2.2.2.37
www     IN      A       11.11.11.11

 

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

$TTL 86400
@       IN      SOA     dx.son. root. (
                        2011102401
                        30
                        60
                        120
                        86400 )
        IN      NS      dns.son.cluster.com.
dns     IN      A       2.2.2.37
www     IN      A       22.22.22.22

 

# vim /var/named/chroot/var/named/data/others.son.cluster.com.zone
$TTL 86400
@       IN      SOA     dx.son. root. (
                        2011102401
                        30
                        60
                        120
                        86400 )
        IN      NS      dns.son.cluster.com.
dns     IN      A       2.2.2.37
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]# dns.cluster.com  2.2.2.36
[root@li etc]# dns.son.cluster.com 2.2.2.37

 

当客户端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.36; };

--加完全局转发后,重启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.36外还要两个IP
# ifconfig eth0:0 2.2.2.30  netmask 255.255.255.0
# ifconfig eth0:1 2.2.2.31  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.36 port *; --表示客户端以电信的IP访问过来则是以2.2.2.36这个IP去查询子域
        zone "cluster.com" IN {
                type master;
                file "data/dx.cluster.com.zone";
        };
};


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

 

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

 

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

 

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


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


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


方法2:全局转发不要删,再把子域服务器也做成3个IP,也做一遍query-source的步骤

 

 

你可能感兴趣的:(dns)