不用注册账号,发一个 Token 就能连两台电脑:Tailcat 到底怎么用?
Tailscale 开源的 Tailcat,把 WireGuard、NAT 穿透和 DERP 中继装进一个用户态命令行工具,适合临时传文件、转发端口和远程调试。

有时候,你只是想让两台机器临时连起来:传一个文件、测一个端口、进一次 SSH,或者把本地服务给另一台电脑用。
传统做法往往要注册账号、安装整套 VPN、改路由,甚至申请公网端口。Tailcat 提供了另一种思路:一台机器启动服务,生成一个短 Token;另一台机器拿着 Token 连接。连接建立后,两边通过加密隧道通信。
它的定位可以概括成一句话:像 netcat 一样直接,但使用了 Tailscale 的加密数据面,不依赖 Tailscale 控制面。
Tailcat 解决了什么问题?
Tailcat 是 Tailscale 开源组件的一种重新组合,底层使用了几块成熟能力:
- WireGuard:负责端到端加密;
- magicsock:尝试发现网络路径并进行 NAT 穿透;
- DERP:负责初始碰面,也在直连失败时充当中继;
- Netstack:在用户态处理网络连接,不依赖系统的 TUN/TAP 设备。
因此,它不需要在系统里创建 VPN 网卡,也不会改机器的路由表或 DNS 配置。普通用户权限就能运行,适合一次性的点对点连接。

最简单的用法:两台机器传一句话
先在其中一台机器上安装命令行工具:
go install github.com/tailscale/tailcat/cmd/tailcat@latest
当前仓库的 go.mod 要求 Go 1.26.5。安装前先确认本机 Go 版本满足要求。
1. 在服务端启动 Tailcat
tailcat
程序会生成一个临时密钥,并打印一串连接 Token。服务端会停在那里等待客户端连接。
2. 在客户端使用 Token
把 Token 交给另一台机器后,执行:
echo hello | tailcat <Token>
服务端会收到 hello。这就是最小实验:没有账号登录,没有端口映射配置,也不需要把服务端暴露到公网。
第一次体验建议就做这个测试。它能同时验证安装、Token 传递、DERP 碰面和数据传输是否正常。
还能怎么玩?
把本地端口临时转出去
假设服务端本地有一个 Web 服务运行在 8080 端口,可以让 Tailcat 代为转发:
# 服务端
tailcat --serve=8080
客户端拿到 Token 后:
tailcat <Token> 8080
客户端发出的 TCP 请求会通过隧道到达服务端的本地端口。这个用法适合临时调试和局域网外的点对点访问,但不建议直接拿来发布管理后台或敏感服务。
临时 SSH
Tailcat 提供了一个免认证 SSH 模式:
tailcat --serve=no-auth-ssh
客户端连接:
tailcat ssh <Token>
这个功能适合隔离环境里的快速演示,不适合直接用于长期远程管理。若要保留 SSH 的身份认证,可以转发系统已有的 22 端口,再由 SSH 自己负责登录验证:
tailcat --serve=22
tailcat ssh <Token>
测试直连还是中继
tailcat ping --until-direct <Token>
如果两台机器可以完成 UDP 打洞,流量会尽量升级到点对点直连;如果网络条件不允许,就继续通过 DERP 中继。输出会显示本次响应是经由中继,还是走了直连路径。
当 SOCKS5 代理使用
tailcat socks <Token> curl http://server.tailcat:8081/
也可以让服务端充当出口节点:
tailcat --serve=exit-node
这类功能能力更强,风险也更高。不要对不熟悉的 Token、陌生网络或他人的机器做测试。
Token 不是普通邀请码
Tailcat 的 Token 里包含服务端的 WireGuard 公钥和 DERP 信息。拿到 Token 的人,至少知道如何尝试连接对应服务端。
默认情况下,每次启动都会生成临时密钥。进程退出后,这个 Token 就失效了。这是比较安全的使用方式,适合临时共享。
如果使用 tailcat genkey 生成保存到磁盘的密钥,Token 会在重启后继续有效。此时,过去拿到过 Token 的人,未来仍可能尝试连接,除非你使用 --allow 限制客户端公钥。
实践中可以遵循三条规则:
- 临时任务优先使用默认的临时密钥;
- 不要把 Token 放进公开聊天、截图或日志;
- 暴露端口前,先确认服务本身有没有身份认证。
直连失败怎么办?
Tailcat 先通过 DERP 中继让两台机器碰面,然后尝试 NAT 穿透。如果直连成功,后续数据通常会走点对点 UDP;如果失败,就继续使用 DERP。
仓库提供了公共的、限速的 DERP 中继,也支持自己搭建 DERP。自建中继需要域名和 TLS 证书,适合对网络路径、吞吐量或长期可用性有要求的场景。
浏览器 WebAssembly Demo 目前只能通过 DERP 中继通信,在 WebRTC 支持加入前不会直接连接两端。它可以和命令行工具互传文本或文件,但更适合体验功能,不要把它当成生产文件传输系统。
它适合谁?
Tailcat 适合:
- 临时连接两台自己的电脑;
- 远程调试一个本地 TCP 服务;
- 在授权环境中做点对点网络实验;
- 想研究 WireGuard、NAT 穿透和用户态网络栈的开发者。
它不适合替代企业 VPN、长期远程办公网络或成熟的身份管理系统。项目当前没有 API、CLI 参数、输出格式和线协议的稳定性承诺,公共 DERP 中继也没有 SLA 或固定吞吐保证。
另外,仓库当前许可证是 BSD 3-Clause,不是 MIT。项目免费使用,但第三方依赖、所连接的服务和你暴露的具体业务,都要分别检查许可与安全要求。
建议从这个实验开始
不要一上来就开出口节点,也不要先尝试暴露一堆端口。
最稳妥的顺序是:
- 两台自己的机器安装 Tailcat;
- 用临时 Token 完成
echo hello传输; - 用
ping观察连接是直连还是中继; - 再转发一个没有敏感数据的本地测试端口;
- 最后才研究保存密钥、客户端白名单和自建 DERP。
它最大的价值,不是又提供了一个“翻墙式”的工具,而是把一次性的点对点连接做得足够简单:发一个 Token,建立一条端到端加密隧道,任务结束后关掉进程,连接也随之消失。
项目地址:
- GitHub:https://github.com/tailscale/tailcat
- 浏览器 Demo:https://tailscale.github.io/tailcat/
- 官方 DERP 配置:https://tailcat.dev/derpmap.json