frp是一款高性能开源内网穿透工具,GitHub 105k+ Stars,支持TCP/UDP/HTTP/HTTPS全协议。可将NAT或防火墙后的本地服务暴露到公网,提供P2P直连、负载均衡、TLS加密等高级功能,是开发者和运维人员的远程访问必备神器,文末附详细使用教程
🎤 引言
有没有遇到过这种抓狂的情况:
- 家里的 NAS 存了几百 G 的资料,出门在外想访问却苦于没有公网 IP
- 本地开发了个 Web 项目,想让产品经理看一眼效果,只能截图发过去,交互根本展示不了
- 公司内网有个测试环境,合作方想联调,只能跑到公司现场
这些场景的核心痛点都是:内网服务怎么暴露到公网?
传统方案要么申请公网 IP(运营商基本不给了),要么买云服务器做跳板(流量费贵),要么用 ngrok 这类商业服务(免费版限制多)。
frp 的出现,把这个过程简化到了极致——一个二进制文件 + 几行配置,搞定所有问题。
⭐ 核心功能
frp(Fast Reverse Proxy)是一个用 Go 语言编写的高性能反向代理应用,GitHub 上已经斩获 105k+ Stars,是内网穿透领域当之无愧的王者。
协议支持全面
- TCP/UDP 端口转发(SSH、数据库、游戏服务器都能透)
- HTTP/HTTPS 域名映射(Web 服务一键外网访问)
- 支持 WebSocket、gRPC 等现代协议
- 甚至能转发 DNS 查询和 Unix Domain Socket
高级特性丰富
- P2P 直连模式:xtcp 协议让两端直接通信,不走服务器中转,延迟更低、不耗服务器流量
- 负载均衡:同一服务可部署多个实例,自动分配流量,支持健康检查
- 加密与压缩:支持 TLS 加密传输,可开启流量压缩节省带宽(实测压缩率 30-60%)
- 身份认证:Token 认证、OIDC 集成,防止未授权访问
- 带宽限速:可按代理粒度限制上传/下载速度,避免单用户占满带宽
管理功能完善
- 服务端 Dashboard:Web 界面实时查看所有连接状态、流量统计
- 客户端 Admin UI:本地管理代理配置,支持热重载
- Prometheus 监控:Metrics 数据直接对接 Grafana 可视化
📥 安装与使用
frp 采用经典的 C/S 架构,需要在公网服务器部署 frps(服务端),在内网机器部署 frpc(客户端)。
快速开始
从 GitHub Release 下载对应平台的二进制文件(单文件,无需依赖):
# Linux/macOS 一键下载
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
tar -xzf frp_0.61.0_linux_amd64.tar.gz
cd frp_0.61.0_linux_amd64服务端配置(frps.toml)
bindPort = 7000
token = "your_secure_token_here"
# 启用 Dashboard(可选)
dashboardPort = 7500
dashboardUser = "admin"
dashboardPwd = "your_strong_password"启动服务端:
./frps -c frps.toml客户端配置(frpc.toml)
serverAddr = "your-server-ip"
serverPort = 7000
token = "your_secure_token_here"
# SSH 穿透示例
[[proxies]]
name = "ssh"
type = "tcp"
localPort = 22
remotePort = 6000
# Web 服务穿透示例
[[proxies]]
name = "web"
type = "http"
localPort = 8080
customDomains = ["dev.your-domain.com"]启动客户端:
./frpc -c frpc.tomlDocker Compose 部署(推荐)
version: '3'
services:
frps:
image: snowdreamtech/frps:latest
container_name: frps
restart: always
network_mode: host
volumes:
- ./frps.toml:/etc/frp/frps.toml🚀 典型使用场景
场景一:远程 SSH 访问内网服务器
比如你把树莓派放在家里当服务器,没有公网 IP。通过 frp 把 22 端口映射到云服务器的 6000 端口:
[[proxies]]
name = "pi-ssh"
type = "tcp"
localPort = 22
remotePort = 6000然后任何地方都能连:
ssh -p 6000 pi@your-server-ip场景二:本地开发环境外网访问
前端开发时,Vue/React 项目跑在 localhost:3000,想让产品经理直接访问:
[[proxies]]
name = "dev-web"
type = "http"
localPort = 3000
customDomains = ["dev.your-domain.com"]配合 nginx 反向代理 + SSL,就是一个专业的预览环境。
场景三:NAS 服务暴露
群晖、Unraid 等 NAS 的 Web 界面、文件服务暴露到公网:
[[proxies]]
name = "nas"
type = "http"
localPort = 5000
customDomains = ["nas.your-domain.com"]场景四:P2P 大文件传输(省流量神器)
两台机器都要传大文件,走服务器中转太慢还费流量。用 xtcp 模式让两端直连:
# 服务端(有公网 IP 的那台)
[[proxies]]
name = "p2p-ssh"
type = "xtcp"
localPort = 22
secretKey = "your-secret-key"连接时直接 P2P,延迟从 100ms 降到 20ms,服务器只负责握手,不中转数据。
⚠️ 注意事项
安全风险
- 务必设置 token 认证,裸奔的 frp 服务端会被扫描利用
- 生产环境建议启用 TLS 加密传输
- Dashboard 不要暴露到公网,或设置强密码 + IP 白名单
性能考量
- P2P 模式需要两端 NAT 类型为 Full Cone 或 Restricted Cone,Symmetric NAT 会失败
- 高并发场景建议开启连接池(poolCount)和 TCP 多路复用(tcpMux)
- 带宽敏感业务可开启压缩(useCompression = true)
已知限制
- 部分运营商会封锁 80/443 等常用端口,建议用高位端口
- UDP 穿透成功率受 NAT 类型影响,不如 TCP 稳定
- 免费域名(如 nip.io)可能被部分企业防火墙拦截
✅ 总结
frp 把复杂的内网穿透流程封装成了几个配置文件,既保留了灵活性,又大大降低了使用门槛。105k+ Stars 的社区活跃度意味着丰富的文档、及时的 bug 修复和持续的功能迭代。
| 方案 | 成本 | 复杂度 | 适用场景 |
|---|---|---|---|
| frp 自建 | 低(只需一台 VPS) | 中 | 长期使用、多服务管理 |
| ngrok 免费版 | 免费 | 低 | 临时调试、快速演示 |
| ngrok 付费版 | 高($8/月起) | 低 | 企业级 SLA 需求 |
| 云服务器跳板 | 中 | 高 | 单服务、有运维能力 |
适合人群:
- 没有公网 IP 但需要远程访问内网服务的开发者
- 需要临时暴露本地服务进行协作演示的团队
- 想自建内网穿透服务替代商业方案的技术爱好者
总的来说,如果你需要一个稳定、免费、功能全面的内网穿透方案,frp 几乎是首选。