Tessera:一种对用户流量不可见的同意门控隧道
原标题:Tessera – a consent-gated tunnel that's blind to your traffic
速览
Tessera发布了一种名为“同意门控隧道”的新机制。该设计确保隧道对实际传输的流量内容保持不可见。这一技术旨在平衡数据隐私保护与网络传输需求。
AI 深度解读
Tessera:一个对流量“盲视”的同意门控隧道
背景
在远程协作、调试和故障排除的日常工作中,开发者经常面临一个安全与便利的权衡难题:如何安全地让同事或客户访问本地开发环境(如数据库、Web 服务器或 Shell),同时避免长期暴露端口或建立持久的网络连接?
传统的解决方案往往存在缺陷:
- VPN:配置复杂,且通常建立持久的隧道,权限粒度较粗。
- Ngrok/Tailscale 等工具:虽然方便,但通常会生成持久的公共 URL 或保持后台服务常驻,缺乏临时的、基于会话的细粒度控制。
- SSH 端口转发:需要管理密钥,且一旦建立连接,除非手动断开,否则端口一直开放。
Tessera 应运而生。它是一个基于 Go 语言构建的“同意门控”(consent-gated)远程访问代理。其核心理念是:没有持久的连接,没有永久的令牌,只有经过明确批准的、有时限的会话,且所有操作均有审计日志。
项目目前处于 pre-1.0 阶段,尚未经过独立的安全审查。官方明确警告:不要在没有独立安全审计的情况下,将其用于保护生产环境或敏感系统。 请参见项目中的 SECURITY.md 文件以获取更多信息。
核心内容
1. 设计理念与命名由来
Tessera 的名字来源于罗马时期的 tessera hospitalis(好客令牌),这是一种赠予客人的信物,象征着受信任且受欢迎的关系。这反映了该工具的设计哲学:临时性、基于信任且可撤销。
- 非 VPN:它不建立持久的虚拟网络。
- 非持久 URL:它不生成固定的公共访问地址。
- 非持久账户:会话结束后,所有临时状态(如令牌、打开的端口)立即消失,仅保留审计日志中的一条记录。
2. 工作原理与架构
Tessera 由三个小型 Go 二进制文件组成:Coordinator(协调器)、Agent(代理) 和 Tessera(客户端 CLI)。
- 出站连接(Outbound Only):Agent 主动拨号连接到 Coordinator。这意味着主机资源不接受任何入站连接,在主机批准之前,没有任何端口对外暴露。
- 双向 TLS (mTLS):Agent 和 Guest(访客)CLI 与 Coordinator 之间通过 mTLS 建立安全连接。
- 端到端加密:内部流量(Inner TLS)在端点之间终止。Coordinator 仅作为中继,看到的是密文,无法窥探实际流量内容(即“盲视”)。
流程图解:
- 注册:Agent 在主机上运行,主动拨号注册到 Coordinator。
- 请求:Guest 运行
tessera share,向 Coordinator 请求访问特定资源(如localhost:5432)并说明理由。 - 审批:Coordinator 通过 mTLS 向主机终端发送提示。主机用户看到谁在请求、为何请求,并在终端输入
y或n。 - 建立会话:若主机批准,Guest 获得会话令牌,建立到 Coordinator 的流。Coordinator 将数据转发给 Agent,Agent 连接本地目标资源。
- 流量转发:Guest 的本地端口(如
127.0.0.1:13000)通过 Coordinator 隧道转发到主机的目标端口(如127.0.0.1:5432)。 - 审计:每个请求、批准、会话开启和关闭都写入追加式审计日志(Append-only audit log)。
3. 主要功能场景
- 结对编程:让队友访问本地的
localhost:3000开发服务器。队友运行join,主机用户输入y,连接建立;Ctrl-C 结束。 - 支持会话:客户无法复现 Bug 时,运行
share发送代码给开发者。开发者join,客户在终端观看并批准。通话结束后,共享自动终止。 - 数据库调试:承包商需要访问暂存环境的 PostgreSQL 15 分钟。主机共享端口,承包商连接,主机通过审计日志查看每一次请求流。
- 一次性 Shell 访问:使用
tessera share -shell提供 PTY 附加到主机。注意:使用前需阅读SECURITY.md了解-shell实际暴露的内容。
4. 部署与安装
安装方式:
- 一键安装:
首次运行会提示链接到 Coordinator(可使用curl -fsSL https://raw.githubusercontent.com/emmayusufu/tessera/main/install.sh | bashTESSERA_SKIP_LINK=1跳过)。 - 手动构建:
git clone https://github.com/emmayusufu/tessera && cd tessera && make build # 二进制文件位于 ./bin/{coordinator,agent,tessera}
部署 Coordinator(协调器): Coordinator 需要运行在一个具有公共地址的主机上(如 $5 的 VPS)。
- 端口要求:防火墙需开放入站端口 8443(mTLS 通信)和 8080(HTTP 用于赎回/查看)。
- Docker 部署:
官方提供单镜像(18 MB,基于 distroless),包含所有三个二进制文件。
# 构建镜像 docker build -t tessera . # 生成 CA 和证书 mkdir -p certs && cd certs docker run --rm -v "$PWD:/work" -w /work --entrypoint /usr/local/bin/tessera \ tessera ca --coordinator-name tessera.example.org cd .. # 编辑 docker-compose.yml 并启动 docker compose up -d - HTTPS 支持:建议在生产环境中为 HTTP 端点配置 HTTPS(如使用 Let's Encrypt 证书),以保护传输中的赎回响应(包含访客私钥)。
本地测试流程:
- 生成 CA 和证书(Coordinator 名称设为 localhost)。
- 启动 Broker(监听 :8443 和 :8080)。
- 运行 Agent(指定 share-id 和允许访问的本地端口,如
127.0.0.1:5432)。 - 运行 Tessera CLI 请求连接,主机终端批准。
- 本地端口转发生效,直到 Ctrl-C 或超时。
5. 安全与运维特性
- 会话生命周期:
- 会话仅在双方持有时存在。
- 任一方均可立即结束会话。
- 断开连接时会话死亡。
- 空闲流在 30 分钟 后超时。
- 操作员令牌(Operator Token):
- 用于执行撤销(Revoke)等管理操作。
- 部署时生成并保存到
~/.config/tessera/operator-token。 - 若未配置令牌,则禁用撤销功能。
- 可通过 curl 手动撤销:
curl -X POST -H "Authorization: Bearer $(cat ~/.config/tessera/operator-token)" \ https://tessera.example.org/s/<sessionID>/revoke
- 发布与验证:
- 通过 GitHub Actions 在标签推送时构建。
- 发布 12 个二进制文件(Linux/Darwin x64/ARM64)及多架构容器镜像到 GHCR。
- 可通过
gh release view和docker run ... version验证版本一致性。
关键要点
- 零信任架构:主机不监听
查看原文 →github.com
