校园网服务器回流通信问题分析及解决方案

2011-12-29 00:00:00王建朝
中国信息技术教育 2011年7期


  摘要 :本文分析了在只有一个公网IP的校园网中,校园内部用户通过服务器公网域名记录访问内部服务器失败的原因(即回流通信问题),同时也提供了几种常见设备下的回流通信问题解决方案。
  关键词 :回流通信;源地址转换(Source NAT);目的地址转换(Destination NAT);m0n0wall RouterOS
  
  ● 引言
  现今,各级各类学校大都建有自己的网站,通过网站来宣传展示自己。规模大、实力强的学校,可以申请较多的公网IP,同时使用较为完善的校园网网络架构。而一些规模、实力较小的学校,可能只申请一个公网IP,既负责内部用户上网时的源地址转换,又负责发布学校内部的服务器,此类网络拓扑结构如图1所示。
  这种拓扑结构下的接入设备,既提供内部用户上网时的源地址转换功能(Source NAT),又提供将内部的Web服务器、DNS服务器发布到公网的功能(Destination NAT)。当内部PC通过http://www.abc.cn访问内部的Web服务器时的通信就是回流通信。当NAT接入设备上的NAT配置不妥时,就会出现回流通信问题,此时内部PC不能通过http://www.abc.cn访问内部的Web服务器。当然,内部用户可以通过Web服务器的内网IP地址(192.168.1.10)来直接访问。但是,如果内部服务器使用主机头发布多个80端口网站时,此时通过IP地址可能不能访问任何网站。
  ● 回流通信过程
  如图2所示,内部服务器的80端口由NAT设备映射至外部。用户可以通过NAT设备的外部接口(WAN)地址(202.102.1.1)访问内部Web服务器。当内部PC通过IP地址(202.102.1.1)访问内部Web服务器时,通信过程如下(即图2中标识的①②③④)。
  
  (1)内部PC向202.102.1.1的80端口发出通信请求,由于此目的地址不和自己在同一网段,因此通信请求将被转发至网关,即NAT设备。
  (2)NAT设备发现此通信是自己80端口的入站通信,于是查阅自己的NAT映射表,将通信请求转发到内部服务器80端口。
  (3)内部服务器应答此请求通信,将应答数据返回NAT设备。
  (4)NAT设备查阅先前执行的NAT映射记录,将此应答通信转发到内部PC。
  经由以上四步通信过程,内部PC与Web服务器间的一次完整的TCP通信完成。
  ● 回流通信失败的原因分析
  我们从图2所示的回流通信过程中可以看出,请求和应答通信均经过NAT设备,且内部PC与Web服务器间通信数据包的源或目的IP地址需经NAT设备修改。如果请求和应答通信中有一个不经过NAT设备,那么NAT设备就无法对通信数据包的源或目的地址进行修改。根据TCP/IP协议簇中传输层的通信原理,此通信必定失败。以下详细展示、分析这一通信过程。
  eaB/3NtLi/tmeQa4ySIhPw==
  (1)内部PC向202.102.1.1的80端口发出通信请求,由于此目的地址不和自己在同一网段,因此通信将被转发至PC的网关,即NAT设备。
  (2)请求通信数据包到达NAT设备后,NAT设备根据自己的Destination NAT映射条目将数据包的目的地址修改为内部服务器的IP地址,然后将数据包经LAN接口转发到内部Web服务器。转发数据包在出NAT设备的LAN接口时,数据包的源地址可以保持内部PCIP地址不变或更改为NAT设备的WAN接口IP。
  (3)内部Web服务器的应答通信过程,取决于NAT设备在转发请求数据包出LAN接口时,将请求数据包的源地址做怎样的处理。
  如果NAT设备在转发请求通信数据包时,将数据包源地址修改为NAT设备的WAN接口IP地址,那么内部Web服务器应答数据包的目的地址就是NAT设备的WAN接口IP,即应答通信经过NAT设备。NAT设备会根据事先已有的NAT映射记录对数据包的源地址和目的地址进行转换,进而将数据转发到内部PC,通信成功。
  如果NAT设备转发请求通信数据包时不更改通信请求数据包的源地址,即仍是PC的IP地址,那么内部Web服务器的应答数据包的目的地址就是内部PC的IP地址。由于内部Web服务器IP地址和内部PC的IP地址在同一网段,根据TCP/IP协议簇下的以太网通信机制,此通信将通过链路层在两者之间交付,也就是说应答通信将不经过NAT设备。应答数据包到达内部PC时,数据包的源地址是内部Web服务器的内部IP地址。根据TCP通信机理,内部PC应该接收到的源地址是NAT设备外部接口IP地址的应答包,而非源地址是Web服务器内部IP地址的应答包,通信将失败。
  从上述分析我们可以看出,导致回流通信问题产生的主要原因是:NAT设备在转发由内部经NAT设备到内部服务器的数据包时,没有将数据包的源地址改为自己相应的地址,从而导致到达内部服务器的通信数据包的源地址仍然是内部计算的IP地址,进而在应答时,内部服务器直接应答给内部计算,相应的数据包地址没有被更改,一个完整的TCP通信过程被破坏,通信失败。
  ● 回流通信问题解决方案
  在中小规模的学校中,由于教育经费有限,上网用户不是很多,因此常常使用X86架构PC,安装软路由防火墙软件以作为出口设备,如使用免费的基于FreeBSD操作系统的m0n0wall;使用功能丰富的基于Linux系统的RouterOS等。
  1.m0n0wall中回流问题解决方案
  m0n0wall是一款基于FreeBSD操作系统的免费防火墙,目前官方最新版本为1.33。在m0n0wall中想解决回流问题,需使用支持回流的版本,具体配置如下。
  (1)在LAN、WAN接口配置转入Destination NAT(如图3)。
  (2)LAN、WAN接口配置转出Source NAT。首先在“转出”选项卡,勾选“启动高级转出NAT”,然后在LAN、WAN接口配置Source NAT(如图4)。
  
  (3)在LAN、WAN接口配置访问规则(如图5、图6)。
  如果用户觉得m0n0wall配置麻烦,则可以使用发起于m0n0wall的免费项目pfsense,在pfsense的“Advanced”配置界面中,只要不勾选“Disable NAT Reflection”选项就支持回流通信(如图7)。
  2.RouterOS中解决方案
  (1)在LAN、WAN接口配置转入Destination NAT:
  0chain=dstnataction=dst-natto-addresses=192.168.1.51to-ports=80 protocol=tcpdst-address=192.168.202.21in-interface=LANdst-port=80
  1 chain=dstnataction=dst-natto-addresses=192.168.1.51to-ports=80 protocol=tcpdst-address=192.168.202.21in-interface=WANdst-port=80
  (2)LAN、WAN接口配置转出Source NAT:
  0 chain=srcnataction=src-natto-addresses=192.168.202.21to-ports=80 protocol=tcpdst-address=192.168.1.51out-interface=LANdst-port=80
  1 chain=srcnataction=src-nat to-addresses=192.168.202.21 out-interface=WAN
  3.使用内部DNS服务器来处理回流通信问题
  前面说到,当内部Web服务器80端口上发布多个基于主机头的网站时,不能直接通过IP地址来访问网站。例如,Web服务器上使用主机头发布了两个网站。此时通过Web服务器的IP地址将不能访问网站。只能通过主机头来访问。而发布到公网的www.abc.cn和www.def.cn两条域名资源记录对应的IP是NAT设备的WAN接口IP。内部PC通过http://www.abc.cn、http://www.def.cn访问时,首先将此两域名资源解析成WAN接口IP,进而通过NAT设备的WAN接口访问内部服务器,但仍存在回流通信问题。
  如果内部PC在解析www.abc.cn和www.def.cn时直接解析为Web服务器内网IP,内部PC与Web服务器直接在两者之间通信,就不存在回流通信问题。
  因此,可以在内部创建一个供内部PC使用的DNS服务器,此DNS服务器解析www.abc.cn和www.def.cn值为Web服务器内网IP,这样就可以解决内部PC通过www.abc.cn和www.def.cn访问Web服务器时可能产生的回流通信问题。
  ● 小结
  解决了回流通信问题,学校就可以把各种Web应用发布到一台Web服务器上,这样既方便集中管理,又可以节约经费,符合国家构建节约型社会的理念。