内容概要:当你对Internet发布了内部网络中的服务时,可能你的用户会有抱怨:远程客户可以正常的访问你发布到Internet的服务,但是位于内部网络的用户却不能正常的访问这些服务。这个时候,你可能需要在你的网络中部署分离的DNS服务。
当你对Internet发布了内部网络中的服务时,可能你的用户会有抱怨:远程客户可以正常的访问你发布到Internet的服务,但是位于内部网络的用户却不能访问这些服务,Why?
如下图所示,内部网络地址范围为10.2.1.0/24,在ISA上对Internet发布了内部网络中Web服务器(10.2.1.5)上的Web站点www.isacn.org,在Internet的DNS服务器上解析www.isacn.org为ISA服务器的外部IP地址39.1.1.8。
此时,外部Internet上的客户(39.1.1.9)可以正常的访问ISA防火墙上发布的Web站点www.isacn.org,
但是内部网络中的SNat客户(10.2.1.9)却不可以,
为什么呢?
内部网络中的SNat客户(10.2.1.9)和外部的客户(39.1.1.9)使用的是相同的DNS服务器(39.1.1.9),当内部的SNat客户(10.2.1.9)解析域名www.isacn.org时,结果和外部客户(39.1.1.9)一样,是ISA防火墙的外部接口IP地址39.1.1.8。于是,内部SNat客户(10.2.1.9)向ISA防火墙的外部接口(39.1.1.8)发起连接,当ISA防火墙接收到此连接请求时,会根据发布规则的设置转发给内部网络中的Web服务器(10.2.1.5)。
问题的关键在于,此时Web服务器(10.2.1.5)直接对SNat客户(10.2.1.9)的连接请求发出响应。ISA防火墙转发给Web服务器的连接请求的源地址是内部SNat客户的IP地址(10.2.1.9),Web服务器(10.2.1.5)识别出此IP地址(10.2.1.9)和自己位于相同的子网内,所以直接向此IP地址发送连接响应。但是Snat客户计算机(10.2.1.9)会丢弃Web服务器(10.2.1.5)直接发送给它的连接响应,因为它的连接请求是发送到ISA防火墙的外部IP地址(39.1.1.8)而不是Web服务器的IP地址(10.2.1.5)。对于Snat客户计算机而言,Web服务器发送给它的连接响应不是它发起的,所以它会丢弃此连接响应。
解决此问题的办法有两种:
第一种方法是在ISA防火墙的服务发布规则中,设置连接请求显示为从ISA防火墙发起,如下图所示:
但是这样会导致两个问题:
被访问的服务器上的日志记录中的客户IP地址全部为ISA防火墙,这样不能做日志分析和统计;
出现了网络访问回环,这样会极大的降低ISA防火墙的性能;
所以,不推荐使用此办法。
第二种方法就是使用分离的DNS服务(Split dns)。顾名思义,分离的DNS服务就是为外部客户和内部客户分别使用不同的DNS服务。对于外部的客户,使用Internet上的DNS服务,解析域名到ISA防火墙的外部接口的IP地址上;而对于内部客户,使用内部网络中的DNS服务,将此域名解析到内部网络中对应的服务器IP地址上,这样当内部网络中的客户访问此服务时,就不再需要通过ISA防火墙进行中转而直接进行访问。
下图中所示就是分离的DNS服务结构,在内部网络中,增加了一台DNS服务器,并且配置内部网络中的客户使用此DNS服务;
此时,通过将名字解析为对应服务器的内部网络中的IP地址,内部网络中的客户就可以正常的访问内部网络中的服务了。