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(同时又是主的从域) --课后题目