内容概要:当你对Internet发布了内部网络中的服务时,可能你的用户会有抱怨:远程客户可以正常的访问你发布到Internet的服务,但是位于内部网络的用户却不能正常的访问这些服务。这个时候,你可能需要在你的网络中部署分离的DNS服务。
  
  当你对Internet发布了内部网络中的服务时,可能你的用户会有抱怨:远程客户可以正常的访问你发布到Internet的服务,但是位于内部网络的用户却不能访问这些服务,Why?
  
  如下图所示,内部网络地址范围为10.2.1.0/24,在ISA上对Internet发布了内部网络中Web 服务器(10.2.1.5)上的Web站点[url]www.isacn.org[/url],在Internet的DNS 服务器上解析[url]www.isacn.org[/url]为ISA服务器的外部IP地址39.1.1.8。
  
  2005.8.23.15.39.26.15.1.jpg

  此时,外部Internet上的客户(39.1.1.9)可以正常的访问ISA 防火墙上发布的Web站点[url]www.isacn.org[/url],
  
  2005.8.23.15.39.28.15.2.jpg

  但是内部网络中的SNat客户(10.2.1.9)却不可以,
  
  2005.8.23.15.41.8.15.3.jpg

   为什么呢?
  
  内部网络中的SNat客户(10.2.1.9)和外部的客户(39.1.1.9)使用的是相同的DNS服务器(39.1.1.9),当内部的SNat客户(10.2.1.9)解析域名[url]www.isacn.org[/url]时,结果和外部客户(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防火墙发起,如下图所示:
  
  2005.8.23.15.41.19.15.4.jpg

   但是这样会导致两个问题:
  
  被访问的服务器上的日志记录中的客户IP地址全部为ISA防火墙,这样不能做日志分析和统计;
  
  出现了网络访问回环,这样会极大的降低ISA防火墙的性能;
  
  所以,不推荐使用此办法。
  
  第二种方法就是使用分离的DNS服务(Split dns)。顾名思义,分离的DNS服务就是为外部客户和内部客户分别使用不同的DNS服务。对于外部的客户,使用Internet上的DNS服务,解析域名到ISA防火墙的外部接口的IP地址上;而对于内部客户,使用内部网络中的DNS服务,将此域名解析到内部网络中对应的服务器IP地址上,这样当内部网络中的客户访问此服务时,就不再需要通过ISA防火墙进行中转而直接进行访问。
  
  下图中所示就是分离的DNS服务结构,在内部网络中,增加了一台DNS服务器,并且配置内部网络中的客户使用此DNS服务;
  
  2005.8.23.15.43.8.15.6.jpg

  此时,通过将名字解析为对应服务器的内部网络中的IP地址,内部网络中的客户就可以正常的访问内部网络中的服务了。
  
2005.8.23.15.43.21.15.66.jpg