【Nas/群晖/服务器】FRP内网穿透实现外网访问

一般来说,在同一局域网下的终端设备可以相对自由地互相访问。但是,如果想要通过外网远程访问家中或者公司局域网中的服务器或者Nas,这种情况该怎么办呢?

解决的方法大致分为3种:
1. QuickConnect(QC):白群晖官方连接方式(黑群晖不可用!!!),但是由于服务器在台湾,所以并不那么Quick,不过尚可接受。
2. 外网映射:最推荐的方式!网络带宽可以跑满,流量无限制!是最简单也最困难的方式,因为需要公网IP!(这里指的是IPv4公网IP,因为IPv6全部都是公网IP,但是目前仅移动端4G/5G普及,运营商及路由器尚未普及IPv6)只要有了公网IP,那么恭喜你,自由的网络世界向你敞开,只需简单设置路由器的端口映射(动态IP需DDNS解析),即可实现外网访问。三大运营商中,电信和联通较容易通过打运营商电话获得公网IP(借口安装监控或者威胁投诉),移动就别想了(移动公网IP很少,不会给你的,洗洗睡吧~)。
3. 内网穿透:通过花生壳或者其他第三方服务进行内网穿透,缺点是免费版仅供体验,付费版收费太贵(土豪请忽略~)

本文主要介绍内网穿透,内网穿透具体有几种表现形式:
1. 第三方服务(如花生壳),优点省心,缺点贵!
2. Nas伴侣硬件
3. 蒲公英X1旁路组网,优点:便宜(100软妹币左右),缺点:有连接终端数量限制。
4. FRP(有其他网络的公网IP)。
它们原理相似,大致都是通过局域网内网IP绑定已有公网IP(第三方提供/硬件/云服务器),然后通过公网IP转发出去。

接下来详细介绍FRP,什么是FRP呢?Fast Reverse Proxy(FRP)是一种高性能的反向代理技术,能够使内网的机器对外网环境提供 http 或 https 服务。具体如何实现呢?首先你需要有两台机器,一台位于外网环境(云服务器或具有公网IP的机器)和一台处于内网环境(局域网)中的机器。本文以腾讯云Win10服务器(外网)和猫盘Plus刷的黑群晖(内网)为例,介绍FRP的具体实现步骤。首先在两台机器上根据操作系统和架构分别下载对应的压缩包,下载地址:GitHub地址

【Nas/群晖/服务器】FRP内网穿透实现外网访问插图
Github地址(可能需要翻墙)

Server端(外网端)配置

1.将压缩包解压至任意位置,右击编辑frps.ini。

【Nas/群晖/服务器】FRP内网穿透实现外网访问插图1

2.按以下提示修改frps.ini的内容,并保存。

[common] bind_port = 7000 #供客户端主机连接的端口,默认为7000 dashboard_port = 7001 #用于查看连接状态的端口,可以不设置

3.在解压目录下打开终端命令行,输入启动命令:

frps -c frps.ini # 成功启动后会输出以下信息: [root.go:200] frps uses config file: frps.ini [service.go:192] frps tcp listen on 0.0.0.0:7000 [service.go:294] Dashboard listen on 0.0.0.0:7001 [root.go:209] frps started successfully

4.登录localhost:7001 (dashboard端口)查看状态,若能打开此页面即为启动成功。

【Nas/群晖/服务器】FRP内网穿透实现外网访问插图2
FRP dashboard页面

Client端(内网端)配置

1.将下载好的Linux的FRP压缩包放到任意路径下,并解压。

【Nas/群晖/服务器】FRP内网穿透实现外网访问插图3

2.打开并按以下提示修改frpc.ini文件,并保存。

[common] server_addr = 120.88.88.88 #外网端机器的公网IP地址,必须修改为你自己的 server_port = 7000 #连接到服务器端的端口,必须与上面的bind_port保持一致 [ssh] type = tcp local_ip = 127.0.0.1 #局域网本机地址,默认为127.0.0.1,无需修改 local_port = 5000 #内网机器监听端口,群晖默认为5000 remote_port = 6002 #外网机器用于转发的端口

3.启动服务

由于无法直接输入终端指令,因此可以使用Putty等工具连接到群晖,IP填写Nas的局域网IP,端口默认22,连接后输入Nas的账号密码即可连接到群晖。进入刚刚解压后的文件路径,输入启动命令:

cd xxxx # xxxx为解压后的文件路径 ./frpc -c frpc.ini
【Nas/群晖/服务器】FRP内网穿透实现外网访问插图4
Putty

4. 成功连接后可以在外网服务器端查看连接状态,也可登录FRP的dashboard页面查看连接状态。

[service.go:449] [***] client login info: ip [xx.xx.xx.xx:xxxx] version [0.37.1] hostname [] os [linux] arch [arm64] [tcp.go:63] [***] [ssh] tcp proxy listen port [5000] [control.go:444] [***] new proxy [ssh] success

5.群晖每次开关机后都需要重新连接FRP,比较繁琐,因此可以按下图设置自定义脚本实现Nas开机自动启动FRP进行内网穿透。

cd xxxx && nohup ./frpc -c frpc.ini >/dev/null 2>&1 & #xxxx为压缩包解压后的文件路径,可右击文件夹查看文件路径

【Nas/群晖/服务器】FRP内网穿透实现外网访问插图5

那么现在,你应该已经可以通过 http://你的公网IP:6002(或者你自定义的端口号)来访问处于内网的服务器或Nas了,恭喜你!下面是我整理的网络通信示意图,来方便你理解FRP是如何工作的。

【Nas/群晖/服务器】FRP内网穿透实现外网访问插图6

上一篇
下一篇