共计 3533 个字符,预计需要花费 9 分钟才能阅读完成。
在前面提過 安裝 frp 服務端,這裡記錄下怎麼透過該工具將 NAS 底下安裝的應用服務發布到公網世界。
安裝
這裡要注意下載版本必須保持與服務端一致由於我先前安裝版本為 0.30.0 因此客戶端也是下載對應版本,不知道可以透過打開服務端管理介面查看
# 下載 FRP
wget https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_linux_amd64.tar.gz
# 解壓縮
tar -xvf frp_0.30.0_linux_amd64.tar.gz
# 切換到目錄
cd frp_0.30.0_linux_amd64
# 刪除服務器配置
rm -rf frps*
配置
vim frpc.ini
frpc.ini 配置
[common]
# 修改成自己的域名或服務器 IP 地址及連接埠綁定
server_addr = 0.0.0.0
server_port = 7000
# 客戶端管理介面
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
# 群暉後台管理介面(https)
# 使用 https 連線
[nas-backend]
type = https
local_port = 5001
custom_domains = server.yosheng.tw
# 群暉 WebStation 反向代理
# 使用 https 連線
[nas-web-reverse]
type = https
local_port = 443
custom_domains = test-home.yosheng.tw
# 基於群暉 Docker 搭建 Jenkins
# 透過 https2http 插件實現 https 連線
[nas-jenkins-web]
type = https
local_port = 8888
custom_domains = jenkins.yosheng.tw
plugin = https2http
plugin_local_addr = 127.0.0.1:8888
# HTTPS 证书相关的配置
plugin_crt_path = /usr/local/etc/certificate/WebDAVServer/webdav/fullchain.pem
plugin_key_path = /usr/local/etc/certificate/WebDAVServer/webdav/privkey.pem
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp
# 基於群暉 Docker 搭建 Aria2
# 內置的 WebGUI 服務
[nas-aria2-web]
type = http
local_port = 6880
custom_domains = aria2.yosheng.tw
# 群暉 SSH 連線
[nas-ssh]
type = tcp
local_ip = 192.168.31.104
local_port = xxxx
remote_port = xxxx
# 基於群暉 Docker 搭建 Aria2
# 穿透 RPC 連線
[nas-aria2-rpc]
type = tcp
local_ip = 192.168.31.104
local_port = 6800
remote_port = 58002
use_encryption = true
use_compression = true
下述開始針對上面的配置細說
[common]
基本與服務端連線的配置,這裡建議開啟 adminUI 配置,方便後續添加後直接在瀏覽器上修改即可生效,不需要再重啟服務
[nas-backend] & [nas-web-reverse]
同時使用 https 連線,意味著需配合服務端 vhost_https_port 使用,這裡配置 custom_domains 用於連線時使用,由於我在服務端配置端口為 56443 因此應該訪問 https://server.yosheng.tw:56443/ 即可連線回群暉管理介面,因為先前在群暉已經配置好證書所以不會出現警告,配置證書可以參考該 黑群暉使用 https 連線 ,此外域名映射到的 IP 可以參考 更換域名託管商使用免費 CDN。
[nas-jenkins-web]
因為原生容器內只提供 http 連線,如果要使用 https 官方建議使用 nginx 做反向代理,這部分後面會說明如何透過群暉內建的 nginx 實現,因為透過該方法實現無法在後台查看連線狀況,因此建議使用 frp 提供的 https2http 插件來實現。
關於 HTTPS 证书相关的配置 這部分證書跟鑰匙位置,是和群暉內置 nginx 共用,路徑參考 黑群暉使用 https 連線,當時是透過一鍵腳本執行,腳本預設會將證書及鑰匙放到該位置。
[nas-aria2-web]
這部分使用 http 連線是因為使用 https 連線,針對 rpc 連線的部分也必須做額外的配置,必須將證書及鑰匙配置到 aria2.conf 上面否則會出現連線異常,具體可以參考 配置 https 后无法连接 rpc 以及 Aria2 搭配 AriaNg 实现离线下载 目前我就不在折騰。
[nas-ssh]
使用 tcp 連線是因為 ssh 也是基於上面的服務,具體本地端口和遠程連線端口記得修改下
[nas-aria2-rpc]
值得一提的是 use_encryption 及 use_compression 可以用來隱蔽連線內容,詳細如文檔所說。
引述文檔內容
如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了 ssh 协议等,通过设置 use_encryption = true,将 frpc 与 frps 之间的通信内容加密传输,将会有效防止流量被拦截。
如果传输的报文长度较长,通过设置 use_compression = true 对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源。
TLS
从 v0.25.0 版本开始 frpc 和 frps 之间支持通过 TLS 协议加密传输。通过在 frpc.ini 的 common 中配置 tls_enable = true 来启用此功能,安全性更高。
为了端口复用,frp 建立 TLS 连接的第一个字节为 0x17。
[t-warning icon='fa-solid fa-triangle-exclamation']注意: 启用此功能后除 xtcp 外,不需要再设置 use_encryption。[/t-warning]
查看 AdminGUI
打開瀏覽器輸入 群暉的 IP 地址 預設端口 7400 即出現附圖
上述 local address 的部分出現空代表在配置中 local_ip 沒輸入,系統會預設使用 127.0.0.1 來連線,因此這裡建議盡量補全,方便日後查看,此外點選 Configure 的部分就可以直接修改配置再點及 Upload 即可生效。
配置群暉開機自動啟動
控制台 → 任務排程表 → 新增 → 觸發任務 → 使用者自訂指令碼 如附圖輸入任務名稱事件選擇開機
任務設定如附圖
/usr/syno/etc.defaults/rc.sysv/S99frp.sh
# 建立 S99frp.sh
sudo vim /usr/syno/etc.defaults/rc.sysv/S99frp.sh
S99frp.sh
#!/bin/bash
cd /usr/local/software/frp_0.30.0_linux_amd64/
nohup ./frpc -c ./frpc.ini &
記得根據自己的配置修改即可
如果需要查看日誌可以透過該命令
sudo tail /usr/local/software/frp_0.30.0_linux_amd64/nohup.out
補充群暉反向代理
控制台 → 應用程式入口 → 反向代理伺服器 → 新增
假設我要代理 Aria2 服務如附圖
記得配置完回到 frpc.ini 修改下述設定,在 custom_domains 後面添加剛剛新增的主機名稱,還有在 cloudflare 上面配置 A 紀錄指定到 VPS 上面即可。
[nas-web-reverse]
type = https
local_port = 443
custom_domains = test-home.yosheng.tw, aria2.yosheng.tw
custom_domains 這個設定根據原始碼配置是讀取後會根據逗號進行分割存成陣列,最後再讀取使用。
為什麼透過群暉內建的反向代理?
主要是方便公用憑證,不需要再自己額外手動處理,如果使用低版本的 FRP 本身是沒有 http2https 的插件功能,這個方法就可以解決該問題。