前言
因為有在外面訪問家里 NAS 的需求,白群暉自帶QuickConnect速度也不快,黑群不能用。如果有公網IP(動態),則可以通過設置DDNS來訪問。如果沒有公網IP,則需要用內網穿透技術來實現通過其他公網 IP 來訪問家里的 NAS 設備的需求。所以才有了這篇文章。內容均來自于網絡,這里只是整理、記錄。
概念解釋
- NAS - 簡單的說就是一個存儲中心。
- Frp - 一種內網穿透技術。
- 內網穿透 - 就是通過其他公網 IP 來訪問本地沒有公網 IP 網絡環境的一個技術。
內網穿透
內網穿透技術眾多,比如花生殼內網穿透、Ngrok、Frp 都是現在主流的內網穿透技術。
不少網友認為 Frp 是目前最好用、配置最簡單的。
- 花生殼
配置簡單方便,比較傻瓜化。但要收費。雖然也有免費版,但由于免費版的流量限制,基本上沒有什么實際作用。 - Ngrok
發布時間相對較長,是較為成熟的一種內網穿透技術。這是一個國外的穿透工具,1.0版本是開源的,目前2.0以上版本已經閉源,并且提供免費和收費的服務。由于功能的強大。配置較為繁瑣。 - Frp
這是一個國內的開源工具,目前最新版本為0.29.0,有比較詳盡的中文文檔,并且一直在維護更新。由于frp一直開源,并且維護積極、更新頻繁,再加上中文文檔加持,本文最終選擇了frp作為搭建工具。配置簡單,并且適用于各大主流平臺設備。
具體過程
- 準備工作
一臺有公網 IP 的服務器 (VPS、云主機),這里我的VPS是ubuntu 16.04
NAS (客戶端) - 基本步驟
Frp 官網說明文檔比較詳細,可以參考。 - 服務器端配置
- 登錄服務器,在 Release頁面 下載自己服務器對應版本 Frp。(這里選擇v0.26.0,最新版v0.29.0啟動時報錯:segmentfault,尚不清楚原因)
wget https://github.com/fatedier/frp/releases/download/v0.26.0/frp_0.26.0_linux_amd64.tar.gz - 使用 tar 指令解壓 tar.gz 文件
tar -zxvf frp_0.26.0_linux_amd64.tar.gz
解壓后都包含以下文件和一個systemd文件夾:
rpc —— 客戶端可執行二進制文件
frpc_full.ini —— 包含全部配置項的客戶端配置文件
frpc.ini —— 客戶端使用的配置文件,包含最簡配置
frps —— 服務端可執行二進制文件
frps_full.ini —— 包含全部配置項的服務端配置文件
frps.ini —— 服務端使用的配置文件,包含最簡配置
systemd —— 文件夾,用于將frpc和frps添加為服務的配置,linux下使用systemd作為守護程序
注:服務器端只需用到 frps 相關文件,客戶端只需用到 frpc 相關文件。
- 進入 frp 目錄
cd frp_0.26.0_linux_amd64 - 刪除不必要的客戶端文件
rm -f frpc frpc_full.ini frpc.ini
rm -f frpc* //會把所有以frpc開始的文件都刪除 - 配置服務器端文件
vim frps.ini - 編輯配置文件
[common]
bind_port = 7000
vhost_http_port = 5000
dashboard_port = 7500
dashboard_user = 用戶名
dashboard_pwd = 密碼
max_pool_count = 5
authentication_timeout = 900
簡單解釋如下:點擊官方
[common] 必填的
bind_port Frp 服務端口(可自定義)
vhost_http_port http 訪問端口(可自定義)
dashboard_port dashboard 界面端口
dashboard_user 登錄 dashboard 用戶名
dashboard_pwd 登錄 dashboard 密碼
max_pool_count 最大連接池數量
authentication_timeout 超時驗證時間
- 保存上面配置文件,啟動 frp 服務器
./frps -c ./frps.ini
如果要后臺運行:
nohup ./frps -c ./frps.ini &
- 客戶端配置
客戶端就是您本地需要做外網服務的設備,可以是 PC、Mac、NAS、路由器、或者虛擬機里的 liunx 系統。
這篇文章主要是利用 Frp 技術訪問在群暉 NAS 服務的應用。實例也是 NAS 系統
- 下載frp,刪除服務端文件
sudo -i // 切換 root 用戶
wget https://github.com/fatedier/frp/releases/download/v0.26.0/frp_0.26.0_linux_386.tar.gz
tar -zxvf frp_0.26.0_linux_386.tar.gz
cd frp_0.26.0_linux_386
rm -f frps*
2 .編輯 frpc.ini 文件(客戶端配置文件)
vim frpc.ini
3. 編輯配置文件如下
[common]
server_addr = ip
server_port = 7000
auth_token = 和服務器端對應
pool_count = 1
[ssh]
type = tcp
local_ip = NAS 局域網ip
local_port = 6000
remote_port = 6000
[nas_dsm]
type = http
local_ip = NAS 局域網ip
local_port = 5000
custom_domains = dsm.yourdomain
[nas_photo]
type = http
local_ip = NAS 局域網ip
local_port = 80
remote_port = 80
custom_domains = photo.yourdomain
簡單解釋:
[common] 必填的
server_addr 服務器端公網
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,我改為6000
remote_port 服務器端 ssh 端口,和服務器端 [ssh] listen_port 配置一致
[nas_dsm] NAS DSM管理界面
custom_domains = dsm.yourdomain 二級域名,可通過dsm.yourdomain 訪問 NAS
type = http 服務類型為 http
local_port NAS 默認端口 5000
[nas_photo] 使用手機DS Photo 訪問,沒用可以不用設置
type = http 類型為 http
local_ip NAS 本地局域網內網 ip
local_port = 80 NAS web 服務端口
remote_port=80 需要做一個端口轉發才可以實現APP登陸,端口自定義
custom_domains = photo.yourdomain 二級域名,手機app ds photo 可通過 photo.yourdomain:remote_port訪問
使用自定義二級域名的時候,域名 *.yourdomain 要解析到服務器 IP
- 保存,運行
./frpc -c ./frpc.ini
如果要后臺運行:
nohup ./frpc -c ./frpc.ini &
注意:此時frpc會通過7000端口嘗試與frps建立通信連接,如果一切順利,則終端會提示連接成功(start proxy sucess);但實際情況卻顯示連接失敗,因為還少了兩個步驟:
- 阿里云、騰訊云需要登陸控制臺將
6000、7000、80、5000端口加入安全組規則放行。 - 檢查服務器防火墻是否打開,防火墻要允許
6000、7000、80、5000這幾個端口放行。
擴展
通過上面在終端直接啟動frps的方式,會占用終端,并且停止和重啟等管理操作也不方便。
為了方便管理frps的啟動、停止、重啟和開機自啟,我們需要將frps添加為系統service,通過systemd守護程序來管理。
在frp_0.26.0_linux_amd64目錄里的systemd目錄下,已經為我們準備好了添加service的模板:
frpc.service
frpc@.service
frps.service —— 服務端使用此模板
frps@.service
- 進入目錄/root/frp_0.26.0_linux_amd64/systemd,編輯frps.service:
cd /root/frp_0.26.0_linux_amd64/systemd
vim frps.service
- 將
user=nobody改為user=root,并保存
注:root表示運行frps的用戶 - 其中服務運行配置項為:
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini,我們需要將二進制文件frps復制或移動到到/usr/bin目錄,配置文件frps.ini復制或移動到/etc/frp目錄,而/etc/frp目錄不存在,需要手動創建一個。
3.1. 復制frps到/usr/bin目錄
cp ~root/frp_0.26.0_linux_amd64/frps /usr/bin
3.2. 創建frp目錄,并復制frps.ini到/etc/frp目錄
cd /etc
mkdir frp
cp ~root/frp_0.26.0_linux_amd64/frps.ini /etc/frp
- 將frps.service移動到/etc/systemd/system目錄
mv ~root/frp_0.26.0_linux_amd64/systemd/frps.service /etc/systemd/system - 完成以上步驟,我們就可以愉快使用systemctl管理frps了:
啟動frps:systemctl start frps
停止frps:systemctl stop frps
重啟frps:systemctl restart frps
查看frps狀態:systemctl status frps
開機啟動frps:systemctl enable frps
同樣地本機也可以通過這種方式將客戶端程序frpc添加為service進行管理。 - windows下使用
winsw使frp注冊為服務,即可以開機啟動。
參考資料
【1】如何用 Frp 實現外網訪問群暉 NAS
【2】frp官方中文說明
【3】使用frp搭建內網穿透
【4】群暉 Docker版的frp客戶端配置詳解
浙公網安備 33010602011771號