一、EDNSEDNS(Extension Mechanisms for DNS),在遵循已有的DNS消息格式的基础上增加一些字段,来支持更多的DNS请求业务。
二、edns-client-subnet允许DNS resolver传递用户的ip地址给authoritative DNS server.以实现对客户端的精准调度。重新编译安装bind以实现支持edns-client-subnet
wget ftp://ftp.isc.org/isc/bind9/9.9.3/bind-9.9.3.tar.gz
tar xf bind-9.9.3.tar.gz
cd bind-9.9.3
wget http://wilmer.gaa.st/edns-client-subnet/bind-9.9.3-dig-edns-client-subnet-iana.diff
yum -y install patch
patch -p0 < bind-9.9.3-dig-edns-client-subnet-iana.diff
./configure --without-openssl
make
测试
./bin/dig/dig @ns1.google.com www.google.es +client=157.88.0.0/16
如下为抓到的数据包
三、智能DNS智能DNS,通过判断访问者的来源,为不同的访问者智能返回不同的IP地址,可使访问者在访问网站时可获取指定的IP地址,以提升访问速度、流量调度等效果。从概念可以知道,是否能获取访问者准确的IP地址和IP地址库的精准度是影响调度的决定性因素。域名解析过程如下图,一般情况下,客户端请求localDNS,localDNS最后请求权威DNS,如果权威DNS支持智能DNS解析和edns,会有如下几种情况:
1、如客户端LOCALDNS支持EDNS权威DNS在获取访问者来源IP时,获取edns-client-subnet扩展里携带的IP来判断访问者的地理位置,实现智能解析。2、如客户端LocalDNS不支持EDNSLocalDNS迭代请求至权威DNS,权威 DNS根据访问者LocalDNS出口IP来判断访问者的地址位置,实现智能解析。3、客户端使用的不是localDNS例如客户端配置的DNS是谷歌的8.8.8.8,那权威DNS获取的IP地址就是国外的地址,此时可能就无法调度到就近机房了,如:把北京的用户调度到深圳的机房。
四、BIND实现智能DNS
实现:客户端IP地址为10.30.20.74,请求test.ts.lan的解析请求,解析IP地址为192.168.1.1客户端IP地址为10.30.20.71,请求test.ts.lan的解析请求,解析IP地址为192.168.1.2
# vim /etc/named.conf
acl group1 {
10.30.20.74;
};
acl group2 {
10.30.20.71;
};
# vim /var/named/chroot/etc/view.conf
view "GROUP1" {
match-clients { group1; };
zone "ts.lan" {
type master;
file "group1.ts.lan.zone";
};
};
view "GROUP2" {
match-clients { group2; };
zone "ts.lan" {
type master;
file "group2.ts.lan.zone";
};
};
# vim group1.ts.lan.zone
$ORIGIN .
$TTL 3600 ; 1 hour
ts.lan IN SOA op.ts.lan. dns.ts.lan. (
2001 ; serial
900 ; refresh (15 minutes)
600 ; retry (10 minutes)
86400 ; expire (1 day)
3600 ; minimum (1 hour)
)
NS op.ts.lan.
$ORIGIN ts.lan.
op A 10.30.20.118
test A 192.168.1.1
# vim group2.ts.lan.zone
$ORIGIN .
$TTL 3600 ; 1 hour
ts.lan IN SOA op.ts.lan. dns.ts.lan. (
2001 ; serial
900 ; refresh (15 minutes)
600 ; retry (10 minutes)
86400 ; expire (1 day)
3600 ; minimum (1 hour)
)
NS op.ts.lan.
$ORIGIN ts.lan.
op A 10.30.20.118
test A 192.168.1.2
# systemctl reload named
在客户端10.30.20.74测试
# host test.ts.lan 10.30.20.118
Using domain server:
Name: 10.30.20.118
Address: 10.30.20.118#53
Aliases:
test.ts.lan has address 192.168.1.1
在客户端10.30.20.71测试
# host test.ts.lan 10.30.20.118
Using domain server:
Name: 10.30.20.118
Address: 10.30.20.118#53
Aliases:
test.ts.lan has address 192.168.1.2
五、全局流量调度
上图为流量调度的逻辑架构图,实现场景如下所述:1、为加快访问速度,将不同地区的用户解析到就近机房,如:南方用户解析到南方的机房,北方用户解析到北方机房2、同一个地区的会建设多个机房,按照权重配比进行负载均衡,如:按照权重配比,南方用户会部分解析到广州机房,部分用户解析到深圳机房,实现负载均衡。3、故障转移,健康检测模块(ICMP、TCP、HTTP)对所有机房进行健康探测,当出现机房异常时,实现调度到其他机房,实现流量的全局调度。如:广州机房出现故障,将南方用户调度的深圳机房。这里有一个问题,就是DNS全局生效需要一定的时间,无法做到及时性。