适用场景
没有公网 IP,又不想使用第三方内网穿透服务,希望通过自建服务器在公网访问家中 NAS/软路由/内网服务。
架构与术语
本文使用的项目是 frp-panel(GitHub:https://github.com/VaalaCat/frp-panel)。
Master:控制面板 + API/RPC 管理
Server(frps):公网侧隧道服务
Client(frpc):内网侧连接与转发
我的部署方式是:仅部署 Master,并使用 Master 自带的 default 服务端。这是单台公网服务器的推荐方式。
重要提醒:
default服务端 禁止单独部署,需要在 Master 启动后在 WebUI 中配置。client/server启动命令可能随版本变化,以 Master WebUI 生成的命令为准。部署 Client 前必须先配置好服务端,否则客户端无法连接。
前期准备
1. 设备与软件
一台 有公网 IP 的服务器(ECS/VPS)
一台 内网设备(NAS/软路由/旧电脑)
Docker(推荐)
2. 端口放行(公网服务器)
必须配置 ECS 安全组,否则所有连接都无法访问。
WebUI/API:
TCP 9000RPC:
TCP 9001frps API:自定义(示例
TCP/UDP 7000)frps 业务端口段:自定义(示例
TCP/UDP 26999-27050)
如果使用反向代理(HTTPS):
仅需放行
80/443CLIENT_RPC_URL配置为wss://域名:443CLIENT_API_URL配置为https://域名:443建议先用普通方式部署成功后,再切换反向代理
3. 账号说明
Master 部署后没有默认用户,第一个注册用户即为管理员。
第一步:部署 Master(同时作为 Server)
推荐使用 Docker Compose:
# docker-compose.yaml
services:
frpp-master:
image: vaalacat/frp-panel:latest
network_mode: host
environment:
APP_GLOBAL_SECRET: your_secret
MASTER_RPC_HOST: 你的公网IP或域名
MASTER_RPC_PORT: 9001
MASTER_API_HOST: 你的公网IP或域名
MASTER_API_PORT: 9000
# 下面两个必须填写“客户端能访问到 master 的地址”
CLIENT_RPC_URL: grpc://你的公网IP或域名:9001
CLIENT_API_URL: http://你的公网IP或域名:9000
volumes:
- ./data:/data
restart: unless-stopped
command: master
启动:
docker compose up -d
访问 http://你的公网IP:9000,注册第一个账号(管理员)。
第二步:配置 default 服务端(必须做)
因为我没有单独部署 server,所以必须配置 Master 自带的 default 服务端。
WebUI 操作:
进入
服务端找到
default修改并保存以下配置(示例):
FRPs 监听端口:
7000FRPs 监听地址:
0.0.0.0代理监听地址:
0.0.0.0HTTP 监听端口:
26999

没有正确配置
default服务端,客户端无法连接。
第三步:部署 Client(内网设备)
Client 仅推荐使用 Docker 部署,不建议直接运行。
部署前请确认已完成 default 服务端配置,否则客户端无法连接。
在 WebUI 的 服务端 页面点击 新建,输入 客户端唯一识别 ID 保存。
刷新后,新的客户端会出现在列表中。点击 ID (点击查看安装命令) 或 密钥 (点击查看启动命令),复制系统生成命令执行。
Docker Compose(客户端)
# docker-compose.yaml
version: '3'
services:
frp-panel-client:
image: vaalacat/frp-panel
container_name: frp-panel-client
network_mode: host
restart: unless-stopped
command: client -s 你的服务端密钥 -i user.c.client1 --api-url http://你的公网IP或域名:9000 --rpc-url grpc://你的公网IP或域名:9001
国内环境可在 WebUI 配置 GitHub 加速,复制的安装命令会自动带上 --github-proxy。

第四步:配置隧道(TCP)
用最常见的 TCP 隧道即可。简单理解就是:访问 ECS 的某个端口,就会转发到局域网某台设备的 IP+端口。
在 WebUI 进入 代理,点击 新建,按下面思路填写:
类型:
tcp远程端口:公网服务器对外提供访问的端口(例如
25000)本地 IP:局域网目标设备 IP(例如
192.168.1.10)本地端口:局域网目标服务端口(例如
5000)
保存后,访问 ECS_IP:25000 就相当于访问 192.168.1.10:5000。
记得在 ECS 安全组放行 远程端口。(如果使用nginx反代则不需要放行端口)

高级功能参考(建议查看官方文档)
更多高级功能与详细说明,请参考 frp-panel 官方文档,重点包括:
一键启动与批量节点管理
实时流量统计与日志分析
HTTPS/WSS 与反向代理 TLS
高级隧道配置(支持原生 frp JSON 配置)
配置说明与环境变量清单