智能DNS返回多个IP问题的解决方法

发布时间:2019-11-10编辑:脚本学堂
本文介绍下,在配置智能dns时,遇到返回多个Ip的问题,本文提供一个参考方法,有需要的朋友不要错过。

原理介绍:
CDN系统的节点分布于不同的地域和运营商网络中,为了将用户访问请求分配到就近的CDN节点,广泛采用智能DNS调度。
网站的DNS服务器根据客户端所在的Local DNS的IP地址,进行判定用户所在地域与ISP,同时根据地域和ISP信息为用户选择合理的服务节点。
 
出于服务可用性、负载均衡等方面的考虑,为某一区域和ISP的用户返回请求域名的结果时,往往返回的是多个IP。
 
以www.sohu.com和www.google.com为例。
C:Documents and SettingsAdministrator>nslookup www.sohu.com
 

Server:  ns2.pub.bgctv.net.cn
Address:  58.30.131.33
Non-authoritative answer:
Name:    frontend-zw.a.sohu.com
Addresses:  220.181.26.7, 220.181.26.9, 220.181.118.87, 220.181.118.90
aliases:  www.sohu.com, d7.a.sohu.com

C:Documents and SettingsAdministrator>nslookup www.google.com
 

Server:  ns2.pub.bgctv.net.cn
Address:  58.30.131.33
Non-authoritative answer:
Name:    www.l.google.com
Addresses:  74.125.71.99, 74.125.71.103, 74.125.71.104, 74.125.71.105
          74.125.71.106, 74.125.71.147
Aliases:  www.google.com
 

对于www.sohu.com域名,local dns请求得到的结果为4个IP,而gogole为6个,另外,从IP地址来看,这些IP基本上是相邻的IP段,也就是实际的服务节点比较接近。
 
那客户端实际访问的是哪个IP呢?
 
这个取决于三个方面的因素:
 
1,DNS解析结果的生存期(TTL)
通过dig命令我们可以知道DNS结果的生存期,在生存期之内,Local DNS无需再次向域名的授权服务器再次发出解析请求,而是直接将缓存的结果返回给客户端。
 
另外,除了Local DNS之外,操作系统和浏览器也会缓存DNS解析结果,并且浏览器缓存的时间取决于浏览器的实现(IE默认是30分钟)。
 
例如:
C:Documents and SettingsAdministrator>ping www.sohu.com -n 1
 

Pinging frontend-zw.a.sohu.com [220.181.118.87] with 32 bytes of data:
Reply from 220.181.118.87: bytes=32 time=13ms TTL=52
Ping statistics for 220.181.118.87:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 13ms, Maximum = 13ms, Average = 13ms
C:Documents and SettingsAdministrator>time
 

当前时间: 21:30:29.95

输入新时间:
C:Documents and SettingsAdministrator>ping www.sohu.com -n 1
 

Pinging frontend-zw.a.sohu.com [220.181.118.87] with 32 bytes of data:
Reply from 220.181.118.87: bytes=32 time=10ms TTL=52
Ping statistics for 220.181.118.87:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 10ms, Maximum = 10ms, Average = 10ms
C:Documents and SettingsAdministrator>

通过ipconfig /flushdns可以强制清除浏览器和操作系统DNS缓存。
 
2,Local DNS返回多个IP的策略
Local DNS如何返回多个VIP原理上来说取决于Local DNS具体的实现策略,从目前测试的结果来看,大部分都是将多个IP一次性返回给客户端,但是以rr的方式将每个IP放到第一个返回的位置上。
 
还是以www.sohu.com为例
C:Documents and SettingsAdministrator>nslookup www.sohu.com
 

Server:  ns2.pub.bgctv.net.cn
Address:  58.30.131.33
Non-authoritative answer:
Name:    frontend-zw.a.sohu.com
Addresses:  220.181.26.7, 220.181.26.9, 220.181.118.87, 220.181.118.90
Aliases:  www.sohu.com, d7.a.sohu.com

C:Documents and SettingsAdministrator>nslookup www.sohu.com
 

Server:  ns2.pub.bgctv.net.cn
Address:  58.30.131.33
Non-authoritative answer:
Name:    frontend-zw.a.sohu.com
Addresses:  220.181.118.87, 220.181.118.90, 220.181.26.7, 220.181.26.9
Aliases:  www.sohu.com, d7.a.sohu.com

C:Documents and SettingsAdministrator>nslookup www.sohu.com
 

Server:  ns2.pub.bgctv.net.cn
Address:  58.30.131.33
Non-authoritative answer:
Name:    frontend-zw.a.sohu.com
Addresses:  220.181.118.90, 220.181.26.7, 220.181.26.9, 220.181.118.87
Aliases:  www.sohu.com, d7.a.sohu.com

C:Documents and SettingsAdministrator>nslookup www.sohu.com
 

Server:  ns2.pub.bgctv.net.cn
Address:  58.30.131.33
Non-authoritative answer:
Name:    frontend-zw.a.sohu.com
Addresses:  220.181.118.87, 220.181.118.90, 220.181.26.7, 220.181.26.9
Aliases:  www.sohu.com, d7.a.sohu.com

如果统计的次数足够多时,四个IP出现在第一个返回IP位置的次数接近相同。
 
3,DNS解析客户端对于多个IP的处理行为,根据笔者的测试,返回多个IP时,客户端每次获得的是第一个IP。
为了保证不受本机DNS缓存的影响,每次运行之前先清除DNS缓存:
ipconfig /flushdns
 

C:Documents and SettingsAdministrator>ping -n 1 www.sohu.com
Pinging frontend-zw.a.sohu.com [220.181.118.90] with 32 bytes of data:

C:Documents and SettingsAdministrator>ping -n 1 www.sohu.com
 

Pinging frontend-zw.a.sohu.com [220.181.118.87] with 32 bytes of data:

C:Documents and SettingsAdministrator>ping -n 1 www.sohu.com
 

Pinging frontend-zw.a.sohu.com [220.181.26.7] with 32 bytes of data: