Files
docker_stack/karylab-vps/exchange.md
ChenKaiLiuG d7bf9c2e85 Add mc FRP
2026-03-28 22:05:27 +08:00

122 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 工程師交接
## 1. cloudflared -> vps tunnel已完成
### 實作結果採用方案一FRP
#### 檔案清單
| 檔案 | 位置 | 說明 |
|---|---|---|
| `vpstunnel+npm.yml` | `karylab-entrance/` | 內網 compose stackfrpc + npm + filebrowser |
| `frpc.toml` | `karylab-entrance/config/` | frpc 設定,掛載至 frpc container |
| `vps-tunnel.yml` | `karylab-vps/` | VPS compose stackfrps |
| `frps.toml` | `karylab-vps/config/` | frps 設定,掛載至 frps container |
#### 架構說明
```
[外部訪客]
│ TCP 80/443
[PVE VM固定 IP]
└─ frps container
│ TLS 加密隧道Port 7000
[UCG 內網]
└─ frpc container ─→ npm containerPort 80/443
NAS / 其他內網服務
```
#### 安全設計
- **控制通道 TLS**frps 強制 `transport.tls.force = true`frpc 開啟 `tls.enable = true`,控制通道全程加密
- **Token 驗證**frpc 與 frps 使用 HMAC-SHA256 簽名的 token 驗證身份
- **NPM 管理後台Port 81不對外 tunnel**:只能從內網直接存取 `http://內網機器IP:81`
- **建議**:在 VPS 防火牆UFW / iptables限制 Port 7000 只允許內網出口 IP 連入
#### 部署注意事項
1. **VPS 防火牆**必須開放 inbound TCP Port **80、443、7000**,否則 frpc 會出現 `i/o timeout`
2. `frpc.toml``serverAddr` 填入 VPS 固定 IP 或可解析的網域皆可
3. `frpc.toml``frps.toml``token` 必須設定為**同一組強密碼**
4. 設定檔路徑:
- VPS`/opt/frp/frps.toml`
- 內網:`/opt/cloudflare/frp/frpc.toml`
---
### 目標:
原來是cloudflare tunnel對接npm 再讓npm去找相關的設備
直接把tunnel換成其他容器 然後對接vps(pve上的vm)
### 方案說明:
部署在 PVE 上的那台「固定 IP VM」當作私有的 Cloudflare 節點(也就是您的自建 VPS然後用特定的「隧道容器」來取代 cloudflared+npm.yml 中的 cloudflared打通兩個隔離的網段。新的版本更新到 vpstunnel+npm.yml。
要達成這個目的,有兩種主流的開源工具/容器可以完美取代 Cloudflare Tunnel以下為您分析兩種作法
**方案一:使用 FRP (Fast Reverse Proxy) —— 最直接的 1:1 替換**
FRP 的運作邏輯與 Cloudflare Tunnel 幾乎一模一樣,只是伺服器從 Cloudflare 變成了您的 PVE VM。
架構配置:
```
前端 (您的 PVE VM - 具備固定 IP):安裝並運行 frps (FRP Server) 容器。它負責監聽來自網際網路的請求(如 Port 80, 443, 25565
後端 (您的 UCG 網段內):部署一個 frpc (FRP Client) 容器。這個容器會主動向 frps 發起連線,建立一條加密隧道。
路由分發frpc 收到流量後,將 HTTP/HTTPS 流量轉交給同在 UCG 網段內的 NPM (Nginx Proxy Manager),再由 NPM 去找 UCG 底下的 NAS 或其他設備。
```
優點:架構與 Cloudflare Tunnel 概念完全一致,完全不用開 Port因為是 frpc 由內向外主動連線的。
缺點:設定檔是基於 ini/yaml需要稍微學習一下語法。
參考資源FRP 官方 GitHub 專案庫與文件
**方案二:使用 WireGuard 或 Tailscale —— 網路層的虛擬區網 (推薦)**
與其只代理特定 Port不如在 PVE VM 和 UCG 網段之間建立一個專屬的「虛擬私有區域網路 (VPN)」。
架構配置:
```
前端 (您的 PVE VM):安裝 NPM 以及 Tailscale (或 WireGuard) 容器。將 Zyxel 的 80/443 Port Forwarding 到這個 VM。
後端 (您的 UCG 網段內):只需要在負責提供服務的機器(或 NPM上安裝 Tailscale讓它們加入同一個虛擬網路。
路由分發:當外部訪客連線到您的固定 IP (PVE VM) 時VM 上的 NPM 會解析網域,並透過 Tailscale 給的虛擬 IP例如 100.x.x.x將流量安全地轉發到 UCG 底下的設備。
```
優點:
極致的隔離Tailscale / WireGuard 使用點對點加密,流量穿梭在 Zyxel 網段與 UCG 網段之間時是完全加密的。
管理方便:所有伺服器都在同一個虛擬網段內,互相溝通就像在同一個 Switch 下一樣簡單。
參考資源Tailscale 官方網站、WireGuard 官方網站
**流量動線解析 (以方案二為例)**
假設訪客要訪問您在 UCG 網段下的 Nextcloud
外部訪客輸入 cloud.example.com。
DNS (Cloudflare 灰雲) 將網域解析到您的 中華電信固定 IP。
流量抵達 vps 側路由器,透過 Port Forwarding 送入 PVE VM (自建 VPS) 的 Port 443。
PVE VM 上的 NPM 接收到請求,查看設定規則,發現要把流量送給 Nextcloud。
流量進入 隧道容器 (WireGuard/Tailscale),被加密打包。
加密封包穿越實體網路,抵達 UCG 網段下的目標機器。
目標機器解密封包,交由 Nextcloud 容器 處理。
這樣做的好處?
擺脫限制:完全沒有 Cloudflare 的 100MB 檔案大小限制,也沒有任何協議的限制(您可以傳輸 TCP, UDP, 甚至跑自訂協議)。
完美隔離:您的 UCG 路由器不需要開放任何對外 Port (Inbound 規則維持全擋),所有的外部威脅第一時間都是由 Zyxel 底下的 PVE VM 承受。就算 VM 被攻破,攻擊者也無法直接看見 UCG 底下的設備(除非他們破解了加密隧道)。
掌控權資料不再經過第三方的邊緣節點解密Cloudflare 橘雲會解密 HTTPS 流量),真正的端到端都在您自己的掌控之下。