内网的用户不能用外网IP访问内网

一般普通路由器只要做完端口映射,NAT是不需要设置的,稍微高级点的路由器,就需要配置一下了。然后就可以访问了。

{alert type=”info”}
下面是网站找的说明:(下面的说明都2007年左右,原理没问题,不过现在所有的路由器都应该支持“回流”了)
{/alert}

简单说明一下:

假设你的外网IP为 202.1.1.1 内网有2台192.168.1.10 192.168.1.11

做了IP地址映射 202.1.1.1:80->192.168.1.10:80

1。公网PC1访问你的站点

1
PC1:X->202.1.1.1:80   (1个session 包含:[source ip:source  port , desti p:dest port]4个参数 )

地址转换后: pc1:x->192.168.1.0:80

192.168.1.0 到数据后,发数据给源站点

192.168.10:80->pc1:x 经过地址转换 202.1.1.1:80->pc1:x

所以外网可以访问你映射的站点.

2。如果在内网访问

192.168.1.11:x->202.1.1.1:80 地址转换后 192.168.1.11:x->192.168.1.10:80 到达站点

站点返回数据:

192.168.1.10:80->192.168.1.11:x
这里是关键:192.168.1.10检查后发现目标ip为192.168.1.11为同一网段,
所以直接把数据发给192.168.1.11,不再通过202.1.1.1转发。

但是,192.168.1.11是向202.1.1.1发起连接,并没有和192.168.1.10连接,所以将丢弃192.168.1.10发回的数据。

还有一篇:

浅谈回流—-作者漂流瓶

“回流”,光这个名词我听说也没多久的,不知是哪里给的这么一个雅号。 以前知道在映射上,有这么个事情。但一直以来也没个名称,也不好简单直观的描绘,现在总算有个俗称了,虽然只有八成的贴切,也是好的

回流是什么?最简单的一个实例: 网吧内网一台主机192.168.0.2建了个WEB服务站点端口80,然后在网关(其内网地址是192.168.0.1、公网地址为218.4.218.4)上映射80端口到192.168.0.2的80端口,这样INTERNET上就能以http://218.4.218.4:80的地址访问到192.168.0.2的WEB站点了。 然后出现了个问题,在同网吧的另一台电脑192.168.0.3上,键入http://218.4.218.4:80,却无法访问该WEB站点。 就这个现象,我们就称之为“不支持回流”了,这里指的是网关上的映射方式不支持回流,所以说“回流”一说,是针对映射方式而言的。

现在我们来看常规情况下,是为什么会发生这种情况的 我以前对iptables特别感兴趣的时候,曾对这个问题非常迷惑不解,直到去年为了考试,学习网络基础的时候才搞明白这个事情

过程如下: 192.168.0.3要请求访问218.4.218.4的80端口,根据它掌握的路由表,它本身是不知道电脑218.4.218.4在哪里的,所以把将这个数据包发送给它的默认路由,即电脑192.168.0.1。 注意:这个数据包的源地址是192.168.0.3、源端口假设是1025、目标地址是218.4.218.4、目标端口是80、SYN标志位为1、这是建立TCP连接的第一次握手。

如果“把目标地址为218.4.218.4的数据包发给了192.168.0.1”你听起来觉得有点矛盾,那么我解释一下:其实这个数据包的目标IP地址是218.4.218.4,目标MAC地址却是192.168.0.1的

电脑192.168.0.1接收到了这份数据包(因为它的身份是路由器,所以允许接收和转发目标地址不是自已、MAC地址却是自已接口MAC地址的数据包),它分析这个数据包的目标地址,发现这个数据包是需要中转到电脑192.168.0.2:80去的,于是它把这个数据包转发给了电脑192.168.0.2:80。 注意:这个数据包的源地址是192.168.0.3、源端口是1025、目标地址为192.168.0.2、目标端口为80、SYN标志位为1。我们要注意这个数据包在转发后发生了变化了,即目标地址变了。 电脑192.168.0.2顺利接到了数据包,它马上作出回应,发送一个数据包给电脑192.168.0.3。 注意:这个数据包的源地址是192.168.0.2、源端口是80、目标地址192.168.0.3、目标端口为1025、SYN标志位为1、ACK标志位为1、这是建立TCP连接的第二次握手。 电脑192.168.0.3顺利接到了数据包,然而它发现这是一个来自192.168.0.2:80的回应,因为ACK标志位值为1摆在那里呢。它想不起来什么时候给192.168.0.2:80这个目标对象发送过SYN请求,它认为这是一个错误的数据包,于是决定把这个数据包丢弃。然后继续等待218.4.218.4:80的回应,一直等到超时。 而电脑192.168.0.2这边,它等192.168.0.3:1025的第三次握手请求包发送过来,以便建立一个TCP的连接。同样也没有结果,一直等到超时。三次握手在规定的时间内没有完成,访问宣布流产了。

那么怎么样才能正常访问呢?也就是说怎么样形成“回流”呢? 玄机在于电脑192.168.0.1把第一次握手的那个数据包在转发时,不仅要修改目标地址和端口,也要修改源地址和端口,我们来看一下情况会有什么不同: 电脑192.168.0.1接收到了这份数据包(因为它的身份是路由器,所以允许接收和转发目标IP地址不是自已、MAC地址却是自已接口MAC地址的数据包),它分析这个数据包的目标地址,发现这个数据包是需要中转到电脑192.168.0.2:80去的,于是它把这个数据包通过自已的5201端口转发给了电脑192.168.0.2:80,并在内存里面记录下来了,192.168.0.1:5201已定位给了192.168.0.3:1025。 注意:这个数据包的源地址是192.168.0.1、源端口是5201、目标地址为192.168.0.2、目标端口为80、SYN标志位为1。 电脑192.168.0.2顺利接到了数据包,它马上作出回应,发送一个数据包给电脑192.168.0.1。 注意:这个数据包的源地址是192.168.0.2、源端口是80、目标地址192.168.0.1、目标端口为5201、SYN标志位为1、ACK标志位为1、这是建立TCP连接的第二次握手。 电脑192.168.0.1顺利接到了数据包,检查内存记录发现,这个数据包真正的收货人是192.168.0.3:1025,于是它把这个数据包转发给192.168.0.3。 注意:这个数据包的的源地址是218.4.218.4、源端口为80、目标地址为192.168.0.3、目标端口为1025。我们要注意这个数据包在转发后发生变化了,即源地址变了。这很重要!为什么会变,因为在它心目当中,192.168.0.2:80早已定位给了218.4.218.4:80,映射规则使然。 电脑192.168.0.3顺利接到了数据包,发现期待已久的218.4.218.4:80终于有了回音,它兴奋不已的发出第三次的握手请求。 注意:这个数据包的源地址是192.168.0.3、源端口是1025、目标地址是218.4.218.4、目标端口是80、ACK标志位为1、这是建立TCP连接的第三次握手。 跟前面的数据包一样,这个数据包会从192.168.0.1那里中转给192.168.0.2

以后192.168.0.2:80和192.168.0.3:1025之间来往通信的数据包,全部由192.168.0.1负责中转,“回流”构成了

具体在软件上的实现,不是我的事了 现在的“回流”应用常见于私服 Linux里的iptables可以增加一条规则来实现对回流的支持 很多硬件路由器不用设置就内建支持的 Win2K的ICS/NAT内建的映射是标准DNAT,同样是不支持的、除非用第三方工具 CC、RouterOS听说是支持的,不懂,没空去整过 SW现在还有好多人在问,好像是没辄,我不知道SW是不是能跟iptables一样灵活 BBIagent以前的版本没戏、现在不知 。。。。。(此处省略五千字)

不知大家明白了没有,反正我倒是有点糊涂了,继续睡觉去。。。 睡眠不足,乱写了一气,前面也许写错许多,而且老实说最后一段是写的没有耐心了 写得头痛,以后有空再作修改补充罢
转自https://www.cnblogs.com/cuihongyu3503319/archive/2012/11/05/2755214.html