frp 内网穿透与 VPS 说明

1. 一句话理解

frp 是一个常用的内网穿透工具。它可以让没有公网 IP 的内网设备,通过一台有公网 IP 的 VPS,把内网服务暴露给外网访问。

典型链路如下:

外部访问者
  ↓
公网 VPS(运行 frps)
  ↓
frp 隧道
  ↓
内网机器(运行 frpc)
  ↓
本地服务,例如 Web、SSH、NAS、API

2. VPS 是什么

VPSVirtual 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:客户端,部署在内网机器上

基本流程:

  1. 购买或准备一台 VPS
  2. 在 VPS 上开放 frp 服务端口,例如 7000
  3. 在 VPS 上运行 frps
  4. 在内网机器上运行 frpc
  5. frpc 主动连接 frps
  6. 外部用户访问 VPS 的域名或端口
  7. 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、登录认证、访问白名单
  • 长期服务要记录日志并定期检查异常访问

高风险做法:

  • 330663795432 直接映射公网
  • 后台系统没有登录认证就通过 frp 暴露
  • token 使用 123456admin、项目名等弱口令
  • 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
  • 正式生产服务:优先部署到公网云服务器
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐