返回

文章详情

Tailcat:几秒钟内安全隧道(Tailscale)

Hacker News2026年8月26日 17:42

"没有 Tailscale 的 Tailscale,由 Tailscale 提供"。Tailcat 是 Tailscale 开源组件的重混音,旨在像 netcat 一样工作,但通过 Tailscale 的数据平面,而不是 Tailscale 的控制平面。Tailscale 的数据平面(内部实现为 magicsock)为两个机器之间提供点对点的 WireGuard® 加密隧道,并使用 DERP 作为 NAT 穿透通信的侧通道,以及在 NAT 穿透失败时的最终中继。Tailcat 交换所有连接元数据的方法均不依赖于 Tailscale 的控制平面,可以根据您的需求自由选择。tailcat CLI(位于 cmd/tailcat)基于 tailcat Go 库构建(可以作为 github.com/tailscale/tailcat 导入)。无论您是将 tailcat 作为 CLI 工具还是库使用,一端运行 tailcat 服务器(监听器)并返回一个短连接令牌。另一端将该令牌传递给 tailcat 的客户端以建立连接。两者之间的所有流量都通过 WireGuard 进行端到端加密。最初的连接通过 Tailscale 的 DERP 中继网络引导,然后 magicsock 执行 NAT 穿透,当可能时(通常是)升级到直接的点对点 UDP 连接。您不需要 Tailscale 账户、机器上的 root/admin 权限(它不更改您机器的路由表、DNS 等)。它只是一个用户空间库和 CLI 工具,而且全部开源。您可以使用我们的免费速率限制的 DERP 中继(默认的 DERP 地图是 https://tailcat.dev/derpmap.json),或者您可以运行自己的中继。使用方法 在两台机器之间在 stdin/stdout 中传递数据。服务器启动时打印出其临时地址:$ tailcat # 选择的引导中继区域 302,旧金山 # 🐈 服务器正在监听新地址:tcomFwWCCcjS5nKNqAod034nWoJZW0LZqDhhC8U_dKdnDRYQ8uNGFpGQEu(挂起,等待...) 然后客户端可以:$ echo hello | tailcat tcomFwWCCcjS5nKNqAod034nWoJZW0LZqDhhC8U_dKdnDRYQ8uNGFpGQEu $ 然后服务器解除阻塞:$ tailcat # 选择的引导中继区域 302,旧金山 # 🐈 服务器正在监听新地址:tcomFwWCCcjS5nKNqAod034nWoJZW0LZqDhhC8U_dKdnDRYQ8uNGFpGQEu hello $ 通过隧道暴露本地端口,或者您可以提供一个本地 TCP 端口,转发到 localhost:$ tailcat --serve=8080,8443 # 或者 --serve=all # 🐈 服务器正在监听新地址:tcXXXXXXXXX 然后客户端:$ tailcat tcXXXXXXXXX 8080 GET / HTTP/1.1 Host: foo HTTP/1.1 200 OK .... 无认证 SSH 服务器 在 Linux 和 macOS 上,您也可以无认证运行 SSH 服务器。(如果您想要认证,您可以执行 tailcat --serve=22,并代理到您的系统 SSH 服务器)$ tailcat --serve=no-auth-ssh # 🐈 服务器正在监听新地址:tcXXXXXXXXX 而在客户端:$ tailcat ssh tcXXXXXXXXX $ tailcat ssh tcXXXXXXXXX ls -la 其他命令 ping 测试连接性;每个 pong 报告它是通过 DERP 中继还是直接路径到达的。 --until-direct 继续 ping(最长 --timeout,默认为 10s),直到直接路径有效,如果没有有效路径则退出非零:$ tailcat ping --until-direct <token> pong 在 42.1ms 通过 DERP(sfo) 到达 pong 在 1.2ms 通过 203.0.113.7:41641 使用 SOCKS5 代理通过隧道运行命令:$ tailcat socks <token> curl http://server.tailcat:8081/ 令牌也可以直接作为 URL 主机名使用:SOCKS 代理识别并拨打它们,因此令牌参数是可选的。(令牌区分大小写;这可与 curl 和大多数 CLI 工具一起工作,但与浏览器不兼容,因为浏览器会将主机名转换为小写。)$ tailcat socks curl http://<token>:8081/ 作为出口节点,使客户端能够访问服务器的网络:$ tailcat --serve=exit-node 解析连接令牌并打印其内容(服务器的 WireGuard 公钥和 DERP 信息)作为 JSON,而无需连接到任何东西:$ tailcat parse tcomFwWCCcjS5nKNqAod034nWoJZW0LZqDhhC8U_dKdnDRYQ8uNGFpGQEu { "ServerPublic": "nodekey:9c8d2e6728da80a1dd37e275a82595b42d9a838610bc53f74a7670d1610f2e34", "RegionID": 302 } 将短令牌(通过 ID 引用 DERP 区域,要求客户端获取 DERP 地图)解析为一个更长的自包含令牌,内嵌 DERP 服务器信息,使客户端更快地连接:$ tailcat resolve tcomFwWCCcjS5nKNqAod034nWoJZW0LZqDhhC8U_dKdnDRYQ8uNGFpGQEu tcomFwWCCcjS5nKNqAod034nWoJZW0LZqDhhC8U_dKdnDRYQ8uNGFygaFhToGjYWhudGMzMDJhLmlwbi5kZXZhNG0yMDguMTExLjM5LjM4YTZzMjYwNzpmNzQwOjA6M2Y6OjcyMA 解析该解析后的令牌显示嵌入的 DERP 信息:$ tailcat parse tcomFwWCCcjS5nKNqAod034nWoJZW0LZqDhhC8U_dKdnDRYQ8uNGFygaFhToGjYWhudGMzMDJhLmlwbi5kZXZhNG0yMDguMTExLjM5LjM4YTZzMjYwNzpmNzQwOjA6M2Y6OjcyMA { "ServerPublic": "nodekey:9c8d2e6728da80a1dd37e275a82595b42d9a838610bc53f74a7670d1610f2e34", "Region": [{ "Nodes": [{ "HostName": "tc302a.ipn.dev", "IPv4": "208.111.39.38", "IPv6": "2607:f740:0:3f::720" }] }] } 服务器可以使用 --full-address 标志直接打印长的自包含形式。密钥管理 服务器的地址(连接令牌)来源于其 WireGuard 密钥,因此您使用的密钥决定了谁可以联系您:临时密钥(默认):每个服务器运行

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡