累积:技海拾贝|Cumulation
浅谈通过GTM进行DNS的智能解析
文:东软信息技术服务有限公司 马新元
什么是DNS的智能解析
目前中国的网络南北割据,电信、网通等不同线路的互访颇为困难,而DNS智能解析是针对目前国内电信、联通以及移动等线路互联互通提供的一种解决方案。具备智能解析能力的DNS除了具备一般的基本DNS解析功能外,还可以自动识别DNS请求发送者的来源,并根据其将域名智能的解析到双线路机器的网通或电信的IP或位于不同IDC中机器的IP, 以便浏览者就近访问你的网站,而不会因为线路不同而导致访问慢。
DNS智能解析的原理
DNS智能解析的基本原理是识别用户的来路,并且根据用户的来路,通过独有的算法,把用户分配到网站离用户最近的服务器上。例如我们将域名托管在可进行免费DNS智能查询的DNSP
od,则DNSPod可根据用户的来源,让网通线路的用户访问到网站的网通IP或者让沈阳的用户访问到位于沈阳IDC机房中的服务器(这一切对用户而言是无感知的),而不需要像早年间很多网站为了保证不同线路的访问质量,建立一个网站的若干镜像站,让用户手动去选择自己要访问的站点。
智能DNS的实现方式有软件和硬件,软件中有久负盛名的bind,而硬件中有F5 的GTM 。同时也有提供DNS服务的DNSPod等。
利用F5 GTM进行DNS的智能解析
F5 GTM全称为Global Traffic Management即全局传输管理,它是一种广域网负载均衡设备,以DNS解析为主要工作,可处理多个数据中心的流量分配。与它相对应的还有LTM 全称为Local Traffic Management即本地传输管理,是一种局域网负载均衡设备,以TCP/UDP流量分发处理、优化为主要工作,主要处理在一个数据中心内的流量分配,可以处理到流量的七层内容。在本文中我们主要讨论如何利用GTM进行域名的智能解析。
在现实的生产环境中,一个有DNS智能解析需求的网站,其服务器往往分布在不同的IDC机
房中,这些IDC使用不同的线路对外提供服务;或者其服务器位于同一个IDC机房中,但该IDC机房为该服务器提供了不同线路的出口。对应这种情况,在GTM中将使用某一线路的数据中心抽象为一个概念Datacenter。在一个Datacenter中包含了大量的服务器,GTM中将其抽象为一个概念Server。每个服务器可以配置一个或多个IP,对应具体的这些IP以及相关的端口,GTM将其抽象为一个概念Virtual Server。Datacenter、Server、Virtual Server ,GTM通过以上三个概念完成了对IDC机房中物理网络的描述。
那么具体的Datacenter、Server、Virtual Server在GTM中担任何种角呢?
• Virtual Server:GTM中的最小object,是Server和Pool的逻辑成员,其IP即为GTM最终提供解析的结果。
• Server:用来代表一个服务器实体,类似于LTM中的node,有bigip server,non-bigip server 两类,隶属于Datacenter中,同一server不应同时存在于两个Datacenter中。
• Datacenter:组织Server的容器,表示一个具体的数据中心。
在完成对物理的网络的标示以后,即涉及到如何将不同用户所请求的域名地址正确的映射到
具体的IP上。这里就涉及到GTM的智能解析方式。GTM通过wide IP和pool 来实现这一功能。
那么Wide IP和Pool又是何方神圣?
• Pool:是一个资源池,用来组织Virtual Server,是Wide IP的配置要素,同一Virtual Server可以同时属于多个Pool。
• Wide IP:对外呈现GTM所负载的智能域名,其下包含一个或多个Pool。
说完了这些比较枯燥的概念,我们用一个具体的例子来说明GTM智能解析的工作模式。
假设情景:我们有一个网站www.somewhere,该网站在北京和上海分别放置了一台镜像服务器对外提供服务。北京的服务器IP为202.96.1.2是一个网通地址,上海的服务器IP为116.238.1.2是一个电信地址。现在我们希望使用网通线路的用户在访问这个网站时,实际访问到的是北京服务器的IP地址202.96.1.2,电信线路的用户在访问这个网站时实际访问到的是上海服务器的IP地址116.238.1.2。(以上域名及IP均为虚构,特此说明)
GTM如何来完成这个需求呢:
大体上分为两个阶段:第一阶段,描述物理资源;第二阶段,制定智能解析策略。以下为具体步骤:
第一步:建立电信和网通线路的Datacenter
首先我们需要在从我们的网络运营商那里获得网通和电信线路的地址池,并在GTM中建立对应的地址池CNC-Address、CT-Address。其次,我们将分别建立对应网通和电信线路的Datacenter: DC_CNC,DC_CT。最后我们将网通地址池CNC-Address与网通Datacenter相对应 ,电信地址池CT-Address与电信Datacenter相对应,这样就基本完成了Datacenter的建立。
第二步:建立电信和网通线路的Server
我们在GTM中创建一个Server来表示网通线路的服务器,命名为server_cnc,将其加入到网通Datacenter DC_CNC中,表明该服务器是属于网通Datacenter的,并为其创建IP地址为202.96.1.2的Virtual Server用来作为GTM最终提供解析的结果。
同理,我们创建电信线路的server,命名为server_ct,并将其加入电信Datacenter DC_CT中,
并为其创建IP地址为116.238.1.2的Virtual Server用来作为GTM最终提供解析的结果。
通过以上两步,我们完成了对物理资源的描述,在以下的步骤中,我们将进行智能解析策略的制定。
第三步:创建资源池Pool
我们在GTM创建一个资源池Pool_www.somewhere , 并将刚才建立的Virtual Server:server_cnc、server_ct加入到这个池中。在这个新建立的资源池中我们将为这些Virtual Server创建规则,以确定当DNS请求被本资源池响应时,具体将哪个Virtual Server的IP作为解析结果返回给用户。
在本例中,我们将按照Topology的方式来决定具体将哪个Virtual Server的IP提供给用户。
所谓Topology的方式,即按照发起DNS解析请求者的IP的归属来确定使用哪些Virtual Server来进行响应。GTM中所定义的Topology可以在Continent/Country/IP Subnet/ISP四个层次进行传入IP的分类。本例中我们创建了网通线路和电信线路的地址池,那么用户发起的DNS解析请求就将按照用户的IP属于哪一个地址池,来确定是将电信服务器还是网通服务器的IP返
回给用户。
第四步:建立域名到资源池的映射。
最后我们创建一个Wide IP :www.somewhere,表明:对外该GTM接受所有对该域名的查询请求,并将第三步建立的资源池Pool_www.somewhere添加到该Wide IP中。表明所有对www.somewhere这个域名的解析都将由资源池Pool_www.somewhere进行。
至此,一个最简化版本的智能解析就完成了。
此时一个网通线路的用户在浏览器中输入网站网址www.somewhere,用户的所配置的网通DNS将向我们的GTM发起该域名的查询请求。我们的GTM在接收到该查询请求后,将使用资源池Pool_www.somewhere对该域名进行解析,由于该域名查询请求的发起者IP地址包含在网通地址池中,GTM就将网通线路服务器的IP地址返回给发起查询的网通DNS,网通DNS进一步将该IP地址作为查询结果返回给该用户。这样用户事实上最终访问到的服务器即为该网站的网通线路服务器,但整个过程对于用户而言是无感知的。
单纯从以上的DNS智能解析方式来说,GTM的智能解析方式与一般的bind服务器通过访问控制列表结合视图来进行智能解析的方式差别并不大。但在实际的应用中,GTM提供了几种比较有特点的功能以提高其智能解析能力。由于篇幅所限,本文将就比较有代表性的功能Health Monitors 以及iRule进行一下说明。其他的系统特性,可以在ask.f5网站上获取到最新的资料。
首先介绍一下Health Monitor
Health Monitor一般译为健康检查,在 GTM中将会在Pool,以及Server中加入对Virtual Server的健康检查,以确定该服务器是否可以正常的对外提供服务。例如在Pool中使用了健康检查后,如通过健康检查,某Virtual Server的服务处于不可用状态,Pool将会利用已定义的负载平衡策略将其他可用的IP返回给用户,以保证在部分服务器宕机的情况下,用户仍可以获得所需服务,从而保证用户的使用体验。
GTM系统中默认创建了几种健康检查的脚本,但是我们也可以根据需要进行自定义健康检查脚本的编写,自定义的健康检查脚本可以根据检测内容的不同,定义检测的类型、时间周期、超时标准,服务端口等信息,满足用户的检测需求。
下面简单介绍一下iRule
通过使用F5由事件驱动的iRule,可以定制全局流量的动态分配。GTM可以深入查看DNS消息,向期望的数据中心、池或虚拟服务器分配应用流量。这一功能可以减少延迟,加强针对恶意攻击的保护,并改进应用性能。在GTM中iRules主要使用在Wide IP模块中,当我们定义了多个资源池的时候,可以设定iRule,让符合特定条件的流量连接到特定的资源池进行处理。这里所指的特定条件可以是DNS查询请求发起者的IP地址,也可以是URI这样的通用资源标识符。iRule规则使用的语法为TCL,目前GTM可以支持TCL8.4版本的语法。
以下使用一个小例子来说明免费建立自己网站iRules的用法:
下面是一个简单的iRule
when DNS_REQUEST {
if { [IP::addr [IP::client_addr] equals 10.10.10.10] } {
pool my_pool
}
}
当我们为一个Wide IP添加了这样的iRule以后,每当这个Wide IP监听到DNS请求发送者的IP地址是10.10.10.10,就会将这个请求包传递给my_pool来进行处理。可见,使用iRule我们将可以更加灵活的定制智能解析策略。
使用智能解析时面临的问题
GTM是通过用户的来源IP来返回不同的解释IP,而实际上,并不是实际用户直接访问我们的 DNS,而是用户所使用的DNS(比如说沈阳ADSL用户的默认DNS)负责访问我们的DNS,如果用户自行修改了DNS,比如说电信的用户硬要用网通的DNS,或者网通的用户使用国外的DNS(比如opendns之类的),就会导致判断失误。对于这种问题,目前尚无较好的解决方法。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论