frp 内网穿透与 VPS 说明
·
frp 内网穿透与 VPS 说明
1. 一句话理解
frp 是一个常用的内网穿透工具。它可以让没有公网 IP 的内网设备,通过一台有公网 IP 的 VPS,把内网服务暴露给外网访问。
典型链路如下:
外部访问者
↓
公网 VPS(运行 frps)
↓
frp 隧道
↓
内网机器(运行 frpc)
↓
本地服务,例如 Web、SSH、NAS、API
2. VPS 是什么
VPS 是 Virtual Private Server,即虚拟专用服务器。可以理解为云厂商机房里的一台远程小服务器,通常具备:
- 公网 IP
- Linux 或 Windows 系统
- 远程登录权限
- 24 小时在线能力
- 固定 CPU、内存、硬盘和带宽
在 frp 方案里,VPS 的作用是公网中转站。内网机器主动连接 VPS,外部用户再通过 VPS 访问内网服务。
3. frp 适合什么场景
适合:
- 外网访问家里 NAS、开发机、树莓派、Home Assistant
- 临时暴露本地开发环境给别人测试
- 公司或实验室内网服务需要外部访问
- 通过公网访问内网 Web、API、SSH、TCP、UDP 服务
- 希望自建、可控,不想完全依赖第三方穿透平台
不太适合:
- 直接暴露数据库、Redis、无鉴权后台
- 对低延迟要求很高的游戏联机
- 大规模生产公网服务
- 不愿维护 VPS、防火墙和安全配置的场景
4. 速度怎么样
frp 本身性能通常不是瓶颈,实际速度主要取决于:
- 内网宽带的上行带宽
- VPS 带宽
- VPS 所在地区和线路质量
- 外部访问者到 VPS 的网络质量
- VPS 到内网机器的延迟和抖动
- 是否跨运营商、跨地区、跨境
常见体验:
| 场景 | 速度体验 | 说明 |
|---|---|---|
| SSH 远程管理 | 好 | 日常管理通常很流畅 |
| Web 后台/API | 好 | 适合开发测试和轻量业务 |
| 本地开发预览 | 好 | 适合给别人临时看页面 |
| NAS 文件访问 | 中到好 | 主要受家宽上行和 VPS 带宽限制 |
| 远程桌面 | 中等 | 对延迟和抖动更敏感 |
| 视频串流 | 中等 | 可用但不如专门流媒体方案 |
| 游戏联机 | 不推荐 | 延迟链路更长,稳定性不确定 |
例子:如果家里宽带上行只有 30Mbps,那么外部访问家里 NAS 下载文件时,速度很难超过这个上限。
5. 稳定性怎么样
frp 工具本身比较成熟,长期运行稳定性通常不错。真正影响稳定性的因素一般是:
- 家宽或公司网络波动
- 运营商 NAT、路由、防火墙策略变化
- VPS 带宽不足或负载过高
- frps/frpc 没有配置自动重启
- 内网机器休眠、断电、断网
- 配置不合理,例如超时、端口冲突、防火墙未放行
提高稳定性的做法:
- frps 和 frpc 都配置为系统服务或 Docker 自动重启
- VPS 选择离访问者和内网机器更近的地区
- VPS 带宽不要太小,至少满足目标访问量
- 只暴露必要端口
- 为关键服务增加健康检查和日志监控
- 避免把高带宽、大流量业务长期跑在低配 VPS 上
6. frp 与其他方案对比
| 方案 | 更适合 | 特点 |
|---|---|---|
| frp | 自建内网穿透 | 灵活、便宜、可控,需要 VPS |
| ngrok | 临时演示 | 上手快,免费版限制较多 |
| Cloudflare Tunnel | HTTP/HTTPS 服务 | 不一定需要 VPS,适合 Web 服务 |
| Tailscale | 私有远程访问 | 更像私有 VPN,安全省心 |
| WireGuard | 自建 VPN | 性能好,但配置门槛略高 |
| ZeroTier | 虚拟局域网 | 组网方便,依赖平台服务 |
选型建议:
- 想长期自建穿透:优先考虑 frp
- 只是自己远程访问内网设备:优先考虑 Tailscale 或 WireGuard
- 只是临时给别人看本地网页:优先考虑 ngrok 或 Cloudflare Tunnel
- 正式公网生产服务:优先部署到公网服务器或云平台,不建议长期依赖内网穿透
7. 基础部署思路
frp 分为两端:
frps:服务端,部署在公网 VPS 上frpc:客户端,部署在内网机器上
基本流程:
- 购买或准备一台 VPS
- 在 VPS 上开放 frp 服务端口,例如
7000 - 在 VPS 上运行
frps - 在内网机器上运行
frpc - frpc 主动连接 frps
- 外部用户访问 VPS 的域名或端口
- frps 将请求转发到内网机器的本地服务
8. 示例配置
下面仅是示例,不能直接照抄到生产环境。auth.token 必须替换为强随机字符串。
服务端 frps.toml:
bindPort = 7000
auth.method = "token"
auth.token = "REPLACE_WITH_STRONG_RANDOM_TOKEN"
客户端 frpc.toml:
serverAddr = "YOUR_VPS_PUBLIC_IP"
serverPort = 7000
auth.method = "token"
auth.token = "REPLACE_WITH_STRONG_RANDOM_TOKEN"
[[proxies]]
name = "web-demo"
type = "http"
localIP = "127.0.0.1"
localPort = 8080
customDomains = ["demo.example.com"]
TCP 转发示例,例如转发内网 SSH:
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 60022
外部访问:
ssh -p 60022 user@YOUR_VPS_PUBLIC_IP
注意:SSH 暴露到公网风险较高,必须使用密钥登录、禁用密码登录,并尽量限制来源 IP。
9. 安全底线
必须做到:
- 使用强随机
auth.token - 不要把真实 token、密码、密钥写进公开文档或代码仓库
- 不要暴露数据库、Redis、MQ、无鉴权后台
- SSH 使用密钥登录,禁用密码登录
- VPS 防火墙只开放必要端口
- 管理面板不要裸露到公网
- Web 服务建议加 HTTPS、登录认证、访问白名单
- 长期服务要记录日志并定期检查异常访问
高风险做法:
- 把
3306、6379、5432直接映射公网 - 后台系统没有登录认证就通过 frp 暴露
- token 使用
123456、admin、项目名等弱口令 - VPS 所有端口全开放
- 多人共用同一个 token 且长期不更换
10. 推荐配置策略
个人轻量使用:
- VPS:1 核、1GB 内存、20GB 硬盘
- 带宽:至少 3-5Mbps,文件传输需求更高则提高带宽
- 系统:Ubuntu 或 Debian
- 服务守护:systemd 或 Docker restart policy
- 访问方式:Web 用域名和 HTTPS,SSH 尽量加白名单
开发测试使用:
- 每个服务单独配置代理名称
- 测试结束及时关闭不需要的代理
- 不要把测试后台长期暴露公网
- 日志中避免输出敏感参数
生产或准生产使用:
- 优先考虑公网云服务器直接部署
- 如果必须使用 frp,必须增加 HTTPS、认证、限流、白名单和监控
- 对外服务前面建议加 Nginx、Caddy 或网关层
- 定期检查 frp 版本和安全公告
11. 总结
frp 是一个成熟、灵活、成本低的内网穿透工具,适合自建长期穿透。它的速度和稳定性通常够用,瓶颈主要在内网上行带宽、VPS 带宽和线路质量。
但 frp 不是“开箱即安全”的工具。只要把内网服务暴露到公网,就必须认真处理认证、防火墙、HTTPS、日志和访问控制。
简单选择:
- 想自建、长期、灵活:选 frp
- 只想自己访问内网:选 Tailscale 或 WireGuard
- 只想临时演示:选 ngrok 或 Cloudflare Tunnel
- 正式生产服务:优先部署到公网云服务器
更多推荐


所有评论(0)