外网能正常访问

环境如下:

外网IP:218.94.2.137

局域网:A机器192.168.1.100  B机器192.168.1.101
A机器作为服务器,通过88端口提供了一个WEB服务,路由器上也设置了88端口映射到A这台机器。

B机器作为一般的内网客户端。

 

现在:

B上的浏览器通过外网IP访问A上的WEB服务 222.188.91.252:88,路由器通过端口映射转发给A服务器,这时候A服务器收到的IP包的源地址是192.168.1.101,他们采用的协议是TCP,TCP建立连接需要三次握手,这时候A服务器收到连接请求,回复一个应答包,目的IP是192.168.1.101,源IP是192.168.1.100,因为两个IP都是局域网的,所以路由器不经过封装,而是直接转发。

所以,B服务器收到的应答包源IP跟B服务器发送的请求包目的IP不一样,所以包被丢弃了。

A服务器一直等B机器再次应答,但B机器丢弃了那个包,所以一直等不到,结果连接失败了。

 

解决方案:
在网关服务器加条静态路由。
如:
网关服务器:192.168.0.1(交换机)
内部服务器:192.168.0.254(所要访问的web服务器)
外网IP:61.25.44.1
①给内部服务器添加一个跟外网一样的IP “61.25.44.1”
 内部服务器:192.168.0.254;61.25.44.1
②在网关服务器上添加一条静态路由
route ADD 61.25.44.1 MASK 255.255.255.255 192.168.0.254
不同的交换机在命令上有所不同,通过telnet命令进入路由器。

缺点:要是外网IP是动态的就每次改变IP都得重新设置一次。
不过也可以写个VBS脚本自动更改,我以前写过现在找不到了。
如果是用域名访问就更简单了,修改hosts记录就可以了。
hosts文件位于“C:\WINDOWS\system32\drivers\etc”
优点:只要修改一次
缺点:要是你有DNS服务器不是内部机器,就得修改每一台机的hosts记录才行

http://www.cnblogs.com/datasky/archive/2010/10/09/1846365.html