一、EDNS
EDNS(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不支持EDNS
LocalDNS迭代请求至权威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全局生效需要一定的时间,无法做到及时性。