概念:
- NAS – 简单的说就是一个私有化的存储中心。(本人的nas直接丢到了出租屋,但是比较傻的出租屋的房东路由带上我的路由器有两级路由,这也是写这篇分享的由头了)
- Frp – 一种内网穿透技术。
- 内网穿透 – 就是通过其他公网 IP 来访问本地没有公网 IP 网络环境的一个技术。
关于其他:
- 内网穿透技术众多,比如花生壳内网穿透、Ngrok、Frp 都是现在主流的内网穿透技术。
但我个人认为 Frp 是目前最好用配置最简单的(经过测试)。 - 花生壳
配置简单方便,比较傻瓜化。但要收费。虽然也有免费版,但由于免费版的流量限制,基本上没有什么实际作用。 - Ngrok
发布时间相对较长,对象较为成熟的一种内网穿透技术。但由于功能的强大。配置较为繁琐。 - Frp
配置简单,第一次用就配置成功了。并且适用于各大主流平台设备。
基本步骤
由于 Frp 官网GitHub文档还是比较详细。我不过多做解释。
Frp 的基础架构如下,分为服务端和客户端,原理是通过一台公网服务器,做客户端代理。这样,不管你的User端有几层路由,原则上只要可以和公网通讯即可完成穿透。这就意味着你需要类似VPN一样准备一台代理服务器做穿透。这里推荐大家用腾讯云广州的CVM,速度还是比较快的。
服务器端配置:
登录服务器,在 Release页面 下载自己服务器对应版本 Frp
wget https://github.com/fatedier/frp/releases/download/v0.28.1/frp_0.28.1_linux_amd64.tar.gz
实例中:腾讯云用的 centos7 所以我选择 linux_amd64 64位的
使用 tar 指令解压 tar.gz 文件
tar -zxvf frp_0.12.0_linux_amd64.tar.gz
进入 frp 目录
cd frp_0.12.0_linux_amd64
删除不必要的客户端文件
rm -f frpc frpc_full.ini frpc.ini
版本不同可能稍有差异
frpc 为客户端文件
frps 为服务器端文件
配置服务器端文件
vi frps.ini
frps.ini 为服务器配置文件
编辑配置文件
[common]
bind_port = 7000
vhost_http_port = 8080
dashboard_port = 7500
dashboard_user = 用户名
dashboard_pwd = 密码
max_pool_count = 5
authentication_timeout = 900subdomain_host = canmeng.net
[ssh]
listen_port = 6000
auth_token = 和客服端 token 对应
简单解释:
[common] 必填的
bind_port Frp 服务端口(可自定义)
vhost_http_port http 访问端口(可自定义)
dashboard_port dashboard 界面端口
dashboard_user 登录 dashboard 用户名
dashboard_pwd 登录 dashboard 密码
max_pool_count 最大连接池数量
authentication_timeout 超时验证时间
subdomain_host 自定义二级域名[ssh]
listen_port ssh 访问端口
auth_token 用户身份认证
保存上面配置文件吗,启动 frp 服务器
./frps -c ./frps.ini
需要后台运行,请看下面
服务端配置结束。
打开ip:7500 即可看到frp的 dashboard 界面
客户端配置
客户端就是您本地需要做外网服务的设备,可以是 PC、Mac、NAS、路由器、或者虚拟机里的 liunx 系统。
这篇文章主要是利用 Frp 技术访问在群晖 NAS 服务的应用。实例也是 NAS 系统。
SSH 登录群晖 NAS (群晖必须开启 ssh)
下载 Frp, 删除服务端文件。(因为和服务端配置一样,不再一一赘述。)
sudo -i // 切换 root 用户
wget https://github.com/fatedier/frp/releases/download/v0.28.1/frp_0.28.1_linux_386.tar.gz
tar -zxvf frp_0.12.0_linux_386.tar.gz
cd frp_0.12.0_linux_386
rm -f frps frps_full.ini frps.ini
编辑 frpc.ini 文件(客户端配置文件)
vi frpc.ini
编辑配置文件如下
[common]
server_addr = ip
server_port = 7000
auth_token = 和服务器端对应
pool_count = 1[ssh]
type = tcp
local_ip = NAS 局域网ip
local_port = 22
remote_port = 6000[nas]
type = http
local_port = 5000
subdomain = sss[web]
type = http
local_port = 80
subdomain = web
简单解释:
[common] 必填的
server_addr 服务器端公网
server_port frp 服务端口,和服务器端 bind_port 一致
auth_token 和前面服务器端 [ssh] auth_token 一致
pool_count 连接池数量[ssh]
type 服务类型(tcp、http、https、udp)
local_ip NAS 本地局域网内网 ip
local_port NAS 开启 ssh 服务端口号,默认 22
remote_port 服务器端 ssh 端口,和服务器端 [ssh] listen_port 配置一致[nas] NAS 管理界面
type = http 服务类型为 http
local_port NAS 默认端口 5000
subdomain = sss 二级域名 sss.canmeng.net 访问 NAS[web] NAS web Station 服务,没用可以不用设置
type = http 类型为 http
local_port = 80 NAS web 服务端口
subdomain = web 二级域名 web.canmeng.net
使用自定义二级域名的时候,域名 *.canmeng.net 要解析到服务器 IP,或者解析相关二级域
保存,运行。(后台运行,请看下面)
./frpc -c ./frpc.ini
此时在服务端会看到”start proxy sucess”字样,即连接成功。
测试运行
ssh 测试
ssh -p 6000 user@服务器ip
user 为你登录群晖 NAS 的用户名
nas 界面
打开浏览器输入 sss.canmeng.net:8080, 显示群晖登录界面成功。
NAS web Station
打开浏览器输入 web.canmeng.net:8080, 显示页面成功。
后台运行
后台运行服务的方法有很多,这里只说一种可以在服务器端(Linux)和客户端(NAS)都可以用的 nohup指令
服务器端
nohup ./frps -c ./frps.ini &
客户端
nohup ./frpc -c ./frpc.ini &
自动启动
进入群晖控制面板 > 任务计划 > 新增 > 触发任务 > 用户定义的脚本
添加脚本
/root/frp_0.28.0_linux_386/frpc -c /root/frp/frpc.ini
注意:frp_0.28.0_linux_386 需要换成你自己的路径
勾选任务,点击保存即可
总结
除了NAS,内网穿透的应用场景还有很多,非常感谢Frp的作者七牛云的fatedier。作为补充材料,就写这么多吧。希望对大家有些许帮助。