一种本地DNS服务的系统和方法与流程

文档序号:12623398阅读:356来源:国知局
一种本地DNS服务的系统和方法与流程
本发明涉及网络通信,尤其涉及DNS服务。
背景技术
:DNS(DomainNameSystem,域名系统)是因特网上域名和IP地址相互映射的系统,其能够方便用户通过域名访问互联网,而不用记住期望访问的IP地址。DNS是互联网中绝大多数应用所实际采用的寻址方式。在企业内网或运营商内部部署的DNS服务被称作为本地DNS,本地DNS主要提供以下三种功能:(1)提供DNS缓存,加速域名解析,提升用户网络体验;(2)流量牵引,配合CDN(ContentDeliveryNetwork,内容分发网络)技术实现网络传输的优化和本地差异化服务;(3)DNS过滤,基于黑名单实现恶意网站防护,并对钓鱼网站进行拦截。然而,尽管本地DNS能够提供许多有效的功能,但是在部署本地DNS时存在很大的障碍。这是由于,现有的本地DNS服务往往采用“非透明”的方式来实现,也就是需要所有终端都配置DNS服务器地址才能生效。这样的配置过程非常繁琐,并且在一些终端不可控的场景下,无法采用非透明的方式来实现本地DNS服务。还有一部分现有的本地DNS服务采用“透明”方式而实现,采用“透明”的方式指的是不针对终端进行配置,也就是在不让终端知道本地DNS服务存在的情况下,使得DNS服务生效。然而,透明DNS服务通常需要在终端的流量必经之路上串接一个DNS服务器,通过捕获DNS请求报文并拼装相应的DNS响应报文实现,并且拼装的DNS响应报文还需要采用原IP欺骗技术让终端认为该响应来自其配置的DNS服务器。对于现有的透明DNS的方式而言,由于其配置简单不需要对客户端进行修改,因而具有广泛的应用场景,然而其串接部署方式却给网络的可靠性带来了隐患。这是由于在实施网络运营时,原则上应尽可能地减少串接的网络功能设备,以降低网络故障率。考虑到串接DNS服务器而带来的隐患,一些现有技术将本地的DNS服务装置布置在通信的旁路。然而,在这些现有技术中,为了实现DNS服务装置的旁路部署,通常会在终端的流量必经之路上部署分光器或者其他支持端口镜像的设备,以将终端访问互联网的流量镜像给本地DNS服务装置。即使这样将DNS服务装置布置在旁路,然而仍然避免不了需要在流量的路径上串接其他用于镜像流量的设备,因而仍然难以保证网络的可靠性。技术实现要素:因此,本发明的目的在于克服上述现有技术的缺陷,提供一种本地DNS服务的系统,包括:终端,用于向互联网发送数据包,所述数据包中包含DNS请求;OpenFlow交换机,用于接收来自所述终端的DNS请求并转发所述DNS请求;本地DNS服务装置,用于接收来自所述OpenFlow交换机的所述DNS请求,以及根据所述DNS请求生成DNS响应并传送到所述OpenFlow交换机;其中,所述OpenFlow交换机还用于将自本地DNS服务装置接收到的DNS响应转发给所述终端。优选地,根据所述的系统,其中还包括:OpenFlow控制器,用于向OpenFlow交换机下发流表项。优选地,根据所述的系统,其中所述OpenFlow控制器,还用于根据所述DNS请求生成用于修改所述DNS响应的源IP的流表项。优选地,根据所述的系统,其中所述本地DNS服务装置集成在所述OpenFlow控制器中。优选地,根据所述的系统,其中所述OpenFlow控制器,还用于根据所述DNS请求生成用于修改所述DNS请求的目的IP的流表项。优选地,根据所述的系统,其中所述OpenFlow控制器,还用于向所述OpenFlow交换机下发用于将目的端口为53的数据包转发至所述OpenFlow控制器的流表项。优选地,根据所述的系统,其中所述OpenFlow控制器,还用于向所述OpenFlow交换机下发用于将源端口为53的数据包转发至所述终端的流表项。并且,本发明还提供了一种基于所述系统的本地DNS服务的方法,包括:1)所述OpenFlow交换机根据流表项,将来自终端的全部数据包中的DNS请求发送至所述本地DNS服务装置;2)所述本地DNS服务装置将生成的DNS响应发送至所述OpenFlow交换机;3)所述OpenFlow交换机根据流表项,将所述DNS响应转发至所述终端。优选地,根据所述的方法,其中步骤3)之前还包括:2.5)所述OpenFlow交换机根据流表项,将所述DNS响应的源IP修改为所述DNS请求的目的IP。优选地,根据所述的方法,其中步骤1)之前还包括:所述OpenFlow交换机根据流表项,将所述DNS请求的目的IP修改为所述本地DNS服务装置的IP地址。优选地,根据所述的方法,其中步骤1)包括:所述OpenFlow交换机根据流表项,将目的端口为53的数据包作为所述DNS请求转发至所述OpenFlow控制器。优选地,根据所述的方法,其中步骤3)包括:所述OpenFlow交换机根据流表项,将源端口为53的数据包转发至所述终端。与现有技术相比,本发明的优点在于:相较于非透明的本地DNS服务,本发明无需对终端进行配置,其不必限制于为已经经过配置的终端提供DNS服务。相较于传统的透明的本地DNS服务,本发明基于软件定义技术,仅将DNS请求转发给DNS服务装置,而无需在终端的流量必经之路上串接一个设备以将来自终端的全部流量均镜像给DNS服务装置,由此避免了由串接设备而造成的安全问题;并且,在本发明中,DNS请求不会被发往互联网,因而阻断了来自互连网的DNS响应,从而避免其与由DNS服务装置所产生的DNS响应产生竞争。附图说明以下参照附图对本发明实施例作进一步说明,其中:图1是现有技术中将DNS服务装置部署在旁路的透明DNS方案的场景示意图;图2是OpenFlow技术所支持的匹配项的示意图;图3是根据本发明的一个实施例的集成DNS服务方案的系统示意图;图4是根据本发明的一个实施例的独立DNS服务方案的系统示意图。具体实施方式下面结合附图和具体实施方式对本发明作详细说明。图1示出了现有技术中,将DNS服务装置部署在旁路的透明DNS方案的场景图。如图1所示,在此类现有技术中需要部署诸如分光器或者其他支持端口镜像的设备,以将终端访问互联网的流量镜像给被部署在旁路的DNS服务装置。参考图1,当终端向互联网发送包含域名信息的DNS请求时,用于镜像流量的分光器将DNS请求的流量复制一份给DNS服务装置,使得DNS服务装置可以采用透明方式向终端回复DNS响应,从而使得终端能够根据该DNS相应获知与域名相对应的IP地址。同时,原本发送给互联网的DNS请求也会通过互联网向终端返回一个响应(即图1中的原DNS响应)。然而,由于没有阻断原DNS响应,其会与由在本地的DNS服务装置所产生的DNS响应产生竞争,并让终端发觉。在上述现有技术中,并没有考虑截断来自终端的DNS请求。发明人认为这是由于本领域技术人员认为终端可能会向互联网发送各种类型的数据包,而基于现有的大多数协议,只有在确定了数据包中的目的端口后才能够确定该数据包是不是DNS请求。并且,出于各种需求,终端常常需要发出大流量的各种数据包。因而,现有技术不会专门针对DNS服务而设置具有提取数据包端口功能的装置(这样的装置通常复杂度高,也容易发生故障),而仅是采用诸如分光器的装置来镜像流量,并将镜像得到的流量发送给DNS服务装置。可以看出,传统的将DNS服务装置设置在旁路的方案是向网络中增加串接的设备,而串接设备会为网络的可靠性带来隐患。近年来迅速发展的SDN(SoftwareDefinedNetwork,软件定义网络)技术具有网络可编程和集中控制的优势。其中最为成熟的OpenFlow已经开始了大量应用,越来越多的网络部署了支持OpenFlow的交换机。发明人发现可以将OpenFlow技术与本地DNS服务结合起来,从而利用OpenFlow技术以简单的方式来确定来自终端的流量是否属于DNS请求。此外,发明人还发现可以通过设置OpenFlow的流表项(即转发规则),阻断来自互联网的原DNS响应,以达到阻断来自互连网的响应的目的。为了实现上述过程,可以利用OpenFlow交换机和控制器以及用于提供DNS服务的装置,并且利用OpenFlow的流表设置专门的转发规则。在OpenFlow技术中,每个流表项代表一个转发规则,包括:匹配项、计数项和操作项。OpenFlow交换机依次比较各个流表项的匹配项,若匹配命中则执行该流表项的操作项,并跳转到下一个流表直至结束。如图2所示,OpenFlow能支持七层网络模型中一至四层各字段的匹配,包括入端口(IngressPort)、目的MAC地址(DstMAC)、源MAC地址(SrcMAC)、以太网类型(EtherType)、VLAN标签(VLANID)、VLAN优先级(VLANPriority)、源IP(SrcIP)、目的IP(DstIP)、IP协议(IPProto)、TCP/UDP源端口号(SrcPort)、TCP/UDP目的端口号(DstPort);计数项对匹配成功的包进行计数;操作项可以进行转发(Output)、上报控制器(Packet-in)、设置字段(Set-field)等操作。此外,OpenFlow控制器还可以采用Packet-out消息从OpenFlow交换机的特定端口发送数据包,以及Flow-mod消息对Openflow交换机的流表项进行添加、删除和修改。由此,发明人认为可以利用OpenFlow的这些流表项来实现旁路并且透明的DNS服务。如前文所述,将DNS服务的装置设置在旁路可以改善网络的可靠性,因此在本发明中也将DNS服务装置设置在旁路。根据本发明的一个实施例,将DNS服务装置设置为OpenFlow控制器上的一个功能模块,其具体实现方式将在下文的实施例1中详细介绍。根据本发明的另一个实施例,将DNS服务装置部署在一个单独的设备上,其具体实现方式将在下文的实施例2中详细介绍。实施例1:集成DNS服务技术方案图3示出了根据本发明的一个实施例将DNS服务装置集成在OpenFlow控制器中的系统。在该系统中,包括一个或者多个终端、一个或者多个OpenFlow交换机、以及通过局域网与OpenFlow交换机相连的OpenFlow控制器、以及集成在OpenFlow控制器中的DNS服务装置。其中,终端通过OpenFlow交换机将DNS请求发往集成在OpenFlow控制器中的DNS服务装置,一个OpenFlow控制器可以对应于多个OpenFlow交换机(在图3中仅示出了一对OpenFlow交换机和OpenFlow控制器)。其中,OpenFlow交换机提取来自终端的数据包的端口地址,根据端口地址判断该数据包是否为DNS请求,以将DNS请求发往DNS服务装置。由于合法DNS请求的目的端口为53,因此可以设置相应的OpenFlow流表项,使得目的端口为53时执行将该数据包转发至OpenFlow控制器的动作。例如,将流表项设置为:匹配项为Dst_Port=53,操作项为上报控制器(Packet-in)。下面参考图3,具体介绍本地DNS服务的方法,包括:1.终端向互联网发送DNS请求(1)。例如,一个终端的IP地址为192.168.1.1,其所期望访问的存在于互联网中的DNS服务器的IP地址为8.8.8.8(即终端希望通过访问该DNS服务器的IP地址来获得DNS服务),终端通过端口1234发出DNS请求。此时,通过终端发出的DNS请求数据包应当为:源IP目的IP源端口目的端口内容192.168.1.18.8.8.8123453DNS请求2.收到来自终端的数据包的OpenFlow交换机,根据流表项对所收到的数据包执行以下操作:如果数据包的目的端口为53,则将该数据包(即DNS请求)转发至集成有DNS服务装置的OpenFlow控制器(2)。此步骤可以通过OpenFlow的流表项来实现,从而拦截来自终端的全部数据包中的DNS请求数据包,并将拦截到的DNS请求数据包发往本地DNS服务装置。这里的本地DNS服务装置能够代替互联网中的DNS服务器提供DNS服务。继续上述步骤1中的实例,收到数据包的OpenFlow交换机,根据流表项将所收到的数据包中的DNS请求数据包上报给OpenFlow控制器。此时的流表项1是预先由OpenFlow控制器设定并下发给OpenFlow交换机,其内容为:匹配项操作项Dst_Port=53Packet-in这里的Packet-in是指将数据包上报给OpenFlow控制器。3.OpenFlow控制器上的DNS服务模块根据本地缓存生成与所收到的DNS请求相对应的DNS响应。如果本地缓存中不具有与DNS请求中的域名所对应的IP地址,则向互联网进行递归查询,如图3所示,向互联网进行寻址(i),以返回与DNS请求中的域名所对应的IP地址(ii)。继续上述实例,在本地缓存中具有相应的信息或者通过递归查询获得了相应的信息的情况下,DNS服务模块生成如下的DNS响应数据包,以避免终端察觉到DNS服务是由本地DNS服务装置提供,而不是由DNS服务器所提供:源IP目的IP源端口目的端口内容8.8.8.8192.168.1.1531234DNS响应并且,OpenFlow控制器向OpenFlow交换机下发Packet-out的控制消息,使得OpenFlow交换机向终端的指定端口发送DNS响应数据包。4.OpenFlow交换机向所述终端返回DNS响应(4)。继续上述实例,OpenFlow交换机通过指定端口(例如下联口)将收到的DNS响应数据包返回给终端。这里采用指定端口的目的在于,保证终端能够收到该DNS响应数据包。实施例2:独立DNS服务技术方案图4示出了根据本发明的另一个实施例将DNS服务装置独立地设置的系统。在该系统中,包括一个或者多个终端、一个或者多个OpenFlow交换机、以及通过局域网与OpenFlow交换机相连的OpenFlow控制器和独立部署的DNS服务装置。其中,终端通过OpenFlow交换机将DNS请求发往DNS服务装置,在该终端首次发出DNS请求时(或者OpenFlow交换机中不存在相应的流表项时),需要通过OpenFlow控制器产生新的流表项并下发给OpenFlow交换机。并且,一个OpenFlow控制器可以对应于多个OpenFlow交换机。与实施例1中相类似地,OpenFlow交换机提取来自终端的数据包的端口地址,根据端口地址判断该数据包是否为DNS请求,以将DNS请求发往DNS服务装置。下面参考图4,具体介绍根据本发明的独立设置DNS服务装置的本地DNS服务的方法,包括:1.终端向互联网发送DNS请求(a)。例如,一个终端的IP地址为192.168.1.1,其所期望访问的存在于互联网中的DNS服务器的IP地址为8.8.8.8(即终端希望通过访问该DNS服务器的IP地址来获得DNS服务),终端通过端口1234发出DNS请求。此时,通过终端发出的DNS请求数据包应当为:源IP目的IP源端口目的端口内容192.168.1.18.8.8.8123453DNS请求2.收到来自终端的数据包的OpenFlow交换机,根据流表项对所收到的数据包执行以下操作:如果数据包的目的端口为53,则将该数据包(即DNS请求)转发至OpenFlow控制器(b)。继续上述步骤1中的实例,此时的流表项1是预先由OpenFlow控制器设定并下发给OpenFlow交换机,其内容为:匹配项操作项Dst_Port=53Packet-in这里将DNS请求数据包发送至OpenFlow控制器的目的在于,使得OpenFlow控制器可以在随后的步骤中根据DNS请求数据包的IP头来生成新的流表项(即后述流表项2’和3’),并将所生成的新的流表项下发至OpenFlow交换机,从而利用所述新的流表项将DNS请求数据包转发至DNS服务装置,以及将由DNS服务装置生成的DNS响应数据包发送回终端。3.OpenFlow控制器根据所收到的DNS请求数据包的IP头,向OpenFlow交换机下发用于设置字段(Set-field)操作的流表项,以实现DNS请求数据包和DNS响应数据包的重新定向(c),并通过Packet-out消息指定通过OpenFlow交换机的上联口来发送DNS请求数据包(d)。假设,在本发明的实施例中,被独立设置的DNS服务装置的IP地址为IPa。并且,根据TCP/IP协议,数据包的IP头中包含数据包的源地址和目的地址,因此根据DNS请求数据包的IP头可以确定发出请求的终端的IP地址(即DNS请求数据包的源地址IPc)以及终端所期望访问的DNS服务器的IP地址(即DNS请求数据包的目的地址IPb)。据此生成将发送DNS请求数据包的目的地址IPb重新定向到DNS服务装置IPa的如下流表项,并将该流表项2’下发给OpenFlow交换机:匹配项操作项Src_IP=IPc,Dst_Port=53Set-Field:Dst_IP=IPa,Output:上联口利用上述流表项,可以使得OpenFlow交换机的上联口发送重新定向的DNS请求数据包。此外,为了不让终端察觉到DNS服务响应并非来自其所请求的DNS服务器的IP地址,还可以生成另一条相应的流表项并下发给OpenFlow交换机,以将由DNS服务装置生成的DNS响应数据包的源端口IPa重新定向为DNS请求数据包中的源地址IPb。据此生成的流表项3’应为:匹配项操作项Dst_IP=IPa,Src_Port=53Set-Field:Src_IP=IPb,Output:下联口利用上述流表项,可以使得OpenFlow交换机的下联口发送重新定向的DNS响应数据包。4.OpenFlow交换机向被独立设置的DNS服务装置转发依照流表项进行修改后的DNS请求数据包(e)。继续上述实例,OpenFlow控制器所收到的DNS请求数据包的源地址IPc为192.168.1.1,目的地址IPb为8.8.8.8(应理解,这里解析DNS请求数据包IP头的步骤还可以在步骤2中进行)。即,从终端发出的原DNS请求数据包为:根据步骤3中的流表项2’,OpenFlow控制器将该DNS请求数据包重新定向到DNS服务装置,假设该DNS服务装置的IP地址IPa为192.168.1.2。此时,经过修改的DNS请求数据包为:源IP目的IP源端口目的端口内容192.168.1.1192.168.1.2123453DNS请求5.被独立设置的DNS服务装置接收来自OpenFlow控制器的DNS请求数据包,并且根据本地缓存生成与所收到的DNS请求相对应的DNS响应,以将生成的DNS响应发送回OpenFlow交换机(f)。如果本地缓存中不具有与DNS请求中的域名所对应的IP地址,则向互联网进行递归查询,如图4中(i)(ii)。继续上述实例,在本地缓存中具有相应的信息或者通过递归查询获得了相应的信息的情况下,DNS服务装置生成如下的DNS响应数据包:源IP目的IP源端口目的端口内容192.168.1.2192.168.1.1531234DNS响应6.OpenFlow交换机将来自DNS服务装置的DNS响应数据包发送给终端(g)。这里,为了使得终端察觉不到DNS响应并非来自所请求的DNS服务器的IP地址,即为了实现透明DNS服务,可以相对应地利用在步骤3中由OpenFlow控制器下发的流表项3’,将DNS响应数据包的源地址IPa修改为终端所请求的地址IPb。继续上述实例,依据流表项,DNS响应数据包被修改为:源IP目的IP源端口目的端口内容8.8.8.8192.168.1.1531234DNS响应当OpenFlow交换机已经具有相应终端的一对重新定向的流表项(即流表项2和3)后,后续DNS服务无需阶段(b、c、d),只需阶段(a、e、f、g)。在本发明的实施例中,示出了基于OpenFlow的一种透明且旁路DNS服务的技术方案。可以看出,本发明不需要在终端的流量必经之路上串接一个设备,由此避免了由串接设备而造成的安全问题,并且,本发明还可以阻断来自互连网的DNS响应,以避免其与由DNS服务所产生的DNS响应产生竞争。最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管上文参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1