安全地暴露你的控制面板:面向 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
它们都能用。
但它们的信任边界和故障方式差别很大。
要点
- 如果你只想“在我的私有网络内访问”,Tailscale Serve / Funnel 通常很省事。
- 如果你想暴露到公网并配合强身份验证,Cloudflare Tunnel 加 Cloudflare Access 是常见的模式。
- 如果你想“现在马上拿到一个 URL”,ngrok 依然是常用的默认选择。
- 如果你要暴露的是 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