Agent Skills
返回列表
🔒

Cloudflared Tunnel 内外穿透

IT 运维与安全 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_38816413/cloudflared-tunnel-ttyd 技能,用于把沙箱内的 ttyd 终端或 Web 服务通过 Cloudflare 命名隧道暴露到公网自定义域名。

技能介绍

解决什么问题

在容器或沙箱里跑服务时,外部往往完全无法触达:没有公网 IP、没有端口映射,有时连出网都要绕镜像或代理。本技能处理的是一类很具体的场景——把 ttyd Web 终端(或任意本地 Web 服务)通过 Cloudflare 的命名隧道挂到自定义域名上,让浏览器在公网直接打开一个可用的 bash 终端。它同时要应付沙箱环境的两个现实约束:一是网络限制(GitHub release 直连不可达、部分域名 DNS 被劫持到内部网段),二是凭证不完整(只有 zone 级 DNS 权限,拿不到账号下的 zone 列表)。

技能如何工作

核心是凭证分工与幂等执行两条主线。

凭证分工方面:Cloudflare API Token 只用来建隧道和改 DNS(DNS:Edit 足够,不需要 Zone:Read);隧道 Token 则是 cloudflared 进程连边缘时用的身份凭证,只返回一次,因此已有隧道要直接复用而不是重建。隧道 UUID 可从 JWT payload 的 t 字段解析出来,用于判断 DNS 是否已经正确指向。

执行流程分四步,每步都封装在脚本里、可重复运行:

  • 安装依赖:cloudflared 走官方 apt 仓库而非 release(沙箱内 GitHub 不可达);ttyd 优先系统源,失败自动切腾讯镜像。
  • 隧道与 DNS:已有隧道 Token 就直接复用(存文件、chmod 600),DNS CNAME 已指向该隧道则跳过;没有才走 REST API 新建。新建时 config_src 必须是 local,DNS 记录必须 proxied: true(橙色云),否则边缘不回源。
  • 启动:ttyd 绑定 127.0.0.1:7681,只允许本机 cloudflared 访问,开 WebSocket 心跳避免边缘空闲断连;cloudflared 用配置文件方式跑命名隧道,ha-connections 设 4 条以降低单点边缘无连接的概率。
  • 验证:检查公网 HTTP、WebSocket 握手(注意 curl 需加 --http1.1,走 HTTP/2 会拿到 404)以及隧道进程存活状态。

适用边界与注意点

  • 不要用 cloudflared tunnel create 子命令建隧道——它强制要求账号级 cert.pem,纯 API Token 会失败,因此必须走 REST API。
  • ttyd 不能加 -O(check-origin):Cloudflare 回源会把 Host 改写成 127.0.0.1:7681,与浏览器 Origin 不匹配会让 ttyd 拒绝 WebSocket,公网表现就是 /ws 404。基础认证 -c 已足够。
  • Zone ID 不要依赖 GET /zones 反查(token 缺 Zone:Read 会返回空),让用户直接从控制台 DNS 页 URL 里取。
  • 沙箱回收进程后隧道会挂,公网表现为 530,需重启 cloudflared;技能附带看门狗脚本每 25s 健康检查一次做自愈。
  • no-autoupdate 这类配置项要放进 cloudflared.yml,run 子命令不认顶层 flag。
  • 停进程时别写 pkill -f ttyd(会自匹配当前 shell 命令行把自己杀掉),要用括号技巧绕过。
  • 该方案把终端暴露到公网,务必配合强口令或更上层的访问控制使用,不适合直接挂在未认证的域名上。

使用场景

  • 沙箱里启动了 ttyd 终端,但公网浏览器完全访问不到,需要把终端挂到自定义域名上
  • 只有 zone 级 API Token、拿不到 Zone:Read,仍需完成隧道创建与 DNS CNAME 配置
  • Cloudflare 边缘频繁 502 或 530,需要按 ha-connections、隧道存活与 ttyd WebSocket 逐项排查
  • 已有命名隧道 Token,想直接复用,不再新建隧道和重复写 DNS 记录

适合人员

  • 在容器或沙箱里跑 Web 服务、需要给外部访问开一条临时隧道的后端工程师
  • 用 ttyd 给目标机器开浏览器可用 shell 的运维或渗透测试人员
  • 只有 Cloudflare zone 级 DNS 权限、需要绕过 Zone:Read 限制完成隧道配置的基础设施工程师
  • 需要核对沙箱网络限制、凭证作用和 ttyd/cloudflared 启动参数的脚本编写者