Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->网络应用 ->服务器 ->正文

不能用公网地址访问内网服务器的详解

来源:赛迪网  作者:Webmaster 时间:2007-04-25 点击: [收藏] [投稿]

究竟为什么内网不能用公网地址访问内网服务器。不是任何设备都存在此问题,拿cisco的设备来说,不同版本的ios,有的就没有这个问题,而有的版本就有问题,netscreen的防火墙也没有这个问题,关键是开发者有没有意识到这个问题,通过修改ios,完全可以避免。对于这个问题,解决方法是有,比如内网dns欺骗、pix上得alias等等,但是究竟为什么有些设备不支持呢?今天我斗胆发个贴,因为有些结论纯粹靠想,也没有设备进行试验,所以希望大家跟贴讨论,达到抛砖引玉的目的,谢谢了先!

以下所有内容均针对出口是以太网的情况,对于串口接入,不会出现这种问题。

本地出口地址是5.5.5.1,isp对端是5.5.5.2(掩码没写,稍后会分别讨论)。 1.1.1.1和1.1.1.2是内网两台服务器的内网地址,被静态映射到公网上的5.5.5.4和5.5.5.5. 内网的pc全部被pat到出口上。本地路由器一条缺省路由到isp对端。

我想这个拓扑应该是非常普遍的了,我认为就是因为这个非常普遍的拓扑,造成了很多人所反应的“内网不能通过公网地址访问内网服务器”这个问题。我认为这个问题的关键原因就在于掩码,就是在3层上做文章。

第一节

先来看看一般情况下,这个环境的掩码的规划。假设isp分配一段8地址子网给本地,这样isp路由器接口和本地路由器接口共占用2个,网络地址、广播地址共占用2个,可用的一共4个,掩码是248。对于图示的拓扑,假设本地路由器出口掩码是248(内网pc的pat地址相应的也就是掩码为248),被映射的两个地址掩码也是248,这个最普遍的掩码规划,结果是:服务器、内网pc的pat地址、本地出口地址全部处于同一个网段。我们分析一个包的来龙去脉,来看看到底内网pc通过公网地址可否访问到内网服务器。

假设内网一台pc1.1.1.111发出ping 5.5.5.4(服务器的公网地址)请求,包源地址1.1.1.111,目的地址5.5.5.4,路由器收到这个包后,检查路由表,发现5.5.5.4就位于自己的出口网段(假设出口为以太口),所以直接通过arp广播请求5.5.5.4的mac地址,问题出现了,谁会应答这个请求呢?没有人,所以,这种情况下(所有公网地址在同网段)当然不会通。不但内网访问服务器不行,服务器之间通过公网地址访问也不会通。

结论一:只要出口地址和服务器映射的公网地址在同网段,就有问题。

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:两个idc机房托管的服务器之间通讯不畅   下一篇:如何查看本机的DNS服务器?我有小绝招

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号