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 协议栈实现的开发者。