使用 Frp 对内网黑群晖进行穿透型映射

使用 Frp 对内网黑群晖进行穿透型映射

发表于 2017/05/15 更新于 2020/04/27 900 字 4 分钟
AI 摘要 由 AI 自动生成

|

虽然之前自己搭的黑群晖已经洗白,并成功使用 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

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

[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`。
``` ini
[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 作为系统服务管理工具,所以我们使用下面的方法注册系统服务。
``` shell # 复制文件
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`,保存,选定这个计划任务,选择运行。

## 后记

实测通过,如果有任何问题,欢迎留言讨论。
作者: 小谈谈
声明: 本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。