隧道对比

四种暴露 OpenCode 的方式,按场景选,不按习惯选。

下面四种都能把 OpenCode 流量送到 KKCode。选哪个取决于:谁要访问、地址多久变一次、你的开发机已经跑了什么。没有「放之四海皆准」的最优,只有「对你的场景最优」的选择。

最近更新: 2026-08-03中文

快速选择

如果你需要…为什么
就你自己一台 iPhone,零配置扫码隧道(@kkcode-app/agent开发机一行命令,手机扫个码搞定。不用账号、域名、路由器配置。
自己的 iPhone + 其他设备,地址要稳定Tailscaletailnet 内私有 HTTPS,不暴露公网,个人免费,跨蜂窝/家庭网络都能用。
任何浏览器都能访问 + iPhone,绑自己的域名Cloudflare Tunnel公网 HTTPS + 稳定域名,免路由器端口转发,可叠加 Cloudflare Access 做 SSO。
开发机已经在跑 Caddy / Nginx / Traefik反向代理复用现有 HTTPS 基础设施。确保 SSE 和 WebSocket upgrade 都通。

方案 A —— KKCode 内置扫码隧道

打包在 @kkcode-app/agent 这个 npm 包里。开发机上跑:

npx -y @kkcode-app/agent@latest

agent 会起 opencode serve、通过 KKCode 中继开一条出站隧道、并在终端打印一个二维码。打开 KKCode,在连接页点扫码,URL 和鉴权头自动填好。

优势

  • 零配置。不用注册账号、不用持有域名、不用碰路由器。
  • 一码一扫。蜂窝和 Wi-Fi 都能用。
  • 开发机只做 outbound 连接,在严格 NAT、运营商级 NAT、公司防火墙后都能用。
  • 重连由 agent 负责。kill 掉重启即恢复。

取舍

  • 流量经过 KKCode 中继。绝不能离开自己基础设施的代码别走它。
  • 地址绑定在 agent 进程上。agent 一停,下次启动得重新扫一次码。
  • 天生单租户 —— 想让别人也能用,要么把二维码(和密码)发出去,要么走别的方案。

方案 B —— Tailscale

只需要自己设备访问时的默认选项。它让 OpenCode 继续绑在 loopback,并在 tailnet 内提供一个私有 HTTPS 地址。

搭建

# 开发机
opencode serve --hostname 127.0.0.1 --port 4096
tailscale serve --bg 4096
tailscale serve status

iPhone 装 Tailscale、登同一个 tailnet,把 https://machine-name.tailnet-name.ts.net 这个地址填进 KKCode。

优势

  • 天生私有 —— 这个地址只在你的 tailnet 内能解析。
  • 稳定 hostname,重启和换 IP 不影响。
  • 个人使用免费,ACL 管理简单。
  • 跨蜂窝和 Wi-Fi,不用端口转发。

取舍

  • 需要一个 Tailscale 账号,每个要访问的设备都要装 Tailscale。
  • tailnet 增长、key 过期、ACL 变更都是你自己要管的运维事项。
  • 不适合要把同一个 OpenCode 分享给 tailnet 外的人。

方案 C —— Cloudflare Tunnel

Cloudflare Tunnel 给你一个公网 HTTPS URL + 稳定域名 + 免路由器端口转发。因为 URL 公网可达,OpenCode 鉴权是必须开的 —— 隧道管的是传输,不管身份。

搭建

# quick tunnel(临时 URL)
cloudflared tunnel --url http://127.0.0.1:4096

# named tunnel(自己域名下的稳定 hostname)
cloudflared tunnel login
cloudflared tunnel create opencode-mobile
cloudflared tunnel route dns opencode-mobile opencode.example.com
cloudflared tunnel run opencode-mobile

把得到的 URL 填进 KKCode。开 app 之前先用 curl -u user:password 验证一下 /global/health

优势

  • 公网 HTTPS,不开端口转发,开发机不用公网 IP。
  • 绑你自己已有的域名,hostname 稳定。
  • 可叠加 Cloudflare Access 做 SSO、设备态势、审计日志。
  • 个人用量免费档够用。

取舍

  • URL 公网任何人都能访问。把 OpenCode 密码当成公网凭证对待。
  • quick tunnel 的 URL 是临时的,用完即弃。
  • 流式和 WebSocket 流量必须在隧道配置里保留 —— 实际使用前先验 SSE 通不通。

方案 D —— 反向代理

如果开发机已经跑了 Caddy / Nginx / Traefik,把 OpenCode 挂在一个路径前缀下,复用现有 HTTPS。

Caddy 示例

opencode.example.com {
    reverse_proxy 127.0.0.1:4096
}

路径前缀示例

dev.example.com {
    @opencode path /api/*
    reverse_proxy @opencode 127.0.0.1:4096
}

把完整 URL(含前缀)填进 KKCode。SSE 和 WebSocket upgrade 的坑见 远程接入 / 反向代理

优势

  • 复用现有 TLS、证书、可观测性栈。
  • 挂在自己域名和路径约定下。
  • 直接对接公司 SSO、IP 白名单、限流。

取舍

  • 配置全靠你 —— 代理配错 SSE 默默就挂了,从 App 上看就像连接错误。
  • 暴露面完全取决于你的 DNS 和代理配置,不适合快速试。

纯局域网和 SSH 端口转发呢?

在合适场景下两者都成立,见 远程接入。iPhone 和开发机在同一个可信 Wi-Fi 时用局域网;想跳过任何隧道产品时 SSH 转发够用。它们都不是"默认远程"方案,所以上面四种才是"在哪里都能用 OpenCode"的真正选择。