NAT server向外发布的服务器在内网通过域名或公网IP访问的解决办法
浅谈NAT server向外发布的服务器在内网通过域名/公网IP 访问的解决办法许茂生 FW0053【问题描述】前两天刚看到二线兄弟写的一篇案例“DMZ 区域服务器的NAT 应用”,正好处理办事处一个
浅谈NAT server向外发布的服务器在内网通过域名/公网IP 访问的解决办法
许茂生 FW0053
【问题描述】
前两天刚看到二线兄弟写的一篇案例“DMZ 区域服务器的NAT 应用”,正好处理办事处一个客户问题时碰到,客户组网其实很简单,内网通过三层交换机连到出口路由器再做NAT 上网,交换机起三层,接了WWW 服务器通过静态NAT 向外发布。外网访问WWW 服务器没有任何问题,问题出在内网对这几台服务器的访问,由于WWW 服务器上很多的超链接或者搜索结果是通过WWW 的公网IP 链接的,所以客户要求内网必须支持通过域名和公网IP 访问www 服务器。
到了现场参照案例在内网口也做了NA T 转换(将外网口下的nat server照着配一遍),不行,通过公网IP 访问不了,IE 状态栏显示已找到地址,然后就停在 “正在连接….”状态,不解。于是参照操作手册把NAT dns -map 配上,这时客户说通过域名能访问了,但公网IP 还是不行. 于是咨询二线专家,答曰:dns -map 只解决内网通过域名访问问题,公网ip 访问仍不行!!! Oh my god!
第二日问题还是被兄弟圆满解决了,回头细细想了下,此类应用应该不少,弟兄们难免回再碰到,于是总结了一下
【组网拓扑】

【相关配置】
AR4620:
nat dns-map cjy.swpu.edu.cn 218.6.x.195 80 tcp(可选)
#
interface Ethernet0/0/0
ip address 218.6.x.195 255.255.255.0
nat outbound 2000
nat server protocol tcp global 218.6.x.195 www inside 192.168.1.66 www
,nat server protocol tcp global 218.6.x.195 ftp inside 192.168.1.66 ftp
nat server protocol tcp global 218.6.x.195 7777 inside 192.168.1.67 7777
nat server protocol tcp global 218.6.x.195 7778 inside 192.168.1.67 7778
nat server protocol tcp global 218.6.x.195 7775 inside 192.168.1.68 7775
nat server protocol tcp global 218.6.x.195 7776 inside 192.168.1.68 7776
nat server protocol udp global 218.6.x.195 80 inside 192.168.1.66 80
nat server protocol udp global 218.6.x.195 21 inside 192.168.1.66 21
nat server protocol udp global 218.6.x.195 7777 inside 192.168.1.67 7777
nat server protocol udp global 218.6.x.195 7778 inside 192.168.1.67 7778
nat server protocol udp global 218.6.x.195 7775 inside 192.168.1.68 7775
nat server protocol udp global 218.6.x.195 7776 inside 192.168.1.68 7776
#
interface Ethernet0/0/1
ip address 192.168.5.2 255.255.255.252
#
interface Ethernet1/0/0
ip address 192.168.1.1 255.255.255.0
nat server protocol tcp global 218.6.x.195 www inside 192.168.1.66 www
nat server protocol tcp global 218.6.x.195 7777 inside 192.168.1.67 7777
nat server protocol tcp global 218.6.x.195 7778 inside 192.168.1.67 7778
nat server protocol tcp global 218.6.x.195 7775 inside 192.168.1.68 7775
nat server protocol tcp global 2186.x.195 7776 inside 192.168.1.68 7776
nat server protocol udp global 218.6.x.195 7777 inside 192.168.1.67 7777
nat server protocol udp global 218.6.x.195 7778 inside 192.168.1.67 7778
nat server protocol udp global 218.6.x.195 7775 inside 192.168.1.68 7775
nat server protocol udp global 218.6.x.195 7776 inside 192.168.1.68 7776
nat server protocol udp global 218.6.x.195 80 inside 192.168.1.66 80
#
interface Ethernet1/0/1
#
ip route-static 0.0.0.0 0.0.0.0 218.6.244.1 preference 60
ip route-static 192.168.2.0 255.255.255.0 192.168.5.1preference 60
ip route-static 192.168.3.0 255.255.255.0 192.168.5.1 preference 60
ip route-static 192.168.4.0 255.255.255.0 192.168.5.1 preference 60
#
S3552:
192.168.2.1/3.1/4.1/5.1这些VLAN 网关地址都在S3552上。S3552缺省路由往192.168.5.2 192.168.1.x 网段所在Vlan10不配置interface vlan地址。
192.168.1.x 网段的网关是AR46的192.168.1.1
【解决方案】
解决方案其实还是跟二线兄弟的案例一样,只是要在出口设备上(AR4620)上单独划一口
,作为内网WWW 服务器所在网段的网关,也就是说192.168.1.x 这个网段的三层终结必须在路由器上而不是三层交换机(S3552)上。
为什么呢?
看看下面两张图大家就明白了
问题未解决时的内网与www 会话连接图:

就内网PC 而言,192.168.1.200只看见第1和第4步,这是一个典型的TCP 三次握手,正是由于访问WWW 服务器的返回包TCP syn +ack 报文被三层交换机直接路由到内网PC ,没有经过AR4620的NAT 转换,导致内网PC 认为这是一次非法的TCP 会话(syn +ack 的源地址无法对应初始syn 包的目标地址),将拆掉这个TCP 半连接。所以浏览器提示DNS 解析成功,地址已找到后就停住了…..
下面是改造后的连接图:

内网PC 检查1,6均符合握手规则,再发出tcp syn ack完成3次握手后,TCP 连接正常建立。此时公网IP 和域名都可以访问WWW 了。
此问题可以类推到所有我司出口网关设备,比如secpath 防火墙。再想一下,有没有其他解决方案呢:
方案1:交换机不起三层,所有内网网关都在出口路由器上。
方案2:如果内网交换机(或者其他三层设备) 支持NAT ,在此设备出口上做对www 服务器的nat server转换。
大家可以想想为什么上面方案可行,还有其他办法吗???