背景
我有一台雲服務器,配置比較低,2C4G的配置,基本上沒法跑多個服務。家裏的電腦配置較高,但是沒有公網IP,於是想通過FRP中轉,實現家裏電腦的公網可用。
核心邏輯
客户端主動連接服務端,建立反向代理隧道,從而讓公網流量通過隧道訪問內網服務。公網 Linux 服務器作為 frp 服務端(frps),內網 Windows 服務器作為 frp 客户端(frpc)
準備工作
環境確認
公網 Linux 服務器:需開放7000端口和待映射端口
frp 通信端口:默認 7000(服務端與客户端的連接端口,必須開放)
映射目標端口:如 3389(Windows 遠程桌面)、80(Web 服務)等(根據你要暴露的內網服務決定)
內網 Windows 服務器:能訪問公網,已安裝要暴露的服務(如遠程桌面、Web 服務)
frp 版本:需下載對應系統的安裝包(https://github.com/fatedier/frp/releases)
公網 Linux:選擇 frp_xxx_linux_amd64.tar.gz(根據服務器架構選,多數是 amd64)
內網 Windows:選擇 frp_xxx_windows_amd64.zip
開放公網服務器端口(關鍵!)
雲服務器:需在 安全組 中添加入方向規則,開放以下端口:
7000/tcp(frp 通信端口)
5000/tcp(映射遠程桌面的公網端口,可自定義,避免衝突)
8080/tcp(映射 Web 服務的公網端口,可自定義)
本地 Linux 服務器:需通過防火牆開放端口
雲服務器配置
下載並解壓 frp
# 1. 進入臨時目錄,下載對應版本(替換為最新版本號,如v0.58.1)
cd /tmp
wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
# 2. 解壓到/usr/local目錄
tar -zxvf frp_0.58.1_linux_amd64.tar.gz -C /usr/local/
# 3. 重命名目錄(方便操作)
mv /usr/local/frp_0.58.1_linux_amd64 /usr/local/frp
# 4. 進入frp目錄
cd /usr/local/frp
配置 frp 服務端(frpc.ini)
[common]
# frp服務端監聽端口(客户端需連接此端口,必須開放)
bind_port = 7000
# 認證token(客户端需與服務端一致,防止他人濫用,建議設複雜值)
token = your_secure_token_123456
# 日誌配置(可選,方便排查問題)
log_file = /usr/local/frp/frps.log
log_level = info
log_max_days = 3
啓動服務端(後台運行)
# 用nohup後台啓動,避免SSH斷開後進程終止
nohup /usr/local/frp/frps -c /usr/local/frp/frps.ini &
# 查看啓動日誌,確認是否成功(無報錯即正常)
tail -f /usr/local/frp/frps.log
設置 frps 開機自啓
# 1. 創建服務文件
vim /etc/systemd/system/frps.service
寫入配置
[Unit]
Description=FRP Server (frps)
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
重啓服務
# 2. 重載系統服務,設置開機自啓並啓動
systemctl daemon-reload
systemctl enable frps
systemctl start frps
# 查看服務狀態(確認running)
systemctl status frps
內網電腦配置
- 下載並解壓 frp 從frp 官方下載地址下載 Windows 版本(如frp_0.58.1_windows_amd64.zip) 解壓到任意目錄(如 C:\frp),解壓後目錄包含 frpc.exe(客户端)、frpc.ini(客户端配置文件)
- 配置 frp 客户端(frpc.ini) 用記事本打開 C:\frp\frpc.ini,刪除默認內容,粘貼以下配置(按需修改):
- 説明:如果要映射其他服務(如 MySQL、FTP),只需新增一個規則段,修改
local_port和remote_port即可。
[common]
# 公網Linux服務器的IP(必填,如123.45.67.89)
server_addr = 你的公網Linux服務器IP
# 公網frps的監聽端口(與服務端bind_port一致,默認7000)
server_port = 7000
# 認證token(與服務端token完全一致)
token = your_secure_token_123456
# 日誌配置(可選)
log_file = C:\frp\frpc.log
log_level = info
log_max_days = 3
# ------------------- 以下是映射規則(按需添加,示例2個常用場景)-------------------
# 場景1:映射Windows遠程桌面(默認端口3389)
# [rdp] 是規則名稱,可自定義(如[windows_rdp])
[rdp]
# 代理類型(tcp,遠程桌面、SSH等用tcp)
type = tcp
# 內網Windows服務器的IP(本地迴環,填127.0.0.1即可)
local_ip = 127.0.0.1
# 內網服務端口(遠程桌面默認3389)
local_port = 3389
# 公網服務器的映射端口(外部訪問用此端口,如5000,需開放)
remote_port = 5000
# 場景2:映射內網Web服務(如IIS,默認端口80)
[web]
type = tcp
local_ip = 127.0.0.1
local_port = 80
# 公網映射端口(如8080,需開放)
remote_port = 8080
開機自啓
@echo off
start "" "C:\frp\frpc.exe" -c "C:\frp\frpc.ini"
- 名稱:frpc 自啓,描述:自動啓動 frp 客户端
- 觸發器:選擇「當我登錄時」
- 操作:選擇「啓動程序」,瀏覽選擇
C:\frp\frpc_start.bat - 勾選「打開屬性對話框」,在「常規」選項卡勾選「不管用户是否登錄都要運行」和「最高權限運行」
- 點擊完成,重啓 Windows 後會自動啓動 frpc。
測試
1. 測試遠程桌面(場景 1)
- 用任意公網電腦(如家裏的電腦),打開「遠程桌面連接」(Win+R 輸入
mstsc) - 輸入:
公網Linux服務器IP:5000(如123.45.67.89:5000) - 輸入內網 Windows 服務器的賬號密碼,即可登錄。
2. 測試 Web 服務(場景 2)
- 用公網電腦的瀏覽器,輸入:
http://公網Linux服務器IP:8080(如http://123.45.67.89:8080) - 若能正常顯示內網 Web 服務的頁面,則映射成功。
常見問題排查
- 檢查公網服務器的安全組 / 防火牆是否開放了
7000端口(frp 通信端口) - 確認
frpc.ini中的server_addr(公網 IP)、server_port(7000)、token與服務端一致 - 查看客户端日誌
C:\frp\frpc.log,若提示token mismatch則 token 錯誤,connection refused則端口未開放。 - 如果有websocket服務,請確認配置文件中使用的是“ws”還是“wss”,尤其是wss協議下,確保只加密一次,否則會導致bad request。
- 檢查內網 Windows 服務器的防火牆是否放行本地服務端口(如 3389、80)
- 確認內網服務是否正常運行(如遠程桌面是否開啓,Web 服務是否能本地訪問)
- 查看服務端日誌
tail -f /usr/local/frp/frps.log,是否有連接記錄。
- 確認已配置開機自啓(systemd 服務),執行
systemctl restart frps重啓 - 檢查服務器內存 / CPU 是否充足,frp 資源佔用極低,一般不會因資源問題崩潰。