域环境双ISP接入内部DNS服务器问题的探讨与解决方法

2017-07-10 16:35张天国
电脑知识与技术 2017年14期
关键词:路由器防火墙数据包

张天国

摘要:为了在内网为域模式、ISP网络接入的环境下,当两个ISP线路都正常时,不同ISP网络中的用户使用对应的网络地址来访问内网服务器,而当一条线路不正常时,相应线路的ISP网络中用户能自动切换到另一条正常的线路,策略路由技术与静态网络地址转换带DNS应答修改技术相结合的方法被提出。结果表明,此方法可行。

关键词:活动目录;Y&ISP接入;链路跟踪;策略路由;智能DNS;链路负载平衡

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2017)14-0025-02

1概述

双ISP接人是为了解决跨运营商网络访问时运营商之间相互限制所导致的带宽瓶颈问题,为实现双ISP接入时外网快速访问园区网内部资源服务器,许多论文报导都是采用策略路由技术与名称服务器BIND9的VIEW功能相结合的方法,但是以上重復的报导在效果上都存在一个问题——由于BIND的VIEW功能只能根据DNS请求包的源地址来作应答的,比如请求包来源为电信网络的则返回电信网内的IP地址,但是BIND9并不能检测其所返回给用户的地址是否用户可以访问,所以,当接入ISP网络的两条线路中的其中的一条出现故障时,会造成相应ISP网络中的用户不能访问园区网内的Web服务器。为解决这种问题,邱建波提出了在DNS服务器上监视各条ISP链路通断状况,再根据监视结果用计划任务crontab来自动切换BIND的配置文件的方法。虽然这种DNS服务器对外服务时能实现用户就近访问和线路故障切换,但是如果内网是域模式时还得要另外部署与AD集成的Windows DNS服务器。目前还没有见到域模式双ISP接人环境下只使用Windows DNS服务器来解决外网快速访问内网资源服务器的方法相关报道。要适合内网为域模式网络环境,并且做到内网服务器提供的服务对外网总是可用,可以采用以下方法:一是采用链路负载平衡设备,这类设备对内部DNS服务器没有要求,能探测各条ISP链路的状态,根据探测结果智能地修改DNS应答包,保证当各ISP接入链路正常时,各个ISP网络的用户使用相对应的ISP网络地址快速访问内网内部服务器,而当某条ISP接入链路出现故障时,则会把相应ISP用户的DNS查询解析到另外一个正常的ISP地址,保证外网用户总是能访问内网服务器。但是这种方法是要增加硬件投人;二是本文将要提出的方法,即采用链路跟踪、策略路由、NAT和DNS应答修改技术相结合的方法,这不需要DNS服务器BIND的VIEW功能,可以用任何DNS服务器。

2方法

DNS的解析过程大概是这样的:假定用户向本地的DNS服务器发送www.company.com域名请求,如果它有记录或缓存中有,则返回给用户,如果没有则DNS服务器转发查询或查询根域服务器(视服务器的配置),这里假定DNS服务器进行根查询,从根域DNS服务器得到到回答只能是com域的NS记录,那么本地DNS服务器再查询corn域的DNS服务器,同样corn域的DNS服务器只能告诉二级域company.corn的NS记录,如果本地DNS服务器得到的回答是多个Ns记录,那么本地DNS服务器先向其中的一个NS发送请求(使用顺序取决于本地DNS解析器的配置),如果在超时时间内没有响应,则向下一个NS查询,直到有一个DNS服务器给出了应答。查询第一个DNS服务器如果没有响应则自动查询第二个、第三个DNS服务器,DNS查询的这种行为是本文所提出的方法所依赖的。

防火墙一般都具有DNS应答包修改的功能,可以把DNS应答包中的A记录修改成网络管理员所指定的IP地址。当然,所有防火墙都有网络地址转换(NAT)功能。本方法也依赖这两个功能。

策略路由在不同的路由器上功能略有不同,有的只能根据源地址来选路,有的可以根据源目地址、源目端口、协议这五元组来选路,还有的路由器能进一步根据上游链路质量来决定是否起用这条策略路由。而链路质量的监测则依赖服务等级协议(Service Level Agreement,SLA)。本方法要求做策略路由的路由器支持链路跟踪功能。并且策略路由配置的要求为:(参见图1)当内部路由器到ISP-A的DNS服务器DNS-A之间的链路正常时,所有去往ISP-A的数据包从防火墙FW-A走;同样,当内部路由器到ISP-B的DNS服务器之间的链路正常时,所有去往ISP-B的数据包都转发给防火墙B;而当其中的一条链路不正常时,所有的数据包都从另一条正常的链路所连接的防火墙转发。

假定某企业从两个不同的ISP分别申请了地址100.0.0.53和200.0.0.53给内部DNS服务器使用,还分别向两个ISP申请了100.0.0.80和200.0.0.80两个地址给内部Web服务器使用,购买域名company.com时注册了两个NS地址100.0.0.53和200.0.0.53。内部Web服务器所承载网站的域名是www.compa-ny.com,内部Web服务器真实地址是10.0.0.80,在防火墙FW_A上的把它静态映射为100.0.0.80,在防火墙FW_B上静态映射为200.0.0.80。内部DNS服务器真实地址是10.0.0.53,在防火墙FW_A上静态映射为100.0.0.53,在防火墙FW_B上静态映射地址为200.0.0.53。在内部与AD集成的Windows DNS服务器上,对域名www.company.com的A记录配置为内网地址10.0.0.80。

下面说明原理:

参见图1,当外网用户A在浏览器输入http:∥www.company.com/访问内网Web网站时,首先要向本地DNS服务器(DNS-A)请求解析域名。如果DNS-A缓存中没有记录并假定它不转发查询,则它向根域DNS服务器查询,根域DNS服务器返回com域的Ns记录,接着它就向com域的DNS服务器查询,com域的DNS服务器返回company.com域的NS记录,也就是该企业注册的100.0.0.53和200.0.0.53,于是就向其中的一个服务器查询。下面分两种情况来说明:

一种情况是它先向100.0.0.53地址来请求域名www.compa-ny.com的解析,防火墙A收到这个请求包后就把目的地址转换为10.0.0.53,当内部DNS服务器收到这个请求包后返回应答包,应答包中的A记录是10.0.0.80,源地址是10.0.0.53目的地址是DNS-A的地址,这个应答包经过路由器时,路由器根据策略路由把数据包转发给防火墙A,而防火墙A会把其中的A记录修改为100.0.0.80,并把源地址转换为100.0.0.53,这样,DNS-A得到www.company.eom的解析是100.0.0.80,它再把结果返回给用户A,那么用户A将以100.0.0.80来访问内部Web服务器10.0.0.80而不是以200.0.0.80来访问,也就是就近访问。另一种情况是,如果ISP-A的DNS服务器DNS-A先使用的是200.0.0.53来请求域名解析,当防火墙B收到这个请求包后会把目的地址转换为10.0.0.53,内部DNS服务器收到请求包将作出响应,而应答包经过内部路由器时会根据策略路由把它发给防火墙A,因为目的地址是位于ISP-A网络,而防火墙A会把源地址转换为100.0.0.53后再发出去,DNS-A收到这个包后由于源地址是100.0.0.53而不是200.0.0.53所以丢弃这个包,DNS解析行为是如果查询第一个NS没有响应则依次向下面的NS查询,那么DNS-A将会向另一个地址100.0.0.53发送域名解析请求。所以不管DNS-A先使用哪个地址来进行域名解析,最终它能成功得到解析的是向100.0.0.53这个地址发送的域名解析请求,而得到的解析结果一定是100.0.0.80。同理,对于另外的一个ISP网络中的用户,对域名www.company.com得到的解析结果一定是200.0.0.80。这样每个ISP网络中的用户都是就近访问而不是绕ISP网络的。

以上讨论的是当两条链路都正常时的情况,如果两条链路(DNS-A到FW-A到路由器、DNS-B到FW-B到路由器)其中的一条出现故障,外网用户对内部服务器的访问流量会自动迁移到另一条正常的链路,下面给出解释:

假设DNS-A到防火墙A到路由器这条链路出现了问题,那么ISP-A中的用户此时无论如何也不能用100.0.0.80来访问www.company.com了。当用户A的DNS缓存记录超时后会重新向DNS-A发送域名解析请求,同样地DNS-A缓存中的www.company.com對应100.0.0.80的记录也会超时,TTL到期后它如果向100.0.0.53发送请求肯定收不到应答的一因为链路问题,所以DNS-A只能向200.0.0.53这个地址发送域名解析请求才可能有应答。简单说明一下此时数据包的转发过程:当防火墙B收到ISP-A网络中的DNS-A的发送的域名解析请求包后,将目的地址~0.0.0.53转换为10.0.0.53,之后将它转发给内部路由器,路由器再转发给内部DNS服务器10.0.0.53,DNS服务器作出响应,应答包的源地址为10.0.0.53目的地址为DNS-A的地址,数据包内的载荷部分的A记录为www.company.com=10.0.0.80,这个应答包经过路由器时路由器查找路由表,由于此时去往ISP-A的链路不通,所以根据策略路由将数据转发给防火墙FW-B,FW-B将数据包载荷中A记录修改为www.com-pany.com=200.0.0.80,并将源地址10.0.0.53转换为200.0.0.53,所以DNS-A这时得到的解析结果是200.0.0.80而不是100.0.0.80,并将这个结果返回给用户A。这条链路的故障对另外一个ISP网络中的用户是没有影响的,所以所有的外网用户的访问流量都迁移到这条正常的链路。如果那条故障的链路又恢复了,那么又要等到DNS缓存中的记录超时后重新进行域名解析,ISP-A网络中的用户得到的解析结果又变成100.0.0.80。所以这种方法能够实现链路故障自动切换。

3主要的配置

路由器上的track的配置、sla的配置以及策略路由的配置本文省略,具体请参照文献[7],不过sla监视不要单纯地监视ISP的一个DNS服务器,因为一个DNS服务器如果没有响应不代表这条链路有问题,也许只是这台DNS服务器出现了问题。因而要用sla配置中布尔逻辑或[8]来监视多台DNS服务器。

在防火墙A上对DNS服务器地址的静态映射(不一定要求静态地址转换,也可以使用端口映射)(本文的配置命令以ASA防火墙软件版本8.4(2)为例):

object network DNSserver

host 10.0.0.53

nat finside,outsidel static 100.0.0.53 ∥把内部DNS服务器地址10.0.0.53静态映射到公网地址100.0.0.53

对Web服务器的地址转换和DNS记录修改的配置如下(由于要求DNS记录修改,只能使用静态NAT):

object network WebServer

host 10.0.0.80

nat(inside,outside)static 100.0.0.80 dns∥把内部Web服务器地址10.0.0.80映射到公网地址100.0.0.80,后面跟的参数“dns”是用于告诉应用检查引擎修改DNS应答包内的A记录的,如果有DNS应答包从inside接口进来,就把A记录10.0.0.80修改为100.0.0.80,如果有公网上DNS服务器的应答包从outside接口进来,如果有100.0.0.80的A记录,应用检查引擎将其修改为10.0.0.80

对DNS查询流量与Web访问流量的放行配置如下:

access-hst 101 permit udp any host 10.0.0.53 eq domain

access-list 101 permit tcp any host 10.0.0.80 eq http

access-group 101 in interface outside ∥在FW_A上的out-side接口放行DNS查询流量与Web访问流量。

4测试结果与分析

经过实验测试表明,当两条ISP链路都正常时,各个ISP网络内的用户都是向相应网络的地址来访问内部web服务器,即就近访问,而当某条链路出现故障后,相应ISP网络中的用户会被迫自动选择另外ISP网络地址进行访问。另外,对于内部用户,无论用户采用的是内部DNS服务器,还是ISP_A或ISP_B的DNS服务器,对域名www.company.com的解析最终结果都是内部地址10.0.0.80,因而并不影响内网用户对内部Web服务器的访问,并且对内部DNS服务器没有要求,可以用Windows的DNS服务器,因而能适用于域模式的内网。但是,在发生链路切换时,由于用户浏览器还是使用上次域名解析结果来访问Web服务器,会造成短时间不能访问内部Web服务器,其时间长短与内部DNS服务器上对域名www.company.com的A记录的TTL设置长短相关,这里建议设置不要超过10秒。除了与TTL设置相关外,还与sla的监视频率设置有关,如果周期过长,则路由表不能及时与链路状况保持一致。本方法要求防火墙支持静态NAT与DNS应答修改功能,许多防火墙都支持这个功能,另外,内部路由器要求支持基于目的地址的策略路由和链路跟踪的功能。本方法不能只用一个防火墙的两个接口来分别接人两个ISP,因为在这种拓扑下策略路由要在防火墙上做,外网用户访问内部DNS服务器时,防火墙会建立会话,那么DNS服务器返回的数据包就会绕过策略路由而直接根据所建立的会话来选择出接口,状态防火墙的这种行为设备厂商一般把它叫做“快路径”,而本方法要求内部DNS服务器返回的数据包都要经过策略路由来选路。

猜你喜欢
路由器防火墙数据包
买千兆路由器看接口参数
路由器每天都要关
构建防控金融风险“防火墙”
SmartSniff
无线路由器的保养方法
在舌尖上筑牢抵御“僵尸肉”的防火墙
下一代防火墙要做的十件事
视觉注意的数据包优先级排序策略研究
无线路由器辐射可忽略
移动IPV6在改进数据包发送路径模型下性能分析