安全地暴露你的控制面板:面向 Claude Code、Codex 和 OpenCode 的 Cloudflare Tunnel、Tailscale Funnel 与 ngrok 对比

用手机访问自托管控制面板的三种方式的实用对比,以及各自的取舍(信任边界、认证、HTTPS 和运维复杂度)。

基于版本
CLI
0.2.17
预览 ref
a2c45c8

如果你在自己掌控的机器上运行 Claude Code、Codex 或 OpenCode,接下来的念头很明显:

“我想在手机上看看它。”

然后是那个危险的后续想法:

“我直接开放一个端口就好了。”

这样你最终就会把一个认证不完整的控制面板暴露在公网上。

所以这篇指南讲的是同一个需求的更安全版本:

不开放入站端口,给自己一个能在手机上打开的 HTTPS 地址。

大家常用的工具有三个:

  • Cloudflare Tunnel
  • Tailscale Funnel
  • ngrok

它们都能用。

但它们的信任边界和故障方式差别很大。

要点

  1. 如果你只想“在我的私有网络内访问”,Tailscale Serve / Funnel 通常很省事。
  2. 如果你想暴露到公网并配合强身份验证,Cloudflare Tunnel 加 Cloudflare Access 是常见的模式。
  3. 如果你想“现在马上拿到一个 URL”,ngrok 依然是常用的默认选择。
  4. 如果你要暴露的是 Happier 的网页界面,记住浏览器的加密限制:手机远程访问应使用 HTTPS(安全上下文)。

问题

你同时想要三样东西:

  • 一个能在手机上打开的 URL
  • HTTPS(安全上下文)
  • 防火墙上不开入站口子

难点在于,这里的“安全”不只是 TLS。

还包括:

  • 谁能访问这个 URL
  • 怎么认证
  • 隧道凭据泄露时会发生什么

常见做法及其取舍

  • 直接开放端口:快,但鲁莽。
  • 只在局域网内访问:安全,但手机离开内网就用不了。
  • 不带认证的隧道:比开放端口稍好一点,但依然鲁莽。

所以,把“手机访问”当作身份加网络设计的问题来看会更有帮助。

方案 A:Cloudflare Tunnel

Cloudflare Tunnel 只走出站连接:由连接器主动连到 Cloudflare。

大家喜欢它的原因:

  • 不需要入站端口
  • Cloudflare Access 提供 SSO、设备状态检查和访问策略

取舍:

  • 你要信任 Cloudflare 作为边缘节点
  • 你需要管理 DNS 和 Access 策略

方案 B:Tailscale Funnel

Funnel 通过 Tailscale 发布一个 HTTPS 端点。

大家喜欢它的原因:

  • 原生集成在 tailnet 中
  • 隐藏源站 IP

取舍:

  • 有一些限制和策略要求
  • 很容易把 Funnel(公开)和 Serve(仅限 tailnet)搞混

方案 C:ngrok

ngrok 是快速拿到一个 URL 的办法。

取舍:

  • 用量限制和价格会成为瓶颈
  • 接近生产环境的控制面板需要强认证

Happier 的定位(安全上下文与 Tailscale Serve)

如果你要暴露的正是 Happier 的网页界面,还有一个额外的限制:

现代浏览器只允许在安全上下文中使用某些加密功能。

http://localhost 算在内。

http://<lan-ip> 和 http://<tailscale-ip> 不算。

所以你需要 HTTPS。

Happier 推荐的远程访问方式是用 Tailscale Serve 获取一个 https://*.ts.net 地址。

相关指南

mobilesecuritytunnelscloudflaretailscalengrok
最后更新: 2026-10-26