frp是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。 也就是说,利用frp,在家里搭建的黑群晖,即便没有公网IP,也能在任何有互联网的地方访问到。
黑群晖:要知道什么是黑群晖,先要知道群晖就是网络存储设备的一个品牌,说白了就是一台低功耗主机挂一个或多个大容量硬盘,卖那么贵的价格不过是有一个用linux修改的专用系统和一系列配套服务。那么,自己DIY一台主机装个破解版的群晖系统就是黑群晖啦。
不过要实现这一目标,先得有一个具备公网IP的VPS或云主机,虽说还是离不开公网IP,但这总比找宽带运营商要个公网IP简单多了。
这个方法的缺点也显而易见,访问速度在一定程度上受限于VPS的性能(当然,还要受限于你的宽带速度,局域网速度,黑群晖性能等等)。比如我用Linode那个5美元/月的VPS做frp,访问自己的黑群晖就额外具备修身养性、培养耐心的功效。如果能换个阿里云或者腾讯云之类的国内主机,速度想必会快不少。
反正,能用钱解决的问题都不是问题,问题是我没钱,解决有无问题才最最重要的。
frp服务器端的配置:
1.根据自己主机的操作系统下载对应的frp版本,我Linode的VPS用的是Centos7,所以下载的是linux_amd64。截至我发文止,frp的最新版是0.13.0,可以到https://github.com/fatedier/frp/releases查看frp的最新版本,如有更新版本,把下面代码中的版本号(蓝字部分)改成最新的版本号就行了。新手不熟悉操作,直接复制粘贴我的代码用0.13.0版frp也没啥问题。
wget https://github.com/fatedier/frp/releases/download/v0.13.0/frp_0.13.0_linux_amd64.tar.gz
2.使用tar指令解压tar.gz文件
tar -zxvf frp_0.13.0_linux_amd64.tar.gz
3.进入 frp 目录
cd frp_0.13.0_linux_amd64
4.删除不必要的客户端文件
rm -f frpc frpc_full.ini frpc.ini
5.配置服务器端文件
vi frps.ini
说起来真是不好意思,执行vi frps.ini命令后,完全不知道如何下手。
好在VPS装了宝塔面板,可以直接找出frps.ini这个文件进行编辑……
[common]
bind_port = 7000
vhost_http_port = 8080
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = 123456
max_pool_count = 5
authentication_timeout = 900
subdomain_host = qfsyj.com
[ssh]
listen_port = 6000
auth_token = 123321
简单说明下这个配置文件,详细配置可以参见官方中文文档:
[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 用户身份认证
6.启动服务器端frp
./frps -c ./frps.ini
启动成功应该是这样:
在配置frp客户端之前先说下黑群晖的相关设置:
在我设置frp成功后,把黑群晖(产品型号:DS3615xs,DSM版本:DSM 5.2-5592 Update 1)格盘重装打算重新配置一次frp,结果怎么都装不进frp,折腾许久才自己找到问题所在,累! 重装系统后的黑群晖,只能看到usbshare1这一个文件夹,下载frp总出错,被困扰许久,网上也搜不到解决办法,差点因此放弃折腾黑群晖……
记得重装之前,有个home文件夹,下载的frp就在home文件夹里,但是重装后就没看到这个home文件夹了,反复重装几次都没有,回头去翻之前看过的黑群晖安装教程,也并没谁提到过这home文件夹,真不知道当初那个home文件夹我是怎么弄出来的……
最后还是无意间发现“用户账户–高级设置”下有个“启动家目录服务”。
家?home?
试着启动看看,结果home文件夹出来了,终于能下载frp了……你妹的(内心是泪流满面的画面)!
如果是用SSH来配置黑群晖,记得在“控制面板–终端机和SNMP”中“启动SSH功能”,端口可以按自己的喜好修改。
黑群晖frp客户端的配置(我是用SSH连接黑群晖进行配置):
1.我看的教程都是给客户端装linux_386版本,我开始也是照着教程装这个,但后来不知怎么就装成linux_amd64版本,用着也没发现什么异常就懒得改了,教程也按这个版本写。
其实黑群晖下载安装frp客户端跟前面装服务器端都差不多,用admin账号登陆后下载frp。
wget https://github.com/fatedier/frp/releases/download/v0.13.0/frp_0.13.0_linux_amd64.tar.gz
下载完成后,可以看到黑群晖的home文件夹下多了个frp_0.13.0_linux_amd64.tar.gz文件。
2.使用 tar 指令解压 tar.gz 文件
tar -zxvf frp_0.13.0_linux_amd64.tar.gz
3.进入frp文件夹
cd frp_0.13.0_linux_amd64
这个命令执行后SSH界面没有任何反应(6.1版群晖系统已经解决这个问题,我这用的是5.2版),不用管它,继续执行下一个命令就是。
4.删除服务器端文件
rm -f frps frps_full.ini frps.ini
5.编辑frpc.ini文件对客户端进行配置
vi frpc.ini
呃,还是不会在命令行下修改文本,直接在黑群晖里打开这个文件修改。
6.配置文件如下 :
[common]
server_addr = 172.104.113.219
server_port = 7000
auth_token = 123321
pool_count = 1
[ssh]
type = tcp
local_ip = 192.168.2.136
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 服务器端公网IP
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 管理界面
subdomain 二级域名
type = http 服务类型为 http
local_port NAS 默认端口 5000
[web] NAS web Station 服务,没用可以不用设置
type = http 类型为 http
local_port NAS web 服务端口
subdomain 二级域名
这里要特别说明的是,二级域名不要用全称,比如我的黑群晖是用nas.qfsyj.com这个二级域名,只要subdomain = nas就行了。
一开始我用subdomain = nas.qfsyj.com,frp总是报错,又被困扰许久……
7.启动frp客户端
./frpc -c ./frpc.ini
启动成功的画面应该是这样:
现在可以你的二级域名加端口号访问黑群晖了,比如我的http://nas.qfsyj.com:8080。
http://web.qfsyj.com:8080也可以打开,只是鉴于这访问速度,没勇气在黑群晖上搭个网站。
折腾至此,如果已经顺利实现内网穿透,应该会发现得开着两个SSH窗口才行,关闭就等于关了frp。
那么,现在就要用到后台运行命令了,服务器端执行:
nohup ./frps -c ./frps.ini &
客户端执行:
nohup ./frpc -c ./frpc.ini &
至于frp的自启动,我还没搞定,服务器端应该不难,但是黑群晖怎么设置自启动有点棘手,因为我这个版本的黑群晖貌似没有开机启动服务的设置。
2017.07.25补充:本来用的挺好的,突然就弹出个窗口提示“您没有权限使用本项服务”,按确定就被踢回登陆界面,重新登陆又说我没有权限,根本没法使用,但是用局域网网址登陆就没问题。
经百度,得知只要在“控制面板–安全性”里把“忽略IP检查来加强浏览器的兼容性”打勾应用就可以了。
参考文章:《如何用 Frp 实现外网访问群晖 NAS》,感谢该文作者提供回复指导!
虽然看不太明白,还是支持一下。
非常感谢,看不明白大概是因为没有这方面的需求。