背景

我有一台雲服務器,配置比較低,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
內網電腦配置
  1. 下載並解壓 frp 從frp 官方下載地址下載 Windows 版本(如frp_0.58.1_windows_amd64.zip) 解壓到任意目錄(如 C:\frp),解壓後目錄包含 frpc.exe(客户端)、frpc.ini(客户端配置文件)
  2. 配置 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
3. 啓動 frp 客户端

開機自啓

@echo off
start "" "C:\frp\frpc.exe" -c "C:\frp\frpc.ini"
  1. 保存文件為 frpc_start.bat(編碼選 ANSI,避免中文亂碼),放在 C:\frp 目錄。
  2. 按 Win+R 輸入 taskschd.msc 打開「任務計劃程序」,點擊「創建基本任務」:
  • 名稱: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 服務的頁面,則映射成功。
常見問題排查
  1. 客户端連不上服務端?
  • 檢查公網服務器的安全組 / 防火牆是否開放了 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。
  1. 映射後公網訪問超時?
  • 檢查內網 Windows 服務器的防火牆是否放行本地服務端口(如 3389、80)
  • 確認內網服務是否正常運行(如遠程桌面是否開啓,Web 服務是否能本地訪問)
  • 查看服務端日誌 tail -f /usr/local/frp/frps.log,是否有連接記錄。
  1. 服務端進程意外終止?
  • 確認已配置開機自啓(systemd 服務),執行 systemctl restart frps 重啓
  • 檢查服務器內存 / CPU 是否充足,frp 資源佔用極低,一般不會因資源問題崩潰。

通過以上步驟,即可實現內網 Windows 服務器的公網訪問。如果需要映射 HTTP/HTTPS 服務(如多個 Web 站點),可以使用 frp 的 http 類型代理(支持虛擬主機)!