frp 是什么?

frp(Fast Reverse Proxy)[1] 是一個高性能的反向代理工具,使用 Go 語言編寫,能夠幫助你輕松地將內網服務暴露到公網,實現安全、快速、便捷的內網代理。它支持 TCP、UDP、HTTP、HTTPS 等多種協議,并提供豐富的功能,例如自定義域名、負載均衡、加密傳輸等,能夠滿足各種場景下的內網代理需求。

Sealos

一個云操作系統,集本地開發、線上測試、打包上線為一體,無需云計算專業知識,就能在幾秒鐘內部署、管理和擴展您的應用。官方網站:https://sealos.run

目前 frp 在 GitHub 上已經獲得了超過 83000 顆星。

frp 架構解析

frp 的核心思想是利用反向代理技術,將內網服務通過一個公網服務器進行轉發,從而實現外部用戶對內網服務的訪問。架構圖如下:

它的工作原理可以簡單概括為:

  1. 在擁有公網 IP 的服務器上部署 frp 服務端 (frps)。
  2. 在內網服務器上部署 frp 客戶端 (frpc),并配置需要暴露的服務端口和轉發規則。
  3. frpc 連接到 frps,建立反向代理通道。
  4. 外部用戶通過訪問 frps 的公網 IP 和端口,最終訪問到內網服務。

frp 的核心功能

frp 的主要功能特性包括:

多協議支持

安全特性

高級功能

易用性

性能優化

frp vs. 其他內網代理解決方案

為了更直觀地展示 frp 的優勢,我們可以將其與市面上的其他主流內網代理解決方案進行對比:

特性frpngrokCloudflare Tunnel
開源
免費使用有限制有限制
自托管支持不支持不支持
多協議支持TCP/UDP/HTTP(S)主要支持 HTTP(S)HTTP(S)
配置復雜度
性能
安全特性豐富基本豐富
社區支持活躍有限有限

雖然 ngrok 在易用性方面略勝一籌,Cloudflare Tunnel 則在全球化部署上有優勢,但 frp 在開源友好度、功能靈活性和成本控制上獨樹一幟。特別是對于希望完全控制內網代理基礎設施的團隊來說,frp 提供了一個完美的平衡點。

部署 frp

frp 有多種安裝方式,你可以通過二進制來安裝,也可以通過 Docker 鏡像來部署。但你必須購買一臺具有公網 IP 的服務器。

對于沒有技術背景的同學而言,你也不用擔心安裝問題,Sealos 應用商店[2]提供了一鍵部署的應用模板,點一下鼠標即可完成部署,非常絲滑。而且不需要再單獨購買具有公網 IP 的服務器了,直接按量付費即可。

如果你想快速部署一個 frp,又不想陷入繁瑣的安裝和配置過程,可以試試 Sealos。

直接打開 frp 應用模板:

然后點擊右上角的 “去 Sealos 部署”。

如果您是第一次使用 Sealos[3],則需要注冊登錄 Sealos 公有云賬號,登錄之后會立即跳轉到模板的部署頁面。

這里需要填一下管理面板的用戶名和密碼:

填好參數之后,點擊右上角的 “部署應用” 開始部署。部署完成后,直接點擊應用的 “詳情” 進入該應用的詳情頁面。

等待應用狀態變成 running 之后,直接點擊端口 7500 對應的外網地址便可打開 frp 的管理界面。

除此之外,還有另外一種打開方式,先刷新 Sealos 桌面 (也就是在 cloud.sealos.run 界面刷新瀏覽器),然后你就會發現 Sealos 桌面多了個圖標:

直接點擊這個圖標就可以打開 frp 的管理界面。輸入之前部署時設置的用戶名和密碼就可以登錄了。

是不是有點似曾相識?沒錯,很像 Windows 的快捷方式!

單機操作系統可以這么玩,Sealos 云操作系統當然也可以這么玩。

frp 的使用

下面我們通過一個簡單的例子來快速體驗一下 frp 的使用。

設我們要將本地 Linux 機器上運行在 80 端口的 Web 服務暴露到公網。首先要在 Web 服務所在的本地機器上下載 frpc 二進制文件:

# 設置 VERSION 環境變量為 latest 版本號
VERSION=$(curl -s https://api.github.com/repos/fatedier/frp/releases/latest | grep -oE '"tag_name": "[^"]+"' | head -n1 | cut -d'"' -f4 | cut -d 'v' -f2)

# 下載最新版本 frp
wget https://github.com/fatedier/frp/releases/download/v${VERSION}/frp_${VERSION}_linux_amd64.tar.gz

# 解壓
tar zxf frp_${VERSION}_linux_amd64.tar.gz
cd frp_${VERSION}_linux_amd64

編寫客戶端配置文件:

# frpc.toml
serverAddr = "frp-udkhnlcc.bja.sealos.run"
serverPort = 46451

[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["frp-udkhnlcc.bja.sealos.run"]

然后將鼠標拉到最下面,即可看到 7000 端口對應的外網端口:

啟動 frpc:

./frpc -c ./frpc.toml

現在讓我們回到 frp 服務詳情頁面,點擊 80 端口對應的外網地址就能打訪問地機器的 Web 服務了。

太強了!

注意:由于國內政策原因,后續 Sealos 公有云逐漸合規之后,國內可用區的二級域名只能作為測試使用,如果想正式使用,必須使用自己的域名。

rp 的高級用法

frp 不僅可以進行 HTTP/HTTPS 代理,還有很多高級用法。

TCP 服務代理

以 SSH 服務為例,客戶端配置如下:

# frpc.toml
serverAddr = "wvvirfjfkjnt.bja.sealos.run"
serverPort = 46451

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 31577

在 frp 服務詳情頁面點擊左上角的 “管理所有資源”:

然后將鼠標拉到最下面,除了 7000 端口之外,還暴露了一個 TCP 端口,將這個端口的值作為上述 frpc 配置文件中 remotePort 的值即可。

啟動 frpc:

./frpc -c ./frpc.toml

現在我們到另外一臺機器上就可以通過 ssh -oPort=31577 root@wvvirfjfkjnt.bja.sealos.run 來訪問內網機器的 SSH 服務了:

加密與壓縮

frp 支持在傳輸過程中對 TCP 數據進行加密和壓縮,以提高安全性和傳輸效率。還以 SSH 服務為例,直接添加兩個參數 transport.useEncryption 和 transport.useCompression 就可以支持加密和壓縮了。

# frpc.toml
serverAddr = "wvvirfjfkjnt.bja.sealos.run"
serverPort = 46451

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 31577
transport.useEncryption = true
transport.useCompression = true

負載均衡

假設你的本地 Web 有多個服務,分散在不同的機器上 (或者同一個機器的不同端口),便可以通過配置 group 來實現多個代理的負載均衡。

# frpc.toml
serverAddr = "wvvirfjfkjnt.bja.sealos.run"
serverPort = 46451

[[proxies]]
name = "web1"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["frp-udkhnlcc.bja.sealos.run"]
loadBalancer.group = "web"
loadBalancer.groupKey = "123"

[[proxies]]
name = "web2"
type = "http"
localIP = "x.x.x.x"
localPort = 80
customDomains = ["frp-udkhnlcc.bja.sealos.run"]
loadBalancer.group = "web"
loadBalancer.groupKey = "123"

當然,除了 http 之外,frp 也支持 tcp 和 tcpmux 的負載均衡。

frp 更多高級特性

frp 還有更多強大的特性,如:

限于篇幅,這里就不一一介紹了。感興趣的同學可以查看 frp 的官方文檔[4]了解更多細節。

總結

frp 作為一款輕量級的內網代理工具,具有以下優勢:

  1. 使用簡單:只需簡單配置,即可快速實現內網代理;
  2. 功能強大:支持多種協議、加密壓縮、負載均衡等高級特性;
  3. 性能出色:Go 語言開發,資源占用少,性能卓越;
  4. 可擴展性強:插件機制使其易于擴展;
  5. 活躍度高:社區活躍,持續更新維護。

無論是個人開發測試,還是小型團隊內部使用,frp 都是一個非常好的選擇。大家可以嘗試使用一下,相信會給你的開發工作帶來很大的便利。

文章轉載自:8 萬 star!我愿稱之為內網代理之神,輕松將本地服務暴露到公網!

上一篇:

3分鐘教你接入超低價 DeepSeek-V3

下一篇:

手把手教你如何用 ComfyUI 來畫出刺激的圖
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費