路由器从外向内访问(端口转发)及从内向外访问(NAT)的配置

描述需求

最近工作上有一个需求,大致意思就是解决路由器内外访问的问题。这个问题可以分成两部分,一个是外部设备(如服务器)能主动访问路由器局域网内的主机,另一个就是内部的主机需要能够访问外部的服务器。

从内向外访问

对于从内向外访问,大家应该不陌生。我们使用手机连上WiFi上网就是一个例子,里面如何实现的大家可能就没那么关心了。

从外向内访问

主动从外向内访问就麻烦了,这里需要公网IP,而这个实在就是珍稀资源了。当然可以从网上找一些内网穿透的工具,免费的也有,推荐个Nqrok吧,也是能够用。

前提条件

因为要从外向内访问,没有公网IP基本就GG了,可以向运行商申请(有点难,电信可以试试)。接下来的内容默认拥有一个公网IP,这也是一种妥协,如果每个设备都有一个唯一的IP,我这要干的事都不用麻烦了。

解决思路

本人使用的是一个openwrt系统的路由器,设置的东西还挺多的,也了解一些计算机网络的知识。对于从内向外访问就像给别人发微信,别人回的微信也能收到,是一个NAT的应用。只使用一个IP的话,从外向内访问就要用到端口转发了。

端口转发

端口转发的概念我不背了,有兴趣谷歌,大致意思就是路由器会将发给指定IP和端口的内容,转发到别的IP和端口。我们要用的就是将发给唯一公网IP的内容,转发给我们的内部设备。

地址转换协议(NAT)

地址转换协议(NAT)是一个能记住向外访问请求的东西,也就是说局域网的设备通过路由器访问了公网服务器,当服务器返回消息的时候,路由器通过记住的请求,准确的转发给之前发请求的设备。NAT肯定不止这么点东西,但是我们要用到的就是让所有出去的请求都使用唯一的IP。

环境搭建

接下来项模拟吧,大概用到两个路由器模拟两个网络,两个电脑用来模拟服务端和客户端。如果没有那么多路由器和电脑的话,直接将模拟的外部设备接到内部网络路由器WAN口上也行,内部设备用手机连上WiFi也可以,但是外部设备访问内部设备就需要一个手机端的调试软件了。

外部网络模拟

先使用一台路由器配置个外部网络,这里比较简单,直接设置LAN口地址就行,例如我这配置的是

配置项配置值
协议静态地址
IP10.10.18.1
子网掩码255.255.0.0
网关10.10.18.1

外部设备配置

使用一台电脑作为外部设备,接下来的测试需要用它来当服务端或者客户端,配置如下

配置项配置值
IP10.10.18.102
子网掩码255.255.0.0
网关10.10.18.1

内部网络配置

内部网络配置是这部分内容的关键,需要分别配置LAN口和WAN口,一个用来接入外部网络,一个用于连接内部设备,构建局域网,这里使用的是192.168.0.0/16网段。

对于WAN口配置如下,未使用DHCP

配置项配置值
协议静态地址
IP10.10.18.121
子网掩码255.255.0.0
网关10.10.18.1

对于LAN口配置如下

配置项配置值
协议静态地址
IP192.168.121.1
子网掩码255.255.0.0
网关192.168.121.1

内部设备配置

内部设备就是在192.168.0.0/16网段下局域网运行的设备,因为需求,希望此设备既能主动访问外面,又能被外面访问。先来看配置吧,具体操作后续说明,配置如下

配置项配置值
协议静态地址
IP192.168.0.158
子网掩码255.255.0.0
网关192.168.121.1

设置端口转发

端口转发:将外部设备对路由器的访问转移到内部指定设备。

接下来可能会有些不同,我这是openwrt上的配置,如果大家是其他路由器的话就参考参考吧!

选择 网络 - 防火墙

端口转发配置

设置接收转发

在基本设置界面,设置基本设置转发 – 接收,保存应用并重启设备。
设置接收转发

选择 端口转发页面

选择端口转发

在底部添加转发规则

设置WAN口对某端口的访问转发到内部指定IP和端口
添加转发规则

设置NAT规则

NAT(网络地址转换):修改内部向外通信报文的源IP,并发送

选择 防火墙 – 通信规则页面

通信规则页面

步骤二:在底部Source NAT栏设置规则
设置规则

实际使用

举例:

内部设备:

配置项配置值
IP192.168.0.158
Mask255.255.0.0
Gateway192.168.121.1

外部设备:

配置项配置值
IP10.10.18.102
Mask255.255.0.0
Gateway10.10.18.1

路由器WAN :

配置项配置值
IP10.10.18.121
Mask255.255.0.0
Gateway10.10.18.1

路由器LAN:

配置项配置值
IP192.168.121.1
Mask255.255.0.0
Gateway192.168.121.1

转发规则:

WAN port at 60000 => LAN 192.168.0.158 at 60000

NAT规则:

LAN => WAN use IP 10.10.18.121 

使用UDP访问

内部访问外部

类型IP端口号
客户端192.168.0.15860000
服务端10.10.0.10260000

外部访问内部

类型IP端口号
客户端10.10.18.10260000
服务端10.10.18.12160000

使用TCP连接

内部设备作为服务端,外部设备作为客户端

类别发送IP发送端口被接收IP接收端口
服务端192.168.0.1586000010.10.18.10212345
客户端10.10.18.1021234510.10.18.12160000

外部设备作为服务端,内部设备作为客户端

类别发送IP发送端口被接收IP接收端口
服务端10.10.18.1026000010.10.18.12112345
客户端192.168.0.1581234510.10.18.10260000

速度测试

因为需要,还希望测试一下端口转发的速率。使用FTP功能测试,工具:IPOP 4.1(强烈推荐,是一个调试工具大合集,体积小单文件,谷歌搜索就能下)。下面是我简单测试的结果,一边启动ftp服务,另一边用文件夹去访问复制文件就行,可以在任务管理器里面看网速。

添加转发规则

转发规则:WAN port at 21=> LAN 192.168.0.158 at 21

IPOP开启FTP服务端

使用IPOP软件服务里面的FTP服务,选好目录,配好账号密码,点start就可以了。
开启ftp功能

测试结果

使用WAN口作为FTP服务端

LAN => WAN 40Mbps
WAN => LAN 98Mbps

使用LAN口作为FTP服务端

LAN => WAN 30Mbps
WAN => LAN 98Mbps

可以看到,其实使用端口转发功能影响并不大的,关于速率的不同我猜是电脑的问题。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐