核心问题: 对于你要连接的两台机器,一个完全可信的带外令牌,是否真的比整套控制平面更合适?
RepoDaily 采用评分
RepoDaily 将该项目的采用分评为 88/100(强):分数来自文章来源、安装路径、生产风险、差异化、许可证清晰度以及 AI/Agent 适配度。
包含 4 个来源、覆盖 4 类来源;如有 RepoDaily 独有模块,会进一步提高证据分。
检测到 6 个工作流步骤、4 个下一步动作,以及 2 个命令/安装信号。
趋势热度为 +790 stars;如内容中有 release、issue 或维护信号,会提高维护可信度。
采纳风险标记为 medium,并包含 6 条安全说明与 5 条跳过条件。
3 个机会视角、5 个替代方案,以及 3 个类型化模块支撑差异化判断。
文章中包含许可证来源或许可证表述。
文章正文和元数据中检测到 1 个 AI/Agent 相关信号。
项目概览
tailcat 是 Tailscale 用自家开源组件拼出的混搭作品:行为像 netcat,但跑在 Tailscale 的数据面上,并且完全不碰它的控制面。README 里那句「Tailscale without Tailscale, by Tailscale」是理解它的钥匙——magicsock(内部代号)提供点对点 WireGuard 加密隧道,DERP 既当 NAT 打洞的通信旁路信道,也在打洞失败时作为最终兜底中继;而所有连接元数据改由带外方式交换,想用什么渠道传都行。被刻意删掉的,正是那台协调服务器。
用法上是一场两方握手。CLI 位于 cmd/tailcat,底层是可导入的 Go 库(github.com/tailscale/tailcat,已收录在 pkg.go.dev)。一侧运行 tailcat 服务端并拿到一个短连接令牌;另一侧把令牌交给客户端即可连上,全程端到端 WireGuard 加密。初始连接经由 DERP 服务器引导,随后 magicsock 尝试 NAT 穿透,「可能的话(通常!)」升级为直连 UDP。不需要 Tailscale 账号,不需要 root/管理员权限,不改路由表、不动 DNS——纯用户态库加 CLI 工具。
许可证为 BSD 3-Clause(Copyright (c) 2020 Tailscale Inc & contributors),把它嵌进自己的工具链没有障碍。默认 DERP 地图指向 https://tailcat.dev/derpmap.json(免费、限速),也可以按 README 的链接用 tailscale/tailscale 仓库里的 cmd/derper 自建中继。另有实验性浏览器演示(地址 tailscale.github.io/tailcat,tailcat 编译为 WebAssembly),可与 CLI 互传文件和文本;但在 issue #4 的 WebRTC 支持落地前,浏览器流量只走 DERP。全部内容一经公开便在本趋势周期拿下 790 星、排名第 6。
为什么现在变热
- 单个趋势周期 790 星、排名第 6,而且是 Tailscale 组织下的全新仓库。
- 口号「Tailscale without Tailscale, by Tailscale」——厂商自己开源了一个绕开自家协调产品的工具。
- 零账号、零 root:纯用户态 Go 程序,不改路由表、不动 DNS。
- netcat 式接口:令牌进、管道出,外加 --serve 端口转发和 ssh 子命令。
- 浏览器 WebAssembly 演示(tailscale.github.io/tailcat)可直接与 CLI 互传文件和文本。
解决什么问题
- 跨网络跑裸 netcat,要么把 TCP 暴露到公网,要么先搭一条 VPN。
- 完整版 Tailscale 解决了加密,却要求账号、协调服务器和一套 tailnet。
- 取日志、临时暴露一个开发端口、要个五分钟 shell——这类一次性任务撑不起 VPN 的搭建与密钥分发成本。
- NAT 和 CGNAT 让机器直连天然不可靠,必须有中继兜底。
- 想在自己的 Go 程序里嵌入加密网格传输,过去等于硬啃 Tailscale 内部代码,而不是导入一个库。
工作原理
- 两台机器各自安装:go install github.com/tailscale/tailcat/cmd/tailcat@latest,或 nix run github:tailscale/tailcat / nix profile install github:tailscale/tailcat。
- 在机器 A 上直接运行 tailcat。它会选择一个引导用 DERP 中继(README 示例显示区域 302,旧金山),并打印出一个临时地址,例如 tcomFwWCCcjS5nKNqAod034nWoJZW0LZqDhhC8U_dKdnDRYQ8uNGFpGQEu。
- 把这个令牌带外送达——聊天、邮件,任何你已信任的渠道。这次人工交接,就是替代 Tailscale 控制平面的东西。
- 在机器 B 上运行 tailcat <token>,两机之间的 stdin/stdout 即被打通(echo hello | tailcat <token> 会在服务端输出 hello),全程端到端 WireGuard 加密。
- magicsock 尝试 NAT 穿透,可能的话升级为直连 UDP,DERP 始终是最后兜底。tailcat ping --until-direct 会报告每个 pong 走的路径,例如 pong in 42.1ms via DERP(sfo)。
- stdio 之外:--serve=8080,8443(或 --serve=all)把本地 TCP 端口经隧道暴露出去;--serve=no-auth-ssh 配合 tailcat ssh <token> [命令] 则可在 Linux/macOS 上提供无需密钥的 shell。
命令面:来自 README 的完整接口
- 无参数运行 tailcat:启动监听、打印临时地址、阻塞等待客户端。
- tailcat <token>:连接对端,在两机之间打通 stdin/stdout。
- tailcat --serve=8080,8443 或 --serve=all:转发本地 TCP 端口;客户端用 tailcat tcXXXXXXXXX 8080 拨入,可在隧道里直接跑原始 HTTP。
- tailcat --serve=no-auth-ssh(Linux/macOS)配合 tailcat ssh tcXXXXXXXXX 或 tailcat ssh tcXXXXXXXXX ls -la;若要真认证,README 建议改用 tailcat --serve=22 代理到系统 SSH 服务。
- tailcat ping --until-direct <token>:每个 pong 报告走的是 DERP 还是直连(示例输出:pong in 42.1ms via DERP(sfo));--timeout 默认 10 秒,找不到直连路径时以非零码退出。
- README 记录的安装途径:go install github.com/tailscale/tailcat/cmd/tailcat@latest、nix run github:tailscale/tailcat、nix profile install github:tailscale/tailcat。
架构拆解:混搭版保留了 Tailscale 的哪些部分
- 保留的数据面:magicsock 的用户态 WireGuard 栈、点对点加密隧道、DERP(既是 NAT 打洞旁路信道,也是最后兜底中继)。
- 删掉的控制面:没有协调服务器、没有 tailnet、没有节点注册表——连接元数据随令牌带外传递。
- 库与 CLI 分离:CLI 在 cmd/tailcat;库可按 github.com/tailscale/tailcat 导入,并有 pkg.go.dev 文档。
- 纯用户态:不需要 root/管理员,不改路由表和 DNS;go.mod 依赖 gvisor.dev/gvisor,与用户态网络栈承担隧道处理的判断一致。
- 中继配置:默认 DERP 地图是 https://tailcat.dev/derpmap.json(免费、限速);README 链接到 tailscale/tailscale 的 cmd/derper 用于自建中继。
- 浏览器演示:tailcat 编译为 WebAssembly,部署在 tailscale.github.io/tailcat,可与 CLI 互操作;在 issue #4 的 WebRTC 支持落地前,浏览器流量仅走 DERP、无法直连。
维护风险:依赖它之前先看 go.mod
- 硬依赖 tailscale.com v1.101.0-pre.0.20260720143344-246c82a658b3——是预发布快照,不是正式打 tag 的版本。
- go.mod 声明需要 Go 1.26.5;其余锁定项包括 gvisor.dev/gvisor v0.0.0-20260224225140-573d5e7127a8、承担 SSH 路径的 github.com/tailscale/gliderssh,以及 golang.org/x/crypto v0.54.0。
- README 自己把浏览器 WebAssembly 演示标注为「experimental」,浏览器直连要等 issue #4。
- 许可证为 BSD 3-Clause(Copyright (c) 2020 Tailscale Inc & contributors)——宽松许可、便于引入,只需常规署名。
- 默认运行依赖 Tailscale 运营的免费限速 DERP 中继,除非自己部署 derper;源包中尚无发布说明或变更日志。
谁适合关注
适合关注
- 两台自己掌控、当下就需要加密管道的机器:日志、数据库转储、快速文件搬运。
- 临时性或锁死的主机:装不了 VPN 客户端、也拿不到 root。
- 没有公网 IP 时,经 --serve 临时把开发端口穿出 NAT,由客户端持令牌拨入。
- 令牌分发比密钥分发更省事时,用 tailcat ssh 拿一次性交互 shell。
- 想让 Go 程序直接内置 WireGuard 加密传输:导入 github.com/tailscale/tailcat 库即可。
- 在受限网络里,用 WebAssembly 浏览器演示向 CLI 对端传文件或文本。
可以先跳过
- 长期站点互联——应该用带控制面和 ACL 的完整版 Tailscale。
- 令牌可能外泄的场景:持有令牌就是全部鉴权,no-auth-ssh 模式下令牌等于 shell。
- 流量绝不允许经过第三方中继的环境:默认 DERP 地图指向 Tailscale 运营的中继(自建 derper 是缓解办法)。
- 需要锁定正式版本依赖链的生产服务;go.mod 目前锁定的是 -pre 版 tailscale.com 快照。
- 要求身份绑定、审计日志、可按用户吊销权限的合规场景。
风险与注意事项
加密内核与 Tailscale 正式产品同源,但 tailcat 本身是个年轻的混搭项目:依赖预发布版快照,鉴权模型坍缩为单个共享令牌。
- go.mod 锁定 tailscale.com v1.101.0-pre.0.20260720143344-246c82a658b3,是预发布快照而非正式版本。
- --serve=no-auth-ssh 运行无认证 SSH 服务;连接令牌是通往命令执行的唯一关卡。
- 默认 DERP 地图(https://tailcat.dev/derpmap.json)指向 Tailscale 运营的免费限速中继,其条款可能变化。
- 浏览器演示被明确标注为实验性;浏览器直连路径要等 issue #4(WebRTC)。
- 源包中没有发布版或变更日志——成熟度信号来自厂商出品与 790 星,而非版本历史。
- 全部流量端到端 WireGuard 加密;DERP 中继看到的只是密文,穿透成功后的连接是点对点直连 UDP。
- 不需要 root/管理员权限,不改路由表和 DNS——用户态 Go 二进制对宿主机的影响面很小。
- 临时令牌是无记名凭证:谁拿到谁就能连。你为它选的带外传递渠道,本身就是安全边界的一部分。
- no-auth-ssh 模式下,令牌持有者即可执行命令(tailcat ssh <token> ls -la);README 给出的缓解办法是改用 --serve=22 代理系统 SSH 以获得真认证。
- 浏览器演示流量仅经 DERP 中继、无直连,直到 issue #4 的 WebRTC 支持落地。
- 自建 tailscale/tailscale 里的 cmd/derper,即可摆脱对 Tailscale 免费限速中继设施的依赖。
替代方案比较
| 方案 | 适用场景 | 代价 |
|---|---|---|
Tailscale(完整产品) | 需要基于身份的持久组网,有 ACL、tailnet 和设备管理,而不是一次性管道。 | 个人使用免费;组织版付费 |
| 主要是把一个文件一次性发给对方,需要中继兜底且不想手工传递令牌。 | 开源、免费 | |
netcat(nc) | 两台机器已在同一网络或 VPN 内,只缺一条裸 TCP/UDP 管道。 | 免费;多数类 Unix 系统预装 |
ngrok | 需要稳定公网 HTTPS 地址来做演示或收 webhook,而非点对点管道。 | 免费层加商业订阅 |
SSH + rsync/scp | 两端都归你管、密钥分发已解决,且需要久经考验的文件传输工具。 | 免费;系统自带标准工具 |
这个趋势说明了什么
在 Go 二进制里内置加密传输
库可按 github.com/tailscale/tailcat 导入,而 go.mod 显示重活由 tailscale.com 加 gVisor 承担——程序不必发布 VPN 安装器、不必改宿主路由表,就能获得带 DERP 兜底的 WireGuard 隧道。
写一个两文件的 Go 程序,把本地读取流经 tailcat 库发给对端,再用 tailcat ping --until-direct 确认路径是否从 DERP(sfo) 升级为直连。
用浏览器投递取代远程协助传文件
tailscale.github.io/tailcat 的 WebAssembly 演示已能向 CLI 对端发送文件和文本;让非技术用户打开一个网页,比带着他配 SSH 密钥省事得多。
一台机器打开演示页,另一台跑 tailcat 服务端,传输一个 100 MB 文件,并记录在 issue #4 落地前全程走中继时的吞吐。
把自建中继当作信任边界
默认 DERP 地图是 https://tailcat.dev/derpmap.json,README 链接到 cmd/derper 供自建中继,可让全部引导流量留在你能审计的基础设施内。
在一台主机上部署 derper,用自定义 DERP 地图让两端都指向它,再用 tailcat ping --until-direct 验证直连升级。
RepoDaily 判断
tailcat 是少见的「厂商亲自删掉自家产品」的混搭之作:Tailscale 的 WireGuard 数据面、netcat 式令牌交换、零账号、零 root。临时加密管道尽管用;但在 go.mod 仍锁定预发布版 tailscale.com 快照期间,别把 no-auth SSH 或任何长期负载托付给它。