临时连两台机器,怎么这么麻烦?
想从笔记本 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 官方文档把丑话说得很直白,我替你划重点:
- 托管中继记 metadata 日志。官方明说 hosted relay service “keeps metadata logs and isn’t intended for privacy”。数据面有 WireGuard 加密,但连接元数据(谁连了谁、什么时候)对中继运营方可见。
- 限流 + 无 SLA + 随时吊销。公共 DERP 中继是免费限流的,没有可用性承诺,“may revoke access at any time, for any reason”。
- 无 API/CLI 稳定性承诺。Go API、CLI flag、wire format 都可能变。写进自动化脚本里的命令,明天可能就不认了。
- 要隐私或吞吐,自己跑 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 且可吊销。关键生产路径请谨慎,或自建中继并锁定版本。