Files
docker_stack/karylab-entrance/exchange.md
ChenKaiLiuG 997d078b64 Add FRP
2026-02-28 04:38:23 +08:00

5.4 KiB
Raw Blame History

工程師交接

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 / 其他內網服務

安全設計

  • 控制通道 TLSfrps 強制 transport.tls.force = truefrpc 開啟 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.tomlserverAddr 填入 VPS 固定 IP 或可解析的網域皆可
  3. frpc.tomlfrps.tomltoken 必須設定為同一組強密碼
  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 流量),真正的端到端都在您自己的掌控之下。