Cloudflare Tunnel 内网穿透:免费不限速
前阵子我要把做好的项目给客户预览,顺手打开了花生壳,好家伙,默认 1Mbps 带宽,首屏转半天。更难受的是想加固定域名、开 HTTPS、多挂几个端口,样样都得额外付费升级。后来我换成了 Cloudflare Tunnel 内网穿透,免费、不限速、自带 HTTPS,一行命令就拿到公网地址。这篇文章把"为什么需要内网穿透""常用工具有哪些坑",以及 macOS 和 Windows 两个系统的安装使用,一次性讲清楚。点个收藏咱们开始。
一、先说清楚:我们为什么需要内网穿透
内网穿透要解决的核心矛盾就一句话:你电脑上的服务很好,但外网访问不到它。
内网穿透:把家里、公司内网里的服务,通过一个公网中转节点暴露到互联网上,让外网能主动访问的技术。你可以理解为给你的内网服务开一扇通往公网的"任意门"。
为什么这是个刚需?我数几个真实场景,你大概率中过一条:
- 没有公网 IP。家宽和企业宽带现在普遍在 NAT 后面,运营商既不给固定公网 IP,很多连动态公网 IP 都不给(直接 CGNAT 大内网)。你想从外面连家里的机器,门都没有。
- 本地开发要给人预览。前端跑在
localhost:5173、后端跑在localhost:8000,想发个链接给同事、客户或手机看看,localhost只有你自己能开。 - 回调需要 HTTPS 公网域名。微信支付、公众号、企业微信、GitHub Webhook 这类回调,硬性要求一个公网可达的 HTTPS 地址,你本地
http://localhost根本接不住。 - 自建服务想外网访问。NAS、家庭实验室、本地跑的 AI 服务、私有 LLM,想在外面也能临时用,又不想为这点访问专门买公网服务器、动路由器端口。
可能有人会问:不能直接在路由器上做端口转发吗?
能,但前提是你有公网 IP。没公网 IP 直接 GG;就算有,把家里端口暴露到公网,安全风险也不小,还要处理运营商封端口、动态 IP 变动、HTTPS 证书一堆事。内网穿透的本质就是把这些麻烦外包给一个公网中转节点。
说白了,内网穿透工具就是帮你"在没有公网 IP 的前提下,把本地服务安全地搬到公网"。下面看看市面上的工具,坑还不少。
二、常用内网穿透工具盘点:每个都有它的脾气
这一节不长,但能帮你少踩几个坑。常用工具我按"坑的类型"归一下类,你看看自己卡在哪条。
花生壳(贝锐旗下):国内老牌动态域名 + 内网穿透服务,有 GUI 客户端,对不熟悉命令行的人比较友好,免费档带宽和映射条数受限、增值功能付费。
花生壳免费档最明显的限制是带宽。其免费版转发带宽为 1Mbps(理论下载约 125KB/s),通常还伴随映射条数、并发连接数限制并需实名认证。一个没压缩的本地前端首屏动辄 5~10MB,按 1Mbps 算要转几十秒。至于固定域名、HTTPS、更高带宽、更多映射,则要付费升级。我个人用下来,临时给一两个人看个纯前端页面还行,长期或传大资源就有些吃力。

ngrok:海外老牌工具,命令行一行起隧道,有请求面板,生态成熟。免费档需注册账号 + authtoken,只有随机域名(每次重启变),固定域名要订阅付费;2026 年起免费档进一步收紧,有会话时长和每月流量限制。临时调试够用,长期或商用基本要付费。
frp:开源、自托管、不限速、不限域名,完全在你的掌控下。代价是你得自己有一台带公网 IP 的云服务器跑服务端 frps,Mac / Windows 跑客户端 frpc,配置文件略繁。你已经有 VPS 的话,frp 是长期方案的天花板。
natapp:国内常见的一款,注册后买个免费隧道、把本地端口配上去,跑 natapp -authtoken=你的token 就能拿到一个 xxx.natappfree.cc 的公网地址,接微信公众号回调这类场景很顺手。我之前写微信公众号验证码登录那篇时就是用它做的内网穿透,完整配置流程见《SpringBoot 实战:微信公众号验证码登录功能(全流程详解+源码)》。免费隧道同样有带宽和连接数限制,长期或大流量建议升级。
cpolar / localtunnel 等:和上面几个一类,免费档基本都限速或限量;localtunnel 走公共服务器,高峰期常不稳定。应急够用,指望它稳不太现实。
把几个常见方案放一起对比,一目了然:
| 工具 | 适用场景 | 限速 | 费用 | HTTPS | 需服务器 |
|---|---|---|---|---|---|
| 花生壳 | 小白、GUI 党 | 免费档 1Mbps | 增值功能付费 | 付费 | 否 |
| ngrok | 临时调试、海外 | 免费档有连接限制 | 固定域名付费 | 自带 | 否 |
| frp | 长期自建、有 VPS | 仅看你服务器带宽 | 完全免费 | 自己配 | 需 VPS |
| Cloudflare Tunnel | 个人开发、演示、回调 | 不限速 | 免费 | 自带 | 否 |
看这张表你应该明白我为什么最终落在 Cloudflare Tunnel 了:免费、不限速、自带 HTTPS、不用服务器、不用绑卡。下面正式讲它。
三、Cloudflare Tunnel 是什么,凭啥免费不限速
Cloudflare Tunnel 是 Cloudflare 官方的内网穿透方案,核心是一个叫 cloudflared 的轻量客户端。
Cloudflare Tunnel(cloudflared):Cloudflare 提供的轻量级客户端守护进程,在你本机和 Cloudflare 全球边缘网络之间建一条加密出站隧道,外网请求先到 Cloudflare,再由 Cloudflare 反向代理回你本地的服务。可以理解为"Cloudflare 帮你做好了反向代理 + HTTPS,你只要装个客户端"。
你不需要公网 IP,也不用在路由器开端口,cloudflared 是从你本机主动连出去到 Cloudflare(出站连接,防火墙一般不拦),再由 Cloudflare 把公网请求顺着这条隧道送回来。安全性和可访问性都比"在家开端口"强一截。
快速隧道:cloudflared 的一条免登录、免配置命令,启动即生成一个 trycloudflare.com 的随机子域名,把本地端口临时暴露到公网。可以理解为"不用注册账号、试穿一次就走的体验装"。
为什么能免费还不限速?官方文档说得很直白,我贴一段原文:
"We want more users to experience the speed and security improvements of Cloudflare Tunnel. We hope you test it with TryCloudflare and decide to add it to your production sites."
翻译过来就是:Cloudflare 希望你先用免费的快速隧道体验它的速度和安全,将来正式项目时再把它用进生产环境。它把免费隧道当成产品试用入口,所以带宽不卡你(走的是 Cloudflare 全球边缘网络,我实测本机经边缘节点往返约 1.5 秒,做开发预览足够用)。
当然,免费是有代价的——代价是"没有 SLA 保证、域名随机、仅供测试开发"。官方同一篇文档里也明说:"We don't guarantee any SLA or uptime of TryCloudflare... Free tunnels are meant to be used for testing and development, not for deploying a production website." 这些限制下文会展开。
理解了原理,装起来就顺了。下面分 macOS 和 Windows 两套,都是我实测过的。
四、macOS 安装与使用(brew 一行搞定)
macOS 走 Homebrew,最省心。我这次用的版本是 cloudflared 2026.7.2
1)安装
# 适用于 macOS,需先有 Homebrew
brew install cloudflared
# 验证版本
cloudflared --version
如果你没装 Homebrew,去 brew.sh 按一行命令装上即可;或者按官方文档下载 Darwin 对应架构的二进制包手动放进去(搜:cloudflared macOS download)。
2)起一条快速隧道
先把本地服务跑起来(比如前端在 5173),然后另开一个终端标签页执行:
# 把本机 5173 端口暴露到公网,换成你的端口即可
cloudflared tunnel --url http://localhost:5173
几秒后,输出里会出现一行关键信息:
Your quick Tunnel has been created! Visit it at (it may take some time to be reachable):
https://xxx-xxx-xxx.trycloudflare.com

把这个 https://xxx.trycloudflare.com 复制出去就行,自带 HTTPS,手机、外网、同事那边直接打开。
3)停止
在那个终端窗口按 Ctrl+C,链接立刻失效,不残留、不收费。每次重新跑,域名都会随机变一个。
可能有人会问:这个 trycloudflare 域名能固定吗?
快速隧道不能,每次启动都是随机子域名。想固定,得用"命名隧道 + 自己的域名",见文末进阶部分。临时预览用快速隧道就够了。
五、Windows 安装与使用(winget 或 MSI 两种方法)
Windows 稍微多一步,但也很简单。两种安装方式任选其一。
方式一:winget(推荐,Windows 10/11 自带)
# 以命令行安装,包 ID 是 Cloudflare.cloudflared
winget install -e --id Cloudflare.cloudflared
# 验证(新开一个 PowerShell 窗口,让 PATH 生效)
cloudflared --version
winget 是微软官方包管理器,Win10 1709 之后基本都自带。装完记得新开一个 PowerShell 窗口,否则 cloudflared 命令可能还没进 PATH。
方式二:MSI 安装包(图形化、适合不想敲命令的)
去 GitHub 官方发布页下载对应安装包(搜:cloudflared releases):
- 64 位 MSI:cloudflared-windows-amd64.msi
- 32 位 MSI:
cloudflared-windows-386.msi
双击安装后,cloudflared.exe 会进系统 PATH,打开新的 PowerShell/CMD 就能用。官方下载页见 Cloudflare Tunnel Downloads。
起隧道(和 macOS 完全一样)
# 暴露本机 5173 到公网
cloudflared tunnel --url http://localhost:5173
同样在输出里找那行 https://xxx.trycloudflare.com,复制即可。停止一样是 Ctrl+C。
你可能会想:Windows 上能不能让它开机自启、后台一直跑?
能。MSI 装好后,以管理员身份执行
cloudflared service install,它会注册成系统服务常驻;不想用了cloudflared service uninstall卸掉。不过快速隧道随机域名每次重启会变,开机自启更适合配命名隧道用。
六、实测验证:公网地址真的能打开页面
光说不练假把式。我这篇文章的命令就是边写边在本机跑的,贴一段真实输出给你看。
装完 cloudflared 2026.7.2,起隧道指向本地 5173 的一个 Vue 项目,拿到地址 https://walking-limits-spectacular-scale.trycloudflare.com,然后分别测公网入口和本地直连:
# 通过 Cloudflare 公网地址访问
curl -sS -o /dev/null -w "HTTP %{http_code} | 下载 %{size_download} bytes | 耗时 %{time_total}s\n" \
https://walking-limits-spectacular-scale.trycloudflare.com/
# 对比:直接访问本机
curl -sS -o /dev/null -w "HTTP %{http_code} | 下载 %{size_download} bytes\n" http://localhost:5173/
结果:公网入口返回 HTTP 200,下载 537 字节,耗时约 1.5 秒;本地直连同样 200、537 字节。两者内容一致,说明整条链路"公网 → Cloudflare 边缘节点 → 我的 Mac → localhost:5173"完全打通,返回的就是真实页面。
换 1Mbps 的花生壳,同样 537 字节当然秒回;但首屏那 5~10MB 的资源,差距就拉开了。这也是我把花生壳换掉的根本原因。
七、快速隧道的限制与注意事项(必看)
免费好用,不代表没有边界。这几条官方文档明说的限制,你心里要有数:
- 无 SLA、无稳定性保证。官方原话:"We don't guarantee any SLA or uptime of TryCloudflare." 偶尔会断,断了重跑一遍命令、换个新地址即可,别拿它跑生产业务。
- 并发请求硬上限 200。同一时刻在途请求超过 200 个,Cloudflare 直接返回
429。个人预览完全够,但别拿它压测或扛流量。 - 不支持 SSE(Server-Sent Events)。如果你穿透的是流式接口(比如某些 AI 流式输出用 SSE),快速隧道走不通,需要用命名隧道。
- 域名每次随机。
trycloudflare.com前面那串每次启动都变,没法当固定地址发出去长期用。 - 只在终端开着时有效。关终端、Ctrl+C、电脑休眠,链接就断。要长期挂,用后台服务或命名隧道。
- 对外是 HTTPS,到你本地那段是 HTTP。你穿的是
http://localhost:端口,不用配证书;HTTPS 由 Cloudflare 在边缘终止,省心。 - 无需注册、无需绑卡。快速隧道连账号都不要,这是它最爽的一点。命名隧道才需要免费注册 Cloudflare 账号(官网标注 "no credit card required",但 Zero Trust 控制台个别情况可能要求留个支付方式做反滥用,免费档不扣费)。
一句话总结:快速隧道 = 开发预览、临时分享、回调测试的完美工具,不是生产工具。
八、想要固定域名?进阶看命名隧道
如果哪天你要长期挂一个固定地址(比如给团队稳定的预览环境、接 Webhook 回调),就该从快速隧道升级到命名隧道了。
命名隧道需要:免费注册 Cloudflare 账号 → 一个托管在 Cloudflare 的域名 → cloudflared login 授权 → cloudflared tunnel create 建隧道 → 写 config.yml 指定域名与本地端口映射 → cloudflared service install 装成系统服务(launchd / Windows 服务)开机自启。
配好之后就是"开机自动起、固定域名、永久在线",不用再敲命令。完整步骤以官方文档为准:Connect through Cloudflare Tunnel。我个人建议:先把快速隧道用熟,确定长期需要再上命名隧道,别一上来就折腾配置文件。
九、报错排查:我替你踩过的三个坑
这一节是我真踩过的坑,贴出来帮你省时间。
坑一:页面打开报 "Blocked request. This host is not allowed"
穿透成功,但浏览器一访问就被开发服务器拦,提示要把域名加到 allowedHosts。原因是较新版本的 Vite 等现代开发服务器会校验请求的 Host 头,防止 DNS 重绑定攻击,而隧道转发过来的 Host 是 xxx.trycloudflare.com,不是本机,于是被拦。
解法:在 vite.config 的 server 里放开 Host 校验。
// vite.config.js / .ts
export default defineConfig({
server: {
host: true, // 监听 0.0.0.0,允许外部访问
allowedHosts: true, // 允许 trycloudflare 这类 Host 头
},
})
坑二:本地能开,但 http://内网IP:端口 和隧道都连不上
八成是服务只绑了 127.0.0.1 或 IPv6 回环 ::1,没监听所有网卡。表现是 lsof 看到 TCP [::1]:5173 (LISTEN) 而不是 *:5173。解法同上,设 host: true 让它监听 0.0.0.0。改完记得重启 dev server,这种配置不热更新。
坑三:页面能开,但 /api 接口报错
穿透的是前端端口(如 5173),页面里的接口请求经开发服务器的代理转到本机后端(如 127.0.0.1:8000)。后端没起,页面开得开、接口却 404/502。这不是隧道的锅,把后端在本机跑起来就好。
可能有人会问:那我需要把后端端口也单独穿透一条吗?
不用。只要前端开发服务器配了
/api代理到后端,你只穿透前端一个端口,接口请求由前端服务在服务端转发到本地后端,对外只需要一条隧道。多穿一条反而多一个域名、多一份维护。
十、合规与说明
合规提醒:内网穿透适用于开发预览、临时分享、回调测试等短期场景;若在中国大陆对外正式、长期提供网站或信息服务,仍需依法办理 ICP 备案等手续,本文不鼓励用它规避监管。
说明:以上即 Cloudflare Tunnel 内网穿透的完整上手指南,结合个人 macOS 实测独立撰写;花生壳、ngrok、natapp 等工具的套餐、带宽与定价会随时间调整,文中数据为撰写时的公开信息,请以各厂商官网为准,观点与表述均为作者本人。
延伸阅读:想看内网穿透在真实业务里的用法,可看我之前这篇《SpringBoot 实战:微信公众号验证码登录功能(全流程详解+源码)》——里面用 Natapp 做内网穿透接微信回调。
如果这篇 Cloudflare Tunnel 内网穿透教程对你有帮助,欢迎点赞收藏;有踩坑或疑问,评论区见。

用 Cloudflare Tunnel 内网穿透,免费不限速替代花生壳,macOS 与 Windows 双系统安装,一行命令拿 HTTPS 公网地址。
浙公网安备 33010602011771号