编程 Tailcat:用 Tailscale 开源组件重写的网络隧道工具

2026-09-07 11:18:38

Tailcat:用 Tailscale 开源组件重写的网络隧道工具

Tailcat 是 Tailscale 官方开源的新项目:把 Tailscale 的开源组件(WireGuard、DERP 中继、gVisor 网络栈)重新组合成一个类似 netcat 的网络隧道工具。在两台机器之间跑 tailcat 就能互传数据,地址是一个约 140 字节的自包含令牌。2026 年 8 月在 TailscaleUp 大会上开源。

能做什么

  • 管道传输echo hello | tailcat <地址> 直接把 stdin/stdout 接到另一台机器;
  • 暴露本地端口:把本地端口通过隧道暴露给对端;
  • 转发端口:把对端端口转发到本地;
  • SSH 服务器:支持公钥认证模式,也有无需认证的临时模式;
  • 按连接执行命令:每个连接触发一次指定命令;
  • 传文件、SOCKS 代理:地址还能直接当 URL 主机名用,SOCKS 代理会识别并拨号。

地址即能力令牌

Tailcat 服务器的标识是 tailcat 地址,形如 tcXYZ...tc 前缀加 base64 编码的 CBOR,里面包含——服务器的 WireGuard 公钥(Curve25519,32 字节)、独立的路径发现公钥(Curve25519,32 字节)、默认独立的 WireGuard 预共享密钥(256 随机比特,防止 DERP 运营商观察到双方公钥后加入隧道,同时提供对录制流量的后量子防护)、以及 DERP 信息(要么引用默认 Tailscale 中继的小整数,要么是完整的 DERP 服务器元数据)。

典型地址约 140 字节。注意默认地址是秘密承载能力:内含预共享密钥,只该分享给应能连接的客户端。发布到公共 DNS TXT 记录等于把能力交给整个互联网——只有服务器同时认证客户端(serve --allow 把隧道限制在列出的客户端)才安全。

工作原理

数据面用 gVisor 的 TCP/IP 栈处理隧道内的连接。客户端通过隧道拨号服务器上的 TCP 端口,gVisor 栈在两端做连接建立;服务端按端口把入站连接分发给处理器:转发到 localhost、管道到 stdout、跑 SSH 会话等。

连接建立流程大致是:客户端通过 DERP 中继引导,同时尝试 NAT 打洞走点对点路径;打洞失败时 DERP 继续兜底,连接照常工作,只是用公共托管 DERP 中继时有速率限制。

项目历史

Tailcat 起源于 2023 年 9 月,当时叫 derpcat,作者在一次长途飞行上追烂片时写的(首个 commit 信息还写着"UA 605 PDX-ORD 去爱尔兰途中,不买机上 WiFi 真香")。最初活在 tailscale 仓库的 fork 里,随 Tailscale 内部演进多次腐烂;如今重获新生,重构为 tailscale.com 仓库的常规 Go module 客户端而不是 fork。

项目明确声明:免费使用,但无 API 或 CLI 稳定性承诺——Go API、CLI 参数与输出、线上格式都可能变;公共限速 DERP 中继无 SLA,随时可能收回访问权。适合想要自托管、不依赖商业网络的隧道场景,也适合想研究 Tailscale 协议栈实现的开发者。

来源:tailscale/tailcat - GitHub

复制全文 生成海报 开源项目 网络 Tailscale 隧道

推荐文章

程序员茄子在线接单