虽然之前自己搭的黑群晖已经洗白,并成功使用 QuickConnect 进行连接,但是好景不长,可能是过多的黑群晖用户在使用白群晖服务,造成群晖方面发起了策略,我洗白过的黑群晖被拉黑。为了在外网环境下也可以使用内网的 DSM 服务,所以我决定使用 Frp 对内网黑群晖进行穿透型映射 Frp 对内网黑群晖进行穿透型映射。(在学校机房写的,全程无图,抱歉,如果有问题请留言)

前期准备

括号内是我实际测试过程中使用的软件版本。不同版本在设置中可能存在些许差异,但你可以找和你硬件相匹配的版本来完成映射。

1、黑群晖一台(DSM 6.0.2)
2、有公网 IP 的 VPS(CentOS 7.x)
3、相应版本的 Frp 软件(Linux_amd64)
4、域名一个

Frp 介绍

懒了,直接移步到 GitHub 中的 Frp 中文介绍

你也可以不看这个介绍,但你必须对如下的内容有所了解。

frps 及 frps.ini,frp 的服务端和服务端配置文件,需要放到有公网 IP 的机器上。

frpc 及 frpc.ini,frp 的客户端和客户端配置文件,需要放到处于内网环境的机器上。

Dashboard 可以通过浏览器查看 frp 的状态以及代理统计信息展示。

特权模式,避免每次增加代理都需要操作服务器端,代理的所有配置信息都可以在 frpc.ini 中配置,无需在服务器端做任何操作。

对 Frps 的配置

下载 frp 并解压

wget https://github.com/fatedier/frp/releases/download/v0.9.3/frp_0.9.3_linux_amd64.tar.gz
tar -zxvf frp_0.9.3_linux_amd64.tar.gz
cd frp_0.9.3_linux_amd64

改写配置文件

首先先进入 frps 目录,然后改写配置文件 frps.ini,使用命令:vi frps.ini

为了方便后期维护,所以我对服务端采取的是特权模式配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[common] # frp 监听地址、端口
bind_addr = 0.0.0.0
bind_port = 7000

# 代理 web 服务端口,这里是你在外网访问时的端口号
vhost_http_port = 4080
vhost_https_port = 4443

# frp 控制面板:端口、用户名、密码
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin

# 默认日志配置
log_file = ./frpc.log
# 日志级别,支持: debug, info, warn, error
log_level = info
log_max_days = 3

# 开启特权模式
privilege_mode = true
# 授权 token 建议随机生成
privilege_token = 123456
# 特权模式下允许分配的端口(避免端口滥用),DSM 端口必须在这段里
privilege_allow_ports = 4000-50000

# 后端连接池最大连接数量
max_pool_count = 100

# 口令超时时间
authentication_timeout = 900

# 子域名(将 *.domain.com 解析到装有 frps 的服务器上)
subdomain_host = domain.com

运行一下试试:./frps -c frps.ini,这时候你访问 frps 控制面板,并使用之前配置的用户名、密码登录,应该可以正常进入控制面板页面。

对 Frpc 的配置

开启 DSM 的 SSH:登录 DSM,控制面板->终端机和 SNMP,勾选启动 SSH 功能,保存。

使用 SSH 登录你的 DSM:可以使用 xShell 类的软件,使用 admin 帐号登录。

提升权限:使用 sudo -i 提升权限至 root。

下载 frp:

wget https://github.com/fatedier/frp/releases/download/v0.9.3/frp_0.9.3_linux_amd64.tar.gz
tar -zxvf frp_0.9.3_linux_amd64.tar.gz
cd frp_0.9.3_linux_amd64

进入 frpc 目录,然后改写配置文件 frpc.ini,使用命令:vi frpc.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[common] # 服务端地址及端口
server_addr = domain.com
server_port = 7000

# 默认日志配置
log_file = ./frpc.log
log_level = info
log_max_days = 3

# 特权模式 token,要与服务端一致
privilege_token = 123456

# 发布 dsm 的 web 服务
[dsm]
# dsm 服务方式(http或https)
type = https
local_ip = 127.0.0.1
# dsm 的端口号
local_port = 8000
privilege_mode = true
use_encryption = true
use_gzip = true
# 连接数量
pool_count = 20
# 是否开启密码访问
#http_user = admin
#http_pwd = admin
# 子域名配置(使用下面配置,你的访问地址将是 dsm.domain.com)
subdomain = dsm

试一下吧:./frpc -c frpc.ini,启动 frpc。正常的话,用 https://dsm.domain.com:4443 就可以访问你的 DSM。

加载系统服务

Frps 端加载系统服务

因为 Frps 端我放在了 CentOS7 的 VPS 上,CentOS7 使用 Systemd 作为系统服务管理工具,所以我们使用下面的方法注册系统服务。

# 复制文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cp frps /usr/local/bin/frps
mkdir /etc/frp
cp frps.ini /etc/frp/frps.ini

# 编写 frp service 文件
vi /usr/lib/systemd/system/frps.service
# 内容如下
[Unit]
Description=frps
After=network.target

[Service]
TimeoutStartSec=30
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

# 启动 frp 并设置开机启动
systemctl enable frps
systemctl start frps
systemctl status frps

Frpc 端加载系统服务

因为 Frpc 端我放在了黑群晖上,无法实现向传统 Linux 系统一样注册系统服务,所以我们使用下面的方法注册系统服务。

使用 admin 帐号登录 DSM,控制面板->计划任务->新增->触发的任务->用户自定义的脚本。

常规页面 _>

任务名称:frpc
用户帐号:root
事件:开机

任务设置 _>

用户定义的脚本 /root/frpc/frpc -c /root/frpc/frpc.ini,保存,选定这个计划任务,选择运行。

后记

实测通过,如果有任何问题,欢迎留言讨论。