善忘技术夹 Logo
善忘技术夹
开源前沿 · 150 阅读

Tailscale 开源 Tailcat:不用注册,临时内网穿透用完即停

Tailscale 开源 Tailcat:不用注册,临时内网穿透用完即停

本地开发服务已经跑起来了,想让另一台电脑看一下页面;云端的测试脚本需要临时调用自己电脑上的接口;两台设备只打算连通一会儿,任务结束就断开。

这类需求的麻烦,往往出在建立连接的准备工作上。

Tailscale 官方开源的 Tailcat,提供了一条很轻的上手路径:一端启动服务,拿到一个 tc… 地址;另一端用这个地址连接。整个过程不需要注册 Tailscale 账号,也不用把两台设备加入 Tailnet。

它最值得关注的场景,是临时打通两台设备之间的连接。官方项目说明

本文依据 2026 年 10 月 4 日核验的官方资料撰写,教程以已发布的 v0.7.0 为基准。命令已对照文档和源码核验,尚未进行双机连通实测。

把连接能力装进一个命令行工具

官方把 Tailcat 描述为一个类似 netcat 的工具。netcat 可以把网络连接接到程序的输入和输出上,Tailcat 则借用了 Tailscale 底层的连接能力,让两端通过 WireGuard 加密隧道通信。

这里有一个关键区别:Tailcat 使用 Tailscale 的数据传输组件,但不使用它的账号控制平面。连接所需的信息由你自己交给另一端。

建立连接时,DERP 会先协助两端联络。网络条件允许,就尝试升级为 UDP 点对点直连;打洞失败,则通过 DERP 中继传输。隧道内容在两端之间加密,不会因为经过中继就变成明文。官方连接原理

Tailcat 两端连接与 DERP 路径示意

原创示意图,非产品截图。DERP 协助初始建连,后续可能直连,也可能继续走中继。

它以用户态库和命令行工具运行,不修改系统路由表或 DNS,运行 Tailcat 本身也不要求管理员权限。不过,安装方式仍可能有自己的权限要求。

上手:让另一台电脑访问你的本地网页

假设电脑 A 已经运行了一个开发服务,地址是 http://127.0.0.1:3000/。现在想让电脑 B 临时访问它。

两台电脑都需要安装 Tailcat。已经安装 Scoop 的 Windows 用户,可以执行:

scoop install tailcat

已经安装 Homebrew 的 macOS 用户,可以执行:

brew install tailcat

Windows 和 Linux 也可以从 官方 Releases 获取对应架构的预编译包;Linux 另有 .deb 和 .rpm 包。安装选择见 官方安装说明。

Windows 手动解压后,可以把程序所在目录加入 PATH。如果直接在解压目录的 PowerShell 中操作,则把下文命令里的 tailcat 换成 .\tailcat.exe。安装后运行 tailcat version,确认自己使用的版本。

第一步:电脑 A 共享指定端口

先确认 A 自己能够访问 3000 端口上的网页,再运行:

tailcat serve --key=new 3000

终端会打印本次连接的 tc… 地址。复制完整地址,通过私密渠道发给电脑 B 的使用者,并保持这个进程运行。

--key=new 明确要求使用新的临时密钥。这个参数很适合”用完即停”的场景,后面会解释原因。

第二步:电脑 B 建立本地转发

在 B 上运行下面的命令,把 tcXXXXXXXXX 替换为 A 实际打印的完整地址:

tailcat forward tcXXXXXXXXX 13000:3000

然后在 B 的浏览器打开 http://127.0.0.1:13000/。

B 的 13000 端口需要未被占用。如果已占用,可以把映射左侧换成其他空闲端口,并同步修改浏览器访问地址;右侧的 3000 仍然对应 A 的服务端口。

这条映射的意思是:B 的本地 13000 端口,通过 Tailcat 连接到 A 的 3000 端口。forward 默认监听 B 的 127.0.0.1,网页请求进入这个本地端口后,再沿隧道到达 A 上的服务。官方转发示例

双方的 Tailcat 进程都要保持运行。结束时,在 B 上停止转发,再在 A 上停止共享进程;上述命令使用的临时密钥会随 A 的进程退出而丢弃。

注意,tc… 地址是 Tailcat 使用的连接信息,不是浏览器直接打开的公网网址。这个教程需要另一端运行 Tailcat,不能把地址发出去就期待任意浏览器访问网页。

为什么值得放进 AI Agent 的工具箱

如果 Agent 在云端执行测试,而测试对象只运行在你的电脑上,就需要一条连接到本地服务的通道。

从公开接口看,Tailcat 对这类自动化流程有两个实用的设计。

服务端可以把监听地址以 JSON 写到标准输出,方便脚本读取:

tailcat --json serve --key=new 3000

它也可以直接打印二进制内嵌的 README,让拿到程序的 Agent 读取用法:

tailcat readme

这里的 --json 是服务端监听地址的输出选项,不能理解成所有子命令都提供 JSON 接口。官方 CLI 定义

可以据此设计一种工作流:共享一个测试端口,把地址传给远端 Agent,完成调用后结束进程。这是基于工具能力的应用设想,还需要自己处理地址传递、连接失败和任务结束后的清理。

它的吸引力在于连接生命周期容易跟着任务走。Agent 只获得这次工作需要的端口,也更容易知道什么时候该断开。

“即用即抛”的三个边界

临时地址,要看密钥怎么生成

默认情况下,服务端使用内存中的临时密钥,退出后本次地址失效。但如果你保存过名为 default 的密钥,后续启动会自动复用它,之前分享的地址也可能继续有效。

这就是教程显式使用 --key=new 的原因。Tailcat 支持临时连接,也支持持久密钥;是否”用完即抛”,取决于实际启动方式。官方密钥管理说明

免登录,仍然需要管好访问凭证

Tailcat 地址默认包含 WireGuard 预共享密钥,通常应当作为访问凭证保密。加密解决传输保护,地址交给谁、共享什么服务,仍由你决定。

不要把真实地址贴进公开文章、截图或日志。第一次尝试,可以只共享一个测试端口;确实需要限制客户端身份时,再研究官方的 --allow 配置。

官方安全文档也明确说明:Tailcat 的外层封装仍是早期实验工具,最初主要面向同一个人运行两端的场景。尤其涉及 shell、可写目录或出口节点时,需要认真评估另一端是否可信。官方安全说明

免账号也不等于匿名。官方页面说明,托管中继会保留元数据日志;端到端加密保护通信内容,不能据此推断连接活动没有记录。官方隐私相关说明

公共中继,有服务边界

公共 DERP 中继免费提供,但有限速,没有可用性 SLA 或吞吐量保证,官方也保留撤回访问的权利。项目的 API、命令行和通信格式同样没有稳定性承诺;需要掌控中继条件时,可以研究自建 DERP。官方稳定性说明

所以,它很适合拿来尝试临时调试、个人设备互连和自动化测试。我的判断是,需要长期在线、多人权限管理或稳定公网入口的服务,应该继续按这些要求选择连接方案。

Tailcat 的价值很具体:只想临时访问一个服务时,可以先用一个命令开启共享,再让另一端建立转发,任务结束就停止进程。对于这样的需求,它值得留在开发者的工具箱里。


获取与来源:Tailscale 官方页面 · GitHub 仓库 · BSD-3-Clause 许可证

选题线索来自 小众软件的 Tailcat 介绍,本文的命令和产品边界以官方 v0.7.0 文档及源码为依据。

善忘技术夹|善忘是一种境界|学习|分享|创造美好生活

关注「善忘技术夹」全媒体矩阵

扫描上方宣传海报二维码,第一时间获取最新技术文章、开源项目与免安装小程序体验。

善忘技术夹 微信公众号宣传图
微信公众号 (扫码关注)
善忘技术夹 微信小程序宣传图
微信小程序 (扫码即用)