關鍵詞:內網穿透、FRP配置、frps、frpc、遠程訪問、自建服務器、反向代理、TCP轉發、HTTP轉發
在開發或部署項目時,我們經常遇到內網設備無法被公網訪問的問題,例如你想從外網訪問你家里的 NAS、遠程調試開發板,或是訪問本地測試環境。這時候,一個輕量、易用、高效的開源工具 —— FRP (Fast Reverse Proxy) 就派上用場了。
本文將手把手教你如何使用 FRP 實現內網穿透,支持 **TCP / HTTP ** 協議的穿透。
一、FRP 是什么?
FRP(Fast Reverse Proxy) 是一個高性能的反向代理應用,專為內網穿透而設計。你可以通過它將內網服務映射到公網服務器,實現從外網訪問內網服務的需求。
FRP 包含兩個核心組件:
- frps:部署在公網服務器上,作為服務端。
- frpc:部署在內網主機上,作為客戶端。
二、FRP 應用場景
- 從公網訪問位于 NAT/防火墻后的內網服務
- 家庭網絡中遠程訪問內網電腦或 NAS
- IoT 設備遠程調試
- 本地開發環境暴露給互聯網使用
- 內網網站、API接口暴露給第三方服務
三、準備工作
1. 準備一臺 公網服務器
- 操作系統:Linux(例如 Ubuntu 20.04)
- 能開放指定端口(例如 7000、80、443)
- 安裝 SSH,方便遠程管理
2. 一臺內網主機
- 比如你家里的電腦、樹莓派、或公司內網中的服務器
3. 下載 FRP 工具
訪問:https://github.com/fatedier/frp/releases
選擇對應系統版本進行下載,例如:
# 以 Linux 64 位為例
wget https://github.com/fatedier/frp/releases/download/v0.63.0/frp_0.63.0_linux_amd64.tar.gz
tar -zxvf frp_0.63.0_linux_amd64.tar.gz
四、服務端配置(公網服務器)
進入 frp_0.63.0_linux_amd64
目錄:
編輯 frps.toml
:
bindPort = 15700
vhostHTTPPort = 14144
啟動 frps:
# 后臺啟動frp服務端應用
nohpu ./frps -c frps.toml &#利用tail 命令查看啟動日志
tail -f nohup.out
出現如下內容則表示啟動成功:
[1;34m2025-07-23 18:50:38.146 [I] [frps/root.go:105] frps uses config file: frps.toml
[0m[1;34m2025-07-23 18:50:38.307 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:15701
[0m[1;34m2025-07-23 18:50:38.308 [I] [server/service.go:305] http service listen on 0.0.0.0:14144
[0m[1;34m2025-07-23 18:50:38.308 [I] [frps/root.go:114] frps started successfully
? 建議將其配置為 Systemd 服務,實現開機自啟。
五、客戶端配置(內網主機)
在內網主機中進入對應解壓后的 frp
目錄。
編輯 `frpc.toml:
1. 穿透 HTTP 服務(比如本地 8080)
serverAddr = "公網IP"
serverPort = 15700[[proxies]]
name = "web01"
type = "http"
localIP = "127.0.0.1"
localPort = 8080
customDomains = ["指定到公網的域名"]
啟動成功后,可以通過
http://公網IP:14144
內網http服務!
2. 穿透 SSH 服務(遠程 SSH 到內網設備)
serverAddr = "公網地址"
serverPort = 15700[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort =16000
啟動 frpc:
./frpc -c frpc.toml
啟動成功后,
ssh 公網IP -p 16000
來訪問內網ssh服務!
六、設置自啟動(Systemd 配置)
1. 服務器
創建 /etc/systemd/system/frps.service
[Unit]
Description=FRP Server
After=network.target[Service]
ExecStart=/opt/frp/frps -c /opt/frp/frps.toml
Restart=on-failure[Install]
WantedBy=multi-user.target
2.客戶端
創建 /etc/systemd/system/frpc.service
[Unit]
Description=FRP Client
After=network.target[Service]
ExecStart=/opt/frp/frpc -c /opt/frp/frpc.toml
Restart=on-failure[Install]
WantedBy=multi-user.target
執行:
sudo systemctl daemon-reexec
sudo systemctl enable frps
sudo systemctl start frps
客戶端同理。
七、常見問題排查
問題 | 可能原因 | 解決辦法 |
---|---|---|
frpc 連接不上 frps | 防火墻或端口未開放 | 檢查安全組、防火墻設置 |
HTTP 映射失敗 | 域名未解析或未配置 vhost_http_port | 檢查 DNS 和配置 |
SSH 登錄失敗 | remote_port 已被占用 | 修改 remote_port |
frps/frpc 啟動失敗 | 配置文件格式錯誤 | 仔細檢查 toml 文件格式 |