前提
我的目的是想在家外边的时候,可以随时在外读取家中NAS中的文件,还想控制家里的设备下载电影回家就可以观看等等…
想实现这个目的的前提,是你可以在外面控制家里设备对吧,要想实现这个其实不难,有两个常用的方法,一是有公网ip做端口映射
,二是做内网穿透
;
今天我们探讨的问题是基于端口映射衍生的问题,如果有机会我会来说说内网穿透。
遇到的问题
我们先看下网络拓扑:
为了让不太了解网络基础的读者可以理解这张拓扑图,这里我来解释一下;
通过拓扑我们可知,在这个家庭网络中有两个路由器,如果你把图中的旁路由去掉就是现在大部分家庭的网络状态了,『用wifi连接路由器,路由器连接光猫』;现在增加了一台路由器(旁路由)你也可以叫它网关
,那么这个网关就可以实现一些网络处理、远程下载电影、运行一些程序…
有一些程序如果你想使用网关,你得把电脑连接网关例如”电脑2”、”电脑3”;
总结一下,因为我想实现远程下载电影、跑一些程序等等一些需求,所以我增加了一台旁路由,但我家人又没有这个需求,所以他们就不用连接旁路由,直接连接主路由就好了,例如”电脑1”、”iPad”这两台设备;
假如拓朴中的设备是一直开机的,而我是有公网ip的,我想在家外面访问家里的电脑,这时就需要上面说到的端口映射
了;
端口映射是必要在主路由做的,一般路由器都有这个功能,这个时候做好端口转发后有意思的来了,你会发现”电脑1”、”iPad”可以访问,而”电脑2”、”电脑3”访问不了,而这就是我遇到的问题。
我使用的旁路由是基于一个名字叫「Surge」的程序,这里引用Surge团队给出的解释:
该问题与路由器的端口转发的实现方式有关:
- 若路由在转发时,将数据包的 SRC IP 修改为了路由的 IP 地址,则回向包将直接发给路由,可以正常工作。
- 若路由在转发时,未修改数据包的 SRC IP,则回向时该数据包将会交给 Surge 处理,但 Surge 没有对应的端口转发信息,只能抛弃该数据包。
看不懂?没关系我们解决它就可了。
解决的方法
这里给出两种常见的旁路由方法
- Surge
- OpenWrt
Surge旁路由
这是一种我自己在用的方法,Surge当网关的优势有很多,它基于Mac上才能运行所以Mac就可以被我当一个下载机,作一个小型的Nas…
我的主路由是一个爱快路由系统,如果你是其他的路由器原理是一样的,需要在其中找到创建NAT转发的选项,如下图所示
点击新增一条规则,如下图所示
我们需要填写好下面几条选项:
- 动作:源地址NAT
- 进接口:wan 口
- 目的ip:需要映射的设备 ip
- NAT地址:主路由 ip
做完这一步再去做端口映射就可以了。
上面说的方法是比较简单的,也是本次分享的重点,如果你还是解决不了,可以考虑用类似socat或者Nginx在Mac上做端口转发,总结就是主路由转发端口到Mac,Mac再转发到设备上,这里仅分享一种思路。
OpenWrt旁路由
我想大部分用户使用旁路由应该都是选择OpenWrt系统,所以这里也做一个简单的分享
首先我们主路由里面设置旁路由为DMZ主机,然后进入防火墙设置,”转发”选择为接受,并且在”区域”选择中把wan处选项全部选择为接受,如下图所示
点击的”区域”wan右边的编辑按纽,点击下方lan的勾打上,如下图所示
这时我们就可以做端口转发了,点击防火墙里的新建端口转发,名称随意,协议根据你的需要选择,外部区域默认wan,外部端口填你需要转发的,内部区域为lan,IP填上你需要对外网开放端口的主机,内部端口天你需要对外开放的。
总结
本次我们分享了遇到的问题及解决的方法,如果有更好的方法欢迎和我分享!
Andrew's Web
hi
最后这个端口转发是主路由还是旁路由里面做?