如何用 Frp 实现外网访问群晖 NAS
为什么写这篇文章
因为有在外面访问家里 NAS 的需求,群晖自带的动态域名解析访问又太慢(因为群晖自带动态域名的 DNS 服务器在国外)。所以需要用内网穿透技术来实现通过其他公网 IP 来访问家里的 NAS 设备的需求。所以才有了这篇文章。
概念解释
- NAS - 简单的说就是一个存储中心。
- Frp - 一种内网穿透技术。
- 内网穿透 - 就是通过其他公网 IP 来访问本地没有公网 IP 网络环境的一个技术。
内网穿透
内网穿透技术众多,比如花生壳内网穿透、Ngrok、Frp 都是现在主流的内网穿透技术。
但我个人认为 Frp 是目前最好用配置最简单的(经过测试)。
-
花生壳
配置简单方便,比较傻瓜化。但要收费。虽然也有免费版,但由于免费版的流量限制,基本上没有什么实际作用。 -
Ngrok
发布时间相对较长,对象较为成熟的一种内网穿透技术。但由于功能的强大。配置较为繁琐。因为折腾许久没有成功过,最后放弃。 -
Frp
配置简单,第一次用就配置成功了。并且适用于各大主流平台设备。
具体过程
准备工作
-
一台有公网 IP 的服务器 (VPS、云主机)
之前注册了一个国外的 VPS, 准备做内网穿透和 vpn 用,但由于访问速度。果断放弃,最后换成了自己阿里云 ECS。
-
NAS (客户端)
群晖 DS 416 play
基本步骤
服务器端配置:
-
wget
实例中:我的阿里云 ECS 用的 centos7 所以我选择 linux_amd64 64位的
Frp 0.12.0 最新测试版的 -
使用 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 = 900 subdomain_host = lekee.cc [ssh] listen_port = 6000 auth_token = 和客服端 token 对应
简单解释:
[common] 必填的
[ssh]
listen_port
ssh 访问端口
auth_token
用户身份认证详细配置
-
保存上面配置文件吗,启动 frp 服务器
./frps -c ./frps.ini
需要后台运行,请看下面
服务端配置结束。
客户端配置
客户端就是您本地需要做外网服务的设备,可以是 PC、Mac、NAS、路由器、或者虚拟机里的 liunx 系统。
这篇文章主要是利用 Frp 技术访问在群晖 NAS 服务的应用。实例也是 NAS 系统。
- SSH 登录群晖 NAS (群晖必须开启 ssh)
```
ssh nas
```
> 我设置过别名,详情查看我的另一篇文章[MAC 终端 SSH 别名代替 IP 的方法](https://lekee.cc/904.html)
> ssh nas = ssh user@ip
-
下载 Frp, 删除服务端文件。(因为和服务端配置一样,不再一一赘述。)
sudo -i // 切换 root 用户 wget 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 = nas [web] type = http local_port = 80 subdomain = web
简单解释:
[common] 必填的
server_addr
服务器端公网
server_port
frp 服务端口,和服务器端bind_port
一致
auth_token
和前面服务器端[ssh] auth_token
一致
pool_count
连接池数量[ssh]
[nas] NAS 管理界面
[web] NAS web Station 服务,没用可以不用设置
详细配置
-
保存,运行。(后台运行,请看下面)
./frpc -c ./frpc.ini
此时在服务端会看到"start proxy sucess"字样,即连接成功。
测试运行
ssh 测试
ssh -p 6000 user@服务器ip
user 为你登录群晖 NAS 的用户名
nas 界面
nas_login.pngNAS web Station
nas_web.png域名后面 8080 端口可以隐藏,下面介绍如何隐藏 8080 端口。
扩展应用
后台运行
后台运行服务的方法有很多,这里只说一种可以在服务器端(Linux)和客户端(NAS)都可以用的 nohup指令
服务器端
nohup ./frps -c ./frps.ini &
客户端
nohup ./frpc -c ./frpc.ini &
自动启动
隐藏 8080 端口
总结疑问
使用状态
目前使用一切正常,能满足我的日常需求。
在外面需要访问 NAS 里的的文件的时候速度还比较满意。
今天还测试在外面看 NAS 里的视频,也一点都不卡。
我的担心
但我的担心就是在外面观看 NAS 里的视频的时候,流量有点害怕。
因为我现在使用阿里云 ECS 计费方式是按流量计费的。
不知道这样在外面看视频,用阿里云做中转。流量到底是怎么计算的。
还需要进一步探究。不过之前阿里云上预存1000元,都好几个月了。还有999.78元。
展望
这个技术伟大之处就是,只要设备能上网。不管有没有公网 IP,都可以让任何一个能上网的机子访问该设备。该设备可能是一台 PC,一个服务器,一个路由器,一个NAS,一个摄像头,一个... 无限扩展无限衍生,无限可能...
希望本文能您带来帮助!