← 返回全部文章

不用注册账号,发一个 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 限制客户端公钥。

实践中可以遵循三条规则:

  1. 临时任务优先使用默认的临时密钥;
  2. 不要把 Token 放进公开聊天、截图或日志;
  3. 暴露端口前,先确认服务本身有没有身份认证。

直连失败怎么办?

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。项目免费使用,但第三方依赖、所连接的服务和你暴露的具体业务,都要分别检查许可与安全要求。

建议从这个实验开始

不要一上来就开出口节点,也不要先尝试暴露一堆端口。

最稳妥的顺序是:

  1. 两台自己的机器安装 Tailcat;
  2. 用临时 Token 完成 echo hello 传输;
  3. ping 观察连接是直连还是中继;
  4. 再转发一个没有敏感数据的本地测试端口;
  5. 最后才研究保存密钥、客户端白名单和自建 DERP。

它最大的价值,不是又提供了一个“翻墙式”的工具,而是把一次性的点对点连接做得足够简单:发一个 Token,建立一条端到端加密隧道,任务结束后关掉进程,连接也随之消失。

项目地址: