三款内网穿透工具对比:FRP vs Cloudflare Tunnel vs Localtunnel
结论先行:个人项目、SaaS 演示或静态博客,首选 Cloudflare Tunnel——完全免费、不限流量、自带 DDoS 防护与自动 HTTPS,无需购买公网 VPS,50 用户内零成本。手头已有公网 VPS、需要长期穿透 SSH、RDP 或数据库等非 HTTP 流量,选用 FRP(支持 TCP/UDP 多协议灵活转发)。若只需花 10 秒钟快速生成临时公网链接给客户演示前端 Demo,直接使用 Localtunnel,单行命令起隧道,测完即销毁。
0、写在前面
作为独立开发者或全栈工程师,你在日常开发中必定经历过以下场景:
- 本地刚刚写完一个 Web 应用,需要立即发给异地客户或团队成员验收
- 家里的 NAS、开发台式机或私有数据库,需要在外出时随时通过外网调取
- 第三方 Webhook(如 Stripe 支付回调、GitHub Actions 通知)需要打到本地环境进行断点调试
这时候你需要一套稳定、安全的内网穿透方案。
市面上的穿透工具多达数十款:有按流量计费的商业 SaaS、有需要自行搭建服务器的中转程序、也有测完即走的临时命令行。
本文聚焦三款最主流的免费工具:FRP、Cloudflare Tunnel 与 Localtunnel。文章不仅给出三者的横向对比维度,更为每款工具提供完整的生产级配置命令,助你在不同场景下精准选型。
1、期望目标与落地清单
阅读并实践本指南后,你将完成以下目标:
- [ ] 掌握选型矩阵:精准识别自建型、托管型与临时穿透型工具的核心差异与边界
- [ ] FRP 生产部署:掌握
frps.toml与frpc.toml新版语法,完成 systemd 守护进程托管 - [ ] Cloudflare Tunnel 配置:打通
cloudflared隧道,免公网 IP 实现自动化 HTTPS 与全球加速 - [ ] Localtunnel 秒级调试:单行命令暴露本地端口,用于 Webhook 调试与客户预览
- [ ] 排错与加固:规避暴露面过大造成的端口扫描爆破与跨域访问异常
2、计划思考与架构全景
为什么选择这三款代表性工具?
| 工具 | 核心定位 | 技术代表性 | 基础设施依赖 |
|---|---|---|---|
| FRP | 高性能开源反向代理 | 自建型 | 必须拥有一台具备公网 IP 的云服务器 |
| Cloudflare Tunnel | 零信任边缘安全隧道 | 商业托管型 | 仅需 Cloudflare 免费账号与解析域名,无需服务器 |
| Localtunnel | 极简临时 HTTP 隧道 | 调试型 | 仅依赖 Node.js 环境,无需注册与配置 |
架构工作原理对比
多维度决策矩阵
| 对比维度 | FRP | Cloudflare Tunnel | Localtunnel |
|---|---|---|---|
| 公网服务器依赖 | ✅ 必须具备公网 IP 的 VPS | ❌ 零依赖(仅需域名) | ❌ 零依赖 |
| 部署上手难度 | 适中(需双端配置 + 端口管理) | 简单(一行命令或 Web 托管) | 极简(单行 npx) |
| 服务稳定性 | 极高(由自有服务器资源决定) | 极高(Cloudflare 全球边缘网络) | 一般(公共节点偶发抖动) |
| 支持协议 | TCP / UDP / HTTP / HTTPS / STCP | HTTP / HTTPS / SSH / TCP(需配客户端) | 仅限 HTTP / HTTPS |
| 成本支出 | 服务器费用(约 $4~10/月) | 个人与小团队永久免费(50 席位) | 完全免费 |
| HTTPS 证书 | 需配置 Nginx/Caddy 或证书申请 | 边缘自动签发通用 SSL 证书 | 自动提供 *.loca.lt 证书 |
| 网络安全性 | 需自行维护防火墙与 Token | 零端口入站暴露 + 免费 DDoS 防护 | 公开随机链接,缺乏身份校验 |
3、实战操作与配置速查
3.1 FRP:完全自控的跨协议穿透
FRP 由 Go 编写,支持客户端(frpc)与服务端(frps)协同运行。适用于拥有海外或国内 VPS 的开发者。
1. 服务端配置(VPS 云主机)
下载最新版本二进制(以 Linux amd64 为例):
1 | # 下载并解压(以稳定版 v0.70.0 为例) |
创建服务端配置文件 frps.toml(FRP 新版采用 TOML 格式取代旧 INI):
1 | # 服务端主绑定端口(客户端连接此端口建立控制隧道) |
配置 systemd 系统服务以保证重启自启:
1 | # /etc/systemd/system/frps.service |
启动并验证服务:
1 | sudo systemctl daemon-reload |
2. 客户端配置(本地开发机 / NAS)
在本地电脑编写 frpc.toml:
1 | serverAddr = "198.51.100.24" # 你的 VPS 公网 IP |
本地执行启动:
1 | ./frpc -c frpc.toml |
验证连接:外网终端执行 ssh -p 6022 [email protected] 即可穿透直达本地。
3.2 Cloudflare Tunnel:零端口暴露的现代边缘方案
Cloudflare Tunnel 采用主动向外建立 QUIC/HTTPS 连接机制。服务器防火墙无需放行任何入站端口(80/443 全部关闭),彻底断绝公网恶意扫描。
快速部署技巧(开源一键脚本)
💡 运维提效:如果你想在 Linux 服务器或开发机上 30 秒快速跑通 Cloudflare Tunnel 守护进程,可直接使用 ITTinker 开源的
cloudflare-tunnel-setup工具脚本:
1 sudo bash setup.sh --token "你的Cloudflare_Tunnel_Token"脚本会自动拉取对应架构的最新版
cloudflared,将其配置为 systemd 守护进程并完成开机自启。
手动标准流程
- 安装官方二进制:
1 | # Debian / Ubuntu |
- 终端鉴权并生成证书:
1 | cloudflared tunnel login |
终端输出浏览器授权链接,打开并选择绑定的主域名完成授权。
- 创建命名隧道:
1 | cloudflared tunnel create dev-tunnel |
- 配置反向代理规则(
~/.cloudflared/config.yml):
1 | tunnel: 4e0bxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
- 配置 DNS 路由并启动守护服务:
1 | # 绑定路由 |
此时外部访问 https://app.yourdomain.com,Cloudflare 边缘节点将自动处理 SSL 握手并通过隧道将加密流量回源到你的本机。
3.3 Localtunnel:10 秒即开即用的调试神器
当你正在调试外部 Webhook(例如微信支付或 Stripe)或者临时需要给同事看眼本地页面时,配置域名和证书显然成本过高。Localtunnel 提供了最小摩擦的使用体验。
安装与启动
无需安装任何繁复的守护程序,仅需 Node 环境:
1 | # 直接使用 npx 临时拉取运行,将本地 3000 端口暴露至外网 |
终端即时输出公网可用 URL:
1 | your url is: https://bright-falcon-12.loca.lt |
指定专属子域名(抢占式)
1 | npx localtunnel --port 3000 --subdomain my-awesome-project |
若 my-awesome-project 未被他人占用,你将获得固定地址 https://my-awesome-project.loca.lt。
[!WARNING]
Localtunnel 风险提示:Localtunnel 生成的链接公开可访,首次打开会有友好防爬提醒页;因节点位于公共中继服务器,严禁在此通道下传输明文生产数据库凭据或未授权的内部高敏接口。
4、综合场景选型决策指南
场景精选建议
- 出海 SaaS 产品公测 / 个人技术博客:
选用 Cloudflare Tunnel。完全不需要操心云服务器的月租与续费问题,直接接入全球 Anycast CDN,同时免费享有 DDoS 缓解与 Web 应用程序防火墙。 - 跨地域内部服务器运维与自动化构建机调度:
选用 FRP。借助 TCP/STCP 模式建立加密端口直达,不限协议类型,内网集群管理效率最高。 - 第三方支付接口或 Webhook 本地回调联调:
选用 Localtunnel。免配置免注册,几秒内获取可连通的公开 HTTPS 终端地址,联调完毕即刻关闭。
5、常见异常排查手册
Q1:FRP 客户端日志提示 authorization timeout 或连不上?
排查方法:
- 确认服务端防火墙与云厂商安全组放行了
7000端口(TCP)。 - 检查双端时间是否偏差超过 15 分钟(FRP 认证依赖时间戳防重放攻击)。
- 核对两端
auth.token字符是否严格对应。
Q2:Cloudflare Tunnel 报 Unable to reach the origin service?
排查方法:
- 确认本地服务已正常启动并在指定的端口(如 127.0.0.1:3000)监听。
- 若本地配置为 HTTPS 服务,需在
config.yml的originRequest中增加noTLSVerify: true,忽略自签证书阻断。
Q3:Localtunnel 打开出现友好拦截页面(Friendly Reminder)?
排查方法:
- 此为 Localtunnel 防止钓鱼滥用的安全机制。直接在页面输入本地公网 IP(页面有提示查看链接)提交一次,浏览器即可正常进入本地 Web 响应。若调用接口报 403,在客户端请求头中增加
Bypass-Tunnel-Reminder: true即可绕过该页面。
6、FAQ(独立开发者核心问答)
Q1:Cloudflare Tunnel 免费版有流量或并发上限吗?
Cloudflare Tunnel 免费计划对个人项目和普通业务完全不设流量与带宽限制。计费仅在开启高级零信任(Zero Trust)坐席且活跃用户数超过 50 人时触发。
Q2:FRP 暴露本地端口到公网会被扫爆破吗?
会。如果配置了 TCP 模式直接将 22 或 3306 映射到 VPS 公网端口,全网扫描器会在数分钟内捕捉到该端口并执行暴力猜解。建议使用 FRP 的 stcp(Secret TCP)模式,或者仅将端口绑定至 VPS 内网网卡,杜绝公网直暴。
Q3:不买自有域名可以使用 Cloudflare Tunnel 吗?
可以。直接执行 cloudflared tunnel --url http://localhost:8080,Cloudflare 会即时下发一个临时随机构建的 *.trycloudflare.com 地址,无需登录即可穿透。
相关资源与开源仓库
- FRP 官方仓库:https://github.com/fatedier/frp
- Cloudflare 官方文档:https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/
- Localtunnel 官方代码库:https://github.com/localtunnel/localtunnel
- ITTinker 自动化工具箱:
cloudflare-tunnel-setup- Cloudflare Tunnel 一键自动部署与托管脚本vps-init- VPS 生产级安全初始化脚本