← 返回信息流
AI 资讯Hacker News·3 天前

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 仅作为中继,看到的是密文,无法窥探实际流量内容(即“盲视”)。

流程图解:

  1. 注册:Agent 在主机上运行,主动拨号注册到 Coordinator。
  2. 请求:Guest 运行 tessera share,向 Coordinator 请求访问特定资源(如 localhost:5432)并说明理由。
  3. 审批:Coordinator 通过 mTLS 向主机终端发送提示。主机用户看到谁在请求、为何请求,并在终端输入 yn
  4. 建立会话:若主机批准,Guest 获得会话令牌,建立到 Coordinator 的流。Coordinator 将数据转发给 Agent,Agent 连接本地目标资源。
  5. 流量转发:Guest 的本地端口(如 127.0.0.1:13000)通过 Coordinator 隧道转发到主机的目标端口(如 127.0.0.1:5432)。
  6. 审计:每个请求、批准、会话开启和关闭都写入追加式审计日志(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. 部署与安装

安装方式:

  • 一键安装
    curl -fsSL https://raw.githubusercontent.com/emmayusufu/tessera/main/install.sh | bash
    
    首次运行会提示链接到 Coordinator(可使用 TESSERA_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 证书),以保护传输中的赎回响应(包含访客私钥)。

本地测试流程:

  1. 生成 CA 和证书(Coordinator 名称设为 localhost)。
  2. 启动 Broker(监听 :8443 和 :8080)。
  3. 运行 Agent(指定 share-id 和允许访问的本地端口,如 127.0.0.1:5432)。
  4. 运行 Tessera CLI 请求连接,主机终端批准。
  5. 本地端口转发生效,直到 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 viewdocker run ... version 验证版本一致性。

关键要点

  • 零信任架构:主机不监听
查看原文 →github.com