调试 Webhook、支付回调、第三方 OAuth 时,本地服务需要公网可访问地址。下面只收「能免费用」的工具(含免费档 / 开源自建),按「临时调试」和「长期固定域名」两类对比,并附启动命令。
工具对比
| 工具 | 类型 | 免费 | 固定域名 | 侧重场景 | 代理方式 | 亮点 | 注意 |
|---|---|---|---|---|---|---|---|
| Cloudflare Quick Tunnel | CLI | 是 | 随机子域 | 通用 HTTP | 整端口 | 免账号、稳定、HTTPS | 每次 URL 会变 |
| Pinggy | SSH / CLI | 有免费档 | 随机子域 | 通用 | HTTP / TCP / UDP | 一条 SSH、免装客户端 | 免费档约 60 分钟超时 |
| localhost.run | SSH | 是 | 随机子域 | 通用 HTTP | 整端口 | 免装、免注册 | 免费域名会轮换 |
| smee | CLI / 网页 | 是 | 固定隧道 URL | GitHub Webhook | 指定 path | 专为 Webhook 设计 | 只转发 HTTP,非通用隧道 |
| Hookdeck CLI | CLI | 有免费档 | — | Webhook | 指定 path | 事件重放、过滤、日志 | 需登录,偏 Webhook 平台 |
| ngrok | CLI | 有免费档 | 随机 / 付费固定 | 通用 | HTTP / TCP | 老牌、文档全、生态大 | 免费随机子域,固定域名付费 |
| dev tunnel | CLI | 是 | 可配置 | 通用 | 整端口 | 微软出品,GitHub 登录 | brew 版本可能过旧,用官方脚本 |
| Localtunnel | npx | 是 | 随机子域 | 通用 | 整端口 | 零安装 | 首次访问需隧道密码 |
| Tailscale Funnel | CLI | 有免费档 | *.ts.net | 已用 Tailscale | 整端口 | 一条命令公网暴露 | 需先装 Tailscale 并开 Funnel |
| zrok | CLI / 自建 | 有免费档 / 开源 | 随机 / 自建 | 公有 + 私有分享 | HTTP / TCP / UDP | OpenZiti 零信任;可只对指定人分享 | 托管有流量限额;自建成本高 |
| LocalXpose | CLI / GUI | 有免费档 | 随机子域 | 通用 HTTP | HTTP(付费才有 TCP/UDP) | 有 GUI、上手快 | 免费档 2 条 HTTP 隧道 + 插页提示 |
| bore | CLI / 自建 | 开源免费 | 随机端口 | 轻量 TCP | TCP | 极简、可自建 bore server | 公网实例 bore.pub;无内置 HTTPS |
| VS Code / Cursor Ports | 编辑器 | 随 IDE 免费 | 会话级 | 编辑器内调试 | 整端口 | 不用另开终端 | 偏临时;Public 依赖登录 |
| frp | 自建 | 开源免费 | 自有域 / 端口 | 自建长期 | HTTP / TCP / UDP | 国内常用、协议全 | 需要一台有公网 IP 的机器 |
| Cloudflare Tunnel | 面板 + 守护进程 | 是 | 自定义子域 | 生产 / 长期 | 完整路由 | 固定域名、可绑自有域 | 配置步骤多,适合长期用 |
推荐
- 临时调试、不想注册:Cloudflare Quick Tunnel;机器不好装软件时用 Pinggy / localhost.run(SSH 即可)。
- 只接 GitHub Webhook:smee 或 Hookdeck CLI(带重放更方便)。
- 要 TCP、固定子域或团队习惯:ngrok;只要裸 TCP、能自建:bore。
- 微软 / GitHub 生态:dev tunnel;人已在 VS Code / Cursor 里:Ports 面板最快。
- 要私有分享(不要公网 URL):zrok private share。
- 想要 GUI、先试用:LocalXpose(免费档够 HTTP 调试)。
- 已在用 Tailscale:Tailscale Funnel。
- 有 VPS、要自建长期:frp;域名在 Cloudflare 上则优先 Cloudflare Tunnel(面板配置)。
Cloudflare Quick Tunnel
安装:
brew install cloudflared
winget install --id Cloudflare.cloudflared
启动(将 8080 换成本地端口):
cloudflared tunnel --url http://localhost:8080
Pinggy
ssh -p 443 -R0:localhost:8080 free.pinggy.io
免费档约 60 分钟超时,重连后 URL 会变。Windows 若连不上本机,把 localhost 换成 127.0.0.1。
localhost.run
官网 — 同样零安装;免费档可用 nokey 跳过密钥。
ssh -R 80:localhost:8080 [email protected]
免费域名会轮换;要更稳的会话可用 SSH key(见官方 FAQ)。
smee
# 将 URL 换成 https://smee.io/new 生成的地址
npx smee-client --url https://smee.io/xxx --path /integration/webhook/github --port 8080
Hookdeck CLI
npx hookdeck-cli login
npx hookdeck-cli listen 8080 github --path /integration/webhook/github
ngrok
安装:
brew install ngrok/ngrok/ngrok
winget install ngrok -s msstore
写入 token(登录后页面会给出命令):
ngrok config add-authtoken XXX
启动:
ngrok http http://localhost:8080
dev tunnel
安装(brew 版本可能过旧,推荐官方脚本):
curl -sL https://aka.ms/DevTunnelCliInstall | bash
登录(-g 为 GitHub,否则微软账号):
devtunnel user login -g
启动:
devtunnel host -p 8080
Localtunnel
npx localtunnel --port 8000
首次访问页面会要求隧道密码,二选一获取:
curl https://loca.lt/mytunnelpassword
wget -q -O - https://loca.lt/mytunnelpassword
Tailscale Funnel
官方文档 — 个人档可用;需已安装并登录 Tailscale,首次会引导开启 Funnel / HTTPS。
tailscale funnel 8080
公网地址形如 https://<device>.<tailnet>.ts.net。
zrok
官网 / GitHub — 托管有免费档(有日流量限额);也可 Apache-2.0 自建。
# 安装见 https://docs.zrok.io/docs/guides/install/
zrok invite
zrok enable # 按邮件 / 控制台给出的 token 启用本机环境
zrok share public localhost:8080
只要给同事用、不要公网 URL:用 private share(对方也装 zrok,用 token 接入)。
LocalXpose
官网 / 定价 — 免费档可用,限 2 条 HTTP/HTTPS;TCP/UDP 要付费。
# 从官网下载 CLI 后
loclx account login
loclx tunnel http --port 8080
也提供 GUI 客户端。免费访问常带插页提示页。
bore
GitHub — MIT;可走公共 bore.pub,也可自建。
brew install bore-cli
# 或:cargo install bore-cli
bore local 8080 --to bore.pub
输出形如 bore.pub:<随机端口>。自建服务端:bore server(建议加 --secret)。只做 TCP 转发,HTTPS 需自己在应用层处理。
VS Code / Cursor Ports
编辑器自带,不另装产品。适合「已经开着 IDE」时的临时暴露。
- 终端跑起本地服务(如
8080)。 - 打开 Ports 面板 → Forward a Port → 填
8080。 - 右键该端口,Visibility 设为 Public(通常需登录微软 / GitHub 账号;底层接近 Dev Tunnels)。
关编辑器或结束转发后地址即失效,不适合长期挂公网。
frp(自建)
GitHub — 开源免费,但要有一台公网可达的服务器。服务端 / 客户端从 Releases 下载对应平台包。
服务端 frps.toml(跑在 VPS):
bindPort = 7000
./frps -c frps.toml
客户端 frpc.toml(跑在本机,把 x.x.x.x 换成 VPS IP):
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 8080
./frpc -c frpc.toml
之后通过 http://x.x.x.x:8080 访问本地服务。生产环境务必配 auth.token,并注意防火墙放行 7000 / 8080。
Cloudflare Tunnel(固定域名)
Cloudflare One 面板 — 适合需要稳定公网域名的场景。
Networks→Tunnels→ Create a tunnel → 选 Cloudflared,填写名称并保存。- 按页面提示安装 connector,示例:
brew install cloudflared &&
sudo cloudflared service install XXX
Public Hostnames里配置 Subdomain、Domain、Path、Type、后端 URL(不要写http:///https://前缀)。- 保存后测试路由是否可达。