最近工作上有一个需求,大致意思就是解决路由器内外访问的问题。这个问题可以分成两部分,一个是外部设备(如服务器)能主动访问路由器局域网内的主机,另一个就是内部的主机需要能够访问外部的服务器。
对于从内向外访问,大家应该不陌生。我们使用手机连上WiFi上网就是一个例子,里面如何实现的大家可能就没那么关心了。
主动从外向内访问就麻烦了,这里需要公网IP,而这个实在就是珍稀资源了。当然可以从网上找一些内网穿透的工具,免费的也有,推荐个Nqrok吧,也是能够用。
因为要从外向内访问,没有公网IP基本就GG了,可以向运行商申请(有点难,电信可以试试)。接下来的内容默认拥有一个公网IP,这也是一种妥协,如果每个设备都有一个唯一的IP,我这要干的事都不用麻烦了。
本人使用的是一个openwrt系统的路由器,设置的东西还挺多的,也了解一些计算机网络的知识。对于从内向外访问就像给别人发微信,别人回的微信也能收到,是一个NAT的应用。只使用一个IP的话,从外向内访问就要用到端口转发了。
端口转发的概念我不背了,有兴趣谷歌,大致意思就是路由器会将发给指定IP和端口的内容,转发到别的IP和端口。我们要用的就是将发给唯一公网IP的内容,转发给我们的内部设备。
地址转换协议(NAT)是一个能记住向外访问请求的东西,也就是说局域网的设备通过路由器访问了公网服务器,当服务器返回消息的时候,路由器通过记住的请求,准确的转发给之前发请求的设备。NAT肯定不止这么点东西,但是我们要用到的就是让所有出去的请求都使用唯一的IP。
接下来项模拟吧,大概用到两个路由器模拟两个网络,两个电脑用来模拟服务端和客户端。如果没有那么多路由器和电脑的话,直接将模拟的外部设备接到内部网络路由器WAN口上也行,内部设备用手机连上WiFi也可以,但是外部设备访问内部设备就需要一个手机端的调试软件了。
先使用一台路由器配置个外部网络,这里比较简单,直接设置LAN口地址就行,例如我这配置的是
配置项 | 配置值 |
---|---|
协议 | 静态地址 |
IP | 10.10.18.1 |
子网掩码 | 255.255.0.0 |
网关 | 10.10.18.1 |
使用一台电脑作为外部设备,接下来的测试需要用它来当服务端或者客户端,配置如下
配置项 | 配置值 |
---|---|
IP | 10.10.18.102 |
子网掩码 | 255.255.0.0 |
网关 | 10.10.18.1 |
内部网络配置是这部分内容的关键,需要分别配置LAN口和WAN口,一个用来接入外部网络,一个用于连接内部设备,构建局域网,这里使用的是192.168.0.0/16网段。
对于WAN口配置如下,未使用DHCP
配置项 | 配置值 |
---|---|
协议 | 静态地址 |
IP | 10.10.18.121 |
子网掩码 | 255.255.0.0 |
网关 | 10.10.18.1 |
对于LAN口配置如下
配置项 | 配置值 |
---|---|
协议 | 静态地址 |
IP | 192.168.121.1 |
子网掩码 | 255.255.0.0 |
网关 | 192.168.121.1 |
内部设备就是在192.168.0.0/16网段下局域网运行的设备,因为需求,希望此设备既能主动访问外面,又能被外面访问。先来看配置吧,具体操作后续说明,配置如下
配置项 | 配置值 |
---|---|
协议 | 静态地址 |
IP | 192.168.0.158 |
子网掩码 | 255.255.0.0 |
网关 | 192.168.121.1 |
端口转发:将外部设备对路由器的访问转移到内部指定设备。
接下来可能会有些不同,我这是openwrt上的配置,如果大家是其他路由器的话就参考参考吧!
在基本设置界面,设置基本设置转发 – 接收,保存应用并重启设备。
NAT(网络地址转换):修改内部向外通信报文的源IP,并发送
内部设备:
配置项 | 配置值 |
---|---|
IP | 192.168.0.158 |
Mask | 255.255.0.0 |
Gateway | 192.168.121.1 |
外部设备:
配置项 | 配置值 |
---|---|
IP | 10.10.18.102 |
Mask | 255.255.0.0 |
Gateway | 10.10.18.1 |
路由器WAN :
配置项 | 配置值 |
---|---|
IP | 10.10.18.121 |
Mask | 255.255.0.0 |
Gateway | 10.10.18.1 |
路由器LAN:
配置项 | 配置值 |
---|---|
IP | 192.168.121.1 |
Mask | 255.255.0.0 |
Gateway | 192.168.121.1 |
转发规则:
WAN port at 60000 => LAN 192.168.0.158 at 60000
NAT规则:
LAN => WAN use IP 10.10.18.121
内部访问外部
类型 | IP | 端口号 |
---|---|---|
客户端 | 192.168.0.158 | 60000 |
服务端 | 10.10.0.102 | 60000 |
外部访问内部
类型 | IP | 端口号 |
---|---|---|
客户端 | 10.10.18.102 | 60000 |
服务端 | 10.10.18.121 | 60000 |
内部设备作为服务端,外部设备作为客户端
类别 | 发送IP | 发送端口 | 被接收IP | 接收端口 |
---|---|---|---|---|
服务端 | 192.168.0.158 | 60000 | 10.10.18.102 | 12345 |
客户端 | 10.10.18.102 | 12345 | 10.10.18.121 | 60000 |
外部设备作为服务端,内部设备作为客户端
类别 | 发送IP | 发送端口 | 被接收IP | 接收端口 |
---|---|---|---|---|
服务端 | 10.10.18.102 | 60000 | 10.10.18.121 | 12345 |
客户端 | 192.168.0.158 | 12345 | 10.10.18.102 | 60000 |
因为需要,还希望测试一下端口转发的速率。使用FTP功能测试,工具:IPOP 4.1(强烈推荐,是一个调试工具大合集,体积小单文件,谷歌搜索就能下)。下面是我简单测试的结果,一边启动ftp服务,另一边用文件夹去访问复制文件就行,可以在任务管理器里面看网速。
转发规则:WAN port at 21=> LAN 192.168.0.158 at 21
使用IPOP软件服务里面的FTP服务,选好目录,配好账号密码,点start就可以了。
使用WAN口作为FTP服务端
LAN => WAN 40Mbps
WAN => LAN 98Mbps
使用LAN口作为FTP服务端
LAN => WAN 30Mbps
WAN => LAN 98Mbps
可以看到,其实使用端口转发功能影响并不大的,关于速率的不同我猜是电脑的问题。