为什么写这篇文章
因为有在外面访问家里 NAS 的需求,群晖自带的动态域名解析访问又太慢(因为群晖自带动态域名的 DNS 服务器在国外)。所以需要用内网穿透技术来实现通过其他公网 IP 来访问家里的 NAS 设备的需求。所以才有了这篇文章。
概念解释
- NAS – 简单的说就是一个存储中心。
- Frp – 一种内网穿透技术。
- 内网穿透 – 就是通过其他公网 IP 来访问本地没有公网 IP 网络环境的一个技术。
内网穿透
内网穿透技术众多,比如花生壳内网穿透、Ngrok、Frp 都是现在主流的内网穿透技术。 但我个人认为 Frp 是目前最好用配置最简单的(经过测试)。
- 花生壳 配置简单方便,比较傻瓜化。但要收费。虽然也有免费版,但由于免费版的流量限制,基本上没有什么实际作用。
- Ngrok 发布时间相对较长,对象较为成熟的一种内网穿透技术。但由于功能的强大。配置较为繁琐。因为折腾许久没有成功过,最后放弃。
- Frp 配置简单,第一次用就配置成功了。并且适用于各大主流平台设备。
具体过程
准备工作
- 一台有公网 IP 的服务器 (VPS、云主机)之前注册了一个国外的 VPS, 准备做内网穿透和 vpn 用,但由于访问速度。果断放弃,最后换成了自己阿里云 ECS。
- NAS (客户端)群晖 DS 416 play
基本步骤
由于 Frp 官网说明文档还是比较详细。我不过多做解释。
服务器端配置:
- 登录服务器,在 Release页面 下载自己服务器对应版本 Frp
wget https://github.com/fatedier/frp/releases/download/v0.12.0/frp_0.12.0_linux_amd64.tar.gz
实例中:我的阿里云 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] 必填的
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
需要后台运行,请看下面
服务端配置结束。
客户端配置
客户端就是您本地需要做外网服务的设备,可以是 PC、Mac、NAS、路由器、或者虚拟机里的 liunx 系统。 这篇文章主要是利用 Frp 技术访问在群晖 NAS 服务的应用。实例也是 NAS 系统。
- SSH 登录群晖 NAS (群晖必须开启 ssh) 
ssh nas
我设置过别名,详情查看我的另一篇文章MAC 终端 SSH 别名代替 IP 的方法 ssh nas = ssh user@ip
- 下载 Frp, 删除服务端文件。(因为和服务端配置一样,不再一一赘述。)
sudo -i // 切换 root 用户 wget https://github.com/fatedier/frp/releases/download/v0.12.0/frp_0.12.0_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 = 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]
type
服务类型(tcp、http、https、udp)local_ip
NAS 本地局域网内网 iplocal_port
NAS 开启 ssh 服务端口号,默认 22remote_port
服务器端 ssh 端口,和服务器端[ssh] listen_port
配置一致[nas] NAS 管理界面
subdomain
二级域名 nas.lekee.cc 访问 NAStype = http
服务类型为 httplocal_port
NAS 默认端口 5000[web] NAS web Station 服务,没用可以不用设置
type = http
类型为 httplocal_port = 80
NAS web 服务端口subdomain = web
二级域名 web.lekee.cc 使用自定义二级域名的时候,域名 *.lekee.cc 要解析到服务器 IP详细配置
- 保存,运行。(后台运行,请看下面)
./frpc -c ./frpc.ini
此时在服务端会看到”start proxy sucess”字样,即连接成功。
测试运行
ssh 测试
ssh -p 6000 user@服务器ip
user 为你登录群晖 NAS 的用户名
nas 界面
打开浏览器输入 nas.lekee.cc:8080
, 显示群晖登录界面成功。 
NAS web Station
打开浏览器输入 web.lekee.cc:8080
, 显示下面页面成功。 
域名后面 8080 端口可以隐藏,下面介绍如何隐藏 8080 端口。
扩展应用
后台运行
后台运行服务的方法有很多,这里只说一种可以在服务器端(Linux)和客户端(NAS)都可以用的 nohup指令
服务器端
nohup ./frps -c ./frps.ini &
客户端
nohup ./frpc -c ./frpc.ini &
自动启动
我的另一篇文章 《frp 自动启动》
隐藏 8080 端口
总结疑问
使用状态
目前使用一切正常,能满足我的日常需求。 在外面需要访问 NAS 里的的文件的时候速度还比较满意。 今天还测试在外面看 NAS 里的视频,也一点都不卡。
我的担心
但我的担心就是在外面观看 NAS 里的视频的时候,流量有点害怕。 因为我现在使用阿里云 ECS 计费方式是按流量计费的。 不知道这样在外面看视频,用阿里云做中转。流量到底是怎么计算的。 还需要进一步探究。不过之前阿里云上预存1000元,都好几个月了。还有999.78元。
展望
这个技术伟大之处就是,只要设备能上网。不管有没有公网 IP,都可以让任何一个能上网的机子访问该设备。该设备可能是一台 PC,一个服务器,一个路由器,一个NAS,一个摄像头,一个… 无限扩展无限衍生,无限可能… 希望本文能您带来帮助!
请教下我群晖213+用哪个程序? 用linux_386.tar.gz执行错误
这个内核不是32位,应该是64位的。您的NAS应该选择frp_0.13.0_linux_amd64.tar.gz 这个
请问我编辑好后在nas中运行,提示
2017/08/18 02:12:57 [W] [control.go:121] login to server failed: dial tcp ip地址:7000: getsockopt: connection refused
dial tcp ip地址:7000: getsockopt: connection refused
看一下服务器端 7000端口是否开启
我也是这个问题请问解决了吗?
Hi,我根据你的配置,现在SSH是可以访问到内网的nas,frp的管理的页面也可以打开。但是nas的web页面都无妨进去,frp提示”the page you are looking for is currently unavailable.”,请问这个问题怎么解决?
这个问题,是NAS里web配置的问题,你看一下你的NAS的web服务正常不?你可以直接用NAS(内网ip或者内网IP:80)访问试一下。看你的NAS web服务正常不?
没看懂怎么弄的,我的是黑群晖, 群晖里面的 docker 不是可以装frp吗 ,容器那个
黑群晖没弄过,为什么要用docker 装frp, 直接SSH 到你的黑群晖里,下载相对应的版本的就好。内核64位就下载64位的。
你好,没有域名哪该填什么
没有域名怎么访问呢?ip 吗?你的 ip 外网可以访问吗?如果可以的话,那就用 ip 地址代替域名就好
阿里云的虚拟云主机可以用这个方法吗
可以ssh到服务器吗?可以ssh到服务器就可以
上传服务器什么目录下
群晖上传在哪里
第一次接触希望理解
这个随便,一般root目录下面就可以
nas> wget https://github.com/fatedier/frp/releases/download/v0.16.0/frp_0.16.0_linux_amd
64.tar.gz
–09:47:05– https://github.com/fatedier/frp/releases/download/v0.16.0/frp_0.16.0_linux_amd64.tar.gz
=> `frp_0.16.0_linux_amd64.tar.gz’
Resolving github.com… 13.229.188.59, 13.250.177.223, 52.74.223.119
Connecting to github.com|13.229.188.59|:443… connected.
ERROR: Certificate verification error for github.com: unable to get local issuer certificate
To connect to github.com insecurely, use `–no-check-certificate’.
Unable to establish SSL connection.
连接错误了 , 下载地址
https://github.com/fatedier/frp/releases
国内的vps一般带宽也就1M,搭建frp按理说上传才在速度应该比较慢吧~不太懂,希望博主解答呢,哈哈。
一把文件没啥,我aliyun 4M带宽,看NAS的视频勉强还可以。
黑群晖,按照您的方法执行后显示 [E] [control.go:246] authorization failed
不知道原因所在
授权失败,token 对吗?
楼主,在配置完群晖的客服端ini文件后
试运行出现
Parse conf error: proxy 【nasweb】 local_port error
怎么解决啊
错误很明显本地端口错误,检查NAS的端口是否开启,防火墙是否限制
wo de wenti ye yiyang qingwen jiejue l ma?