Tailcat 详细部署教程:无需控制平面的安全隧道
Tailcat 是 Tailscale 官方开源的一款工具,它复用了 Tailscale 强大的数据平面(基于 WireGuard 的加密通道和 NAT 穿透能力),但完全去除了其控制平面(无需账号、登录或复杂配置)。你可以把它看作一个加密的、能打洞的 netcat。它非常适合临时连接、远程调试、安全文件传输等场景。
本教程将带你全面了解并部署 Tailcat。
1. 核心概念与原理
- Tailcat 地址 (Token):这是核心凭证,包含了服务器的 WireGuard 公钥、预共享密钥和 DERP 中继信息。它是一次性的(默认)或可持久化的。请务必像对待密码一样妥善保管此地址,因为拥有它就意味着能够建立连接。
- 数据平面与控制平面:传统 Tailscale 需要一个中心化的控制服务器来协调节点和分发密钥。Tailcat 省去了这一步,所有必要的连接元数据都通过 Tailcat 地址“带外”交换,实现了去中心化。
- 连接流程:服务器启动后生成地址,客户端通过该地址,借助 DERP 中继服务器完成初始信令交换和 NAT 穿透。成功后会升级为点对点(P2P)直连,如果打洞失败,流量会回退到 DERP 中继,确保连接始终可用。
2. 准备工作
- 操作系统:Linux、macOS、Windows。
- 网络环境:无需公网 IP,机器只要能联网即可。
3. 安装 Tailcat
官方提供了多种安装方式,这里介绍最通用的几种:
方法一:使用 Go 安装 (推荐)
这是最直接的方式,前提是系统已安装 Go 1.21 或更高版本。
1 | go install github.com/tailscale/tailcat/cmd/tailcat@latest |
安装后,tailcat 可执行文件通常位于 $GOPATH/bin 或 ~/go/bin 目录下,请确保该目录已添加到系统的 PATH 环境变量中。
方法二:使用 Nix (NixOS 或已安装 Nix 的系统)
可以直接运行,无需安装:
1 | nix run github:tailscale/tailcat |
或者安装到用户 profile:
1 | nix profile install github:tailscale/tailcat |
方法三:使用 Docker
适合容器化环境或不想在主机安装的场景:
1 | docker pull ghcr.io/tailscale/tailcat:latest |
4. 基础用法:点对点数据传输
步骤 1:在服务端启动监听
在需要被访问的机器上,直接运行 tailcat 命令:
1 | tailcat |
你会看到类似如下的输出:
1 | # Selected bootstrap relay region 302, San Francisco |
程序会挂起等待连接。请复制 tc... 开头的完整地址。
步骤 2:在客户端发送数据
在另一台机器上,使用 echo 或 cat 将数据通过管道传递给 tailcat 命令,后面跟上刚才复制的地址:
1 | echo "Hello, Tailcat!" | tailcat tcomFwWCCcjS5nKNqAod034nWoJZW0LZqDhhC8U_dKdnDRYQ8uNGFpGQEu |
步骤 3:查看结果
此时,服务端的终端会接收到并打印出 Hello, Tailcat!,然后连接关闭。这是一个最基础的双向管道,你也可以将标准输入重定向到文件来实现文件传输。
5. 高级用法:暴露本地端口
tailcat 可以将远程机器上的端口映射到本地,让你访问远程服务就像访问本地一样。
服务端:暴露服务
假设你想在服务端暴露 8080 端口上的 Web 服务:
1 | tailcat serve 8080 |
或者暴露多个端口:
1 | tailcat serve 8080,8443 |
服务端会生成一个 Tailcat 地址。
客户端:连接并转发
在客户端,使用 forward 子命令将远程端口映射到本地。例如,将远程的 8080 端口映射到本地的 18080 端口:
1 | tailcat forward <服务端地址> 18080:8080 |
现在,你在本地浏览器访问 http://127.0.0.1:18080,实际上就是通过加密隧道访问远程机器的 8080 端口服务。
6. SSH 远程访问
Tailcat 内置了 SSH 服务,让你可以不用在远程机器上配置和暴露 SSH 端口,即可安全连接。
服务端:启动无认证 SSH 服务
在远程机器(服务端)上,使用 no-auth-ssh 参数启动服务。注意:此模式下,Tailcat 地址本身就是唯一的凭证,获得地址的人即可获得 Shell 访问权限,务必通过安全渠道分享。
1 | tailcat serve no-auth-ssh |
客户端:使用 SSH 连接
在本地机器上,使用 ssh 子命令并传入服务端的 Tailcat 地址即可建立连接:
1 | tailcat ssh <服务端地址> |
你也可以直接执行远程命令:
1 | tailcat ssh <服务端地址> ls -la |
进阶:配置 ~/.ssh/config 以获得原生体验
你可以在本地 ~/.ssh/config 文件中添加如下配置,这样就可以使用 ssh grokbot 命令直接连接,而无需每次都输入长地址:
1 | Host grokbot |
7. 高级配置:持久化密钥与客户端认证
默认情况下,每次运行 tailcat serve 都会生成一个临时的、一次性密钥对。如果需要地址保持不变(例如用于 DNS 发布),可以使用持久化密钥。
生成持久化服务器密钥
1 | tailcat genkey --fixed-region |
--fixed-region会探测并固定最优的 DERP 中继区域,确保地址长期有效。- 密钥默认保存在
~/.config/tailcat/keys/default.private.json。 - 之后直接运行
tailcat serve就会自动使用这个持久化密钥和地址。
生成客户端密钥并启用服务端认证
如果你需要更严格的安全控制,可以生成一个客户端密钥,并在服务端设置允许列表,只有持有该密钥的客户端才能连接。
在客户端,生成一个专用的客户端密钥对:
1
tailcat genkey --client
命令会输出该客户端的公钥,类似:
nodekey:cfb6bf...ddfd16。在服务端,启动服务时通过
--allow参数指定允许连接的客户端公钥:1
tailcat serve --allow=nodekey:cfb6bf...ddfd16 22
这样,即使有人截获了你的 Tailcat 地址,如果没有对应的私钥,也无法建立连接。
8. 故障排查与优化
检查连接路径:使用
ping子命令测试连通性,它会显示数据包是经由 DERP 中继还是 P2P 直连,以及延迟信息。1
tailcat ping <服务端地址>
自建 DERP 中继:如果你不满足于 Tailscale 提供的公共 DERP 中继(可能因位于海外导致延迟高),可以自行搭建。这需要在你的云服务器上部署
derper服务并配置好域名和 TLS 证书。之后,在生成 Tailcat 地址时指定你自己的 DERP 服务器:1
tailcat genkey --region=derp.yourdomain.com
这样生成的地址将只使用你的私有中继,流量全程可控。
总结
| 场景 | 服务端命令 | 客户端命令 |
|---|---|---|
| 简单数据传输 | tailcat |
`echo “data” |
| 暴露 Web 服务 | tailcat serve 8080 |
tailcat forward <地址> 18080:8080 |
| 无认证 SSH | tailcat serve no-auth-ssh |
tailcat ssh <地址> |
| 带认证 SSH | tailcat serve --allow=nodekey:... 22 |
tailcat ssh <地址> |
| 测试连通性 | - | tailcat ping <地址> |
| 生成持久化地址 | tailcat genkey --fixed-region |
tailcat genkey --client |
Tailcat 提供了一种极其轻量、安全且灵活的方式来建立跨网络的点对点加密连接。希望这份指南能帮助你快速上手这个强大的工具。









