Tailcat:不用账号、不用注册,两台机器 30 秒直连——Tailscale 把「临时内网」做成了开源工具

阅读时长:10分钟

临时连两台机器,怎么这么麻烦?

想从笔记本 SSH 到机房那台机器,注册 Tailscale 账号、配 ACL、装客户端、等审批,一套流程走下来半小时没了。用 ngrok?本地服务直接暴露到公网,心里发毛。用 frp?得先有一台自己的公网服务器,维护成本摆在那。

2026 年 8 月,Tailscale 在 TailscaleUp 大会上开源了 Tailcat——第三条路:像 netcat 一样,跑在 Tailscale 数据面上,但没有 Tailscale 的控制平面。没有账号、没有 IP 分配、没有 ACL、不需要 root,两台机器靠一个临时 token 就能建立 WireGuard 加密的点对点隧道。进程一退,连接即死,地址作废,像从没存在过。

TL;DR

  • Tailcat 是 Tailscale 2026 年 8 月开源的工具:netcat 式管道,跑在 Tailscale 数据面(WireGuard 加密 + DERP NAT 穿透)上,砍掉了整个控制平面
  • 没有账号、没有 IP 分配、没有 ACL、不需要 root,纯 userspace,不改路由表和 DNS
  • 默认 ephemeral key:每次启动生成全新密钥,进程退出即失效,地址没人见过
  • 支持 stdin/stdout 管道、端口转发、免密 SSH 服务、SOCKS5 代理、exit node 模式
  • 托管 DERP 中继记 metadata 日志、限流、无 SLA、随时可能吊销——要隐私或吞吐就自己跑 derper

Tailcat 到底是什么?——把 Tailscale 拆成两半,只留数据面

先建立一个认知框架。Tailscale 其实是两件事的合体:

  • 控制面:账号体系、设备身份、ACL 策略、MagicDNS、审计日志。它决定"谁能连谁"。
  • 数据面:magicsock、WireGuard 加密、DERP 中继。它负责"连上之后怎么传数据"——点对点 WireGuard 隧道,DERP 做 NAT 穿透的信令通道,穿透失败时兜底中继。

Tailscale 把这两层都做成了产品。而 Tailcat 做的事情很极端:只留数据面,把控制面整个扔掉。

官方原话是 “a remix of Tailscale open source pieces to act like netcat, but over Tailscale’s data plane, without Tailscale’s control plane”。连接所需的元数据(密钥、DERP 区域等)全部带外交换(out-of-band)——你把 token 发给对方,对方就能连。没有服务器在中间登记"你是谁"。

打个比方:Tailscale 像物业登记的小区,每家每户有门牌号、有访客登记制度;Tailcat 像两个人之间的碰头暗号——对上暗号就能说上话,暗号作废就谁也不认识谁。

为什么"没有控制平面"反而成了卖点?

控制面不是免费的。它意味着注册、登录、SSO 对接、设备审批、策略配置——对"长期组网"来说是治理能力,对"临时连一下"来说就是纯负担。

Tailcat 官方页面列了一张"没有控制平面所以没有什么"的清单,读起来反而很痛快:

  • 没有 IP 地址分配
  • 没有账号(没有登录、密码、SSO)
  • 没有用户、没有管理员
  • 没有管理控制、没有治理

代价与收益是一体两面:安全边界从"身份体系"收缩到了"token 本身"。谁拿到地址,谁就能连。所以 Tailcat 把密钥生命周期做成了核心特性——这正是它叫"即用即抛"的原因。

实战:从一条命令到 SSH 直连

上手第一步是理解密钥。Tailcat 的密钥分两种,搞懂它们的区别,这个工具就懂了一半:

# 生成一对新密钥(默认 ephemeral:只在内存里,进程退出即失效)
tailcat genkey

# 列出本地已保存的密钥
tailcat genkey --list

# 删除名为 default 的保存密钥
tailcat genkey --delete --key=default

几个关键行为:

  • ephemeral key 是默认。每次 serve 都生成一个没人见过的新地址,进程一死,地址随之作废。这就是"临时内网直连"的字面实现。
  • saved key 用 genkey 存盘,地址跨重启保持稳定。但注意:任何曾经收到过这个地址的人,都能重连你未来的服务——除非用 --allow 限定客户端。
  • default 是魔法 key 名。一旦它存在,裸跑 tailcat 会静默使用它而不是生成 ephemeral key。想强制临时连接用 --key=new,想用别的保存密钥用 --key=<name>。
  • PSK 默认开启。WireGuard 预共享密钥提供后量子保护,也防止公共 DERP 运营方通过观察公钥推断拓扑。--psk=false 只为兼容 v0.5.0 及更早客户端,会去掉这层保护,别随便关。

服务端起 SSH 服务时,文档给出的关键 flag 是 --allow(限定允许的客户端)和 --ssh-authorized-keys(指定授权公钥)。客户端侧的流程是:生成客户端身份密钥对,把公钥给服务端,之后客户端模式会自动使用保存的 client-default 密钥——其他人的握手会被静默忽略,他们连 SSH 服务存在都发现不了。

更优雅的是 DNS 发布:把 tailcat 地址写成一条 TXT 记录,

my-server.example.com. 300 IN TXT "tailcat=tcXXXXXXXXX"

客户端直接查 DNS 就能拿到地址,连"怎么把 token 传过去"都省了。

Tailcat vs Tailscale vs ngrok vs frp:一张表说清选型

这四个工具经常被混着问,但它们的"连接单元"根本不同:

工具 本质 需要账号/服务器 连接生命周期 适用场景
Tailscale mesh VPN(控制面 + 数据面) 需要账号 持久 长期设备组网、团队内网、审计治理
Tailcat 数据面直连管道 都不需要 临时,进程死即失效 临时 SSH、CI job、AI agent 临时接入
ngrok 公网隧道 需要账号 进程存活期 把本地服务暴露到公网
frp 自建反向隧道 需要自己的服务器 进程存活期 自建穿透、长期暴露内网服务

一句话版本:要治理用 Tailscale,要快速连接用 Tailcat,要暴露公网用 ngrok,要自建穿透用 frp。

ephemeral key 的账本:地址是怎么"活"过来的

这是 Tailcat 最值得玩味的设计。把密钥生命周期拆开看:

  • ephemeral(默认):密钥只存在于内存,地址每次全新,进程退出 = 地址死亡。没有残留、没有历史、没有"上次那个地址还能用"的意外。适合 CI job、沙箱环境、一次性远程开发。
  • saved(genkey 存盘):地址稳定,跨重启可用。适合"这台机器我隔三差五要连"的场景。但风险随之而来:地址一旦给出去,就永久有效,除非用 --allow 收窄入口。
  • PSK(默认开):在 WireGuard 之上再加一层预共享密钥,抗后量子,也防 DERP 运营方做流量分析。

我的建议:默认就让它临时。需要稳定地址时再 genkey 存盘,并且立刻配 --allow。别图省事把 saved key 当默认——那等于把"临时内网"用成了"永久后门"。

这些坑,上手前必须知道

Tailcat 官方文档把丑话说得很直白,我替你划重点:

  1. 托管中继记 metadata 日志。官方明说 hosted relay service “keeps metadata logs and isn’t intended for privacy”。数据面有 WireGuard 加密,但连接元数据(谁连了谁、什么时候)对中继运营方可见。
  2. 限流 + 无 SLA + 随时吊销。公共 DERP 中继是免费限流的,没有可用性承诺,“may revoke access at any time, for any reason”。
  3. 无 API/CLI 稳定性承诺。Go API、CLI flag、wire format 都可能变。写进自动化脚本里的命令,明天可能就不认了。
  4. 要隐私或吞吐,自己跑 derper。Tailscale 支持 Custom DERPs,自建中继才能同时解决日志和性能两个问题。

什么时候该用,什么时候别用

用 Tailcat 的场景:临时远程开发、应急 SSH、文件传输、CI job 连内网依赖、游戏联机、沙箱环境、以及——官方特别提到——软件或 AI agent 需要临时访问某台机器而不加入你的网络。这个场景在 agent 时代只会越来越多。

别用 Tailcat 的场景:长期组网、多用户协作、需要审计和权限治理。这些是 Tailscale 的主场,Tailcat 故意不做。

常见问题

Q1: Tailcat 需要 Tailscale 账号吗?

A: 不需要。没有控制平面就没有账号体系,连接靠 token 带外交换,连 Tailscale 客户端都不用装。

Q2: 需要 root 权限吗?

A: 不需要。纯 userspace 实现,不改路由表、不改 DNS,普通用户就能跑。

Q3: ephemeral key 和 saved key 到底差在哪?

A: ephemeral 每次新生成、进程死即失效,零残留;saved 存盘、地址稳定,但任何拿到过地址的人都能重连,必须配 --allow 限制。

Q4: 托管中继安全吗?

A: 数据面是 WireGuard 加密的,但中继方记 metadata 日志,官方明说不适合隐私场景。要隐私就自建 derper。

Q5: Tailcat 能替代 Tailscale 吗?

A: 不能。它故意砍掉了身份、ACL、设备管理和持久访问。要治理用 Tailscale,要快速连接用 Tailcat。

Q6: 都能拿它干什么?

A: stdin/stdout 管道、端口转发、免密 SSH 服务、SOCKS5 代理、exit node 模式、自带 DERP 中继、DNS TXT 发布地址。CLI 和 Go 库两种用法都支持。

Q7: 稳定性如何,能上生产吗?

A: 官方明说无 API/CLI 稳定性承诺、wire format 可能变、公共中继无 SLA 且可吊销。关键生产路径请谨慎,或自建中继并锁定版本。

相关阅读

© 2026 softon.top

本站已稳定运行 275 天 15 小时 · 128 篇文章

使用 Hugo 构建 主题 Stack 由 Jimmy 设计 由 softon 魔改

最近构建时间:2026-10-03 23:33:52 CST