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的步骤