HeadlinesBriefing favicon HeadlinesBriefing.com

Tailcat:基于Tailscale数据平面的netcat

Hacker News •
×

Tailcat是Tailscale开源组件的重混,类似netcat,但使用Tailscale数据平面,无需控制平面。Tailscale的数据平面(内部称为magicsock)提供两台机器之间的点对点Wire Guard®加密隧道,DERP作为NAT打洞通信侧信道,以及NAT穿越失败时的最终中继。所有tailcat连接元数据均带外交换,方式由你决定,而非使用Tailscale控制平面。tailcat CLI(位于cmd/tailcat)基于tailcat Go库构建(可导入为github.com/tailscale/tailcat)。

无论你将tailcat用作CLI工具还是库,一侧运行tailcat服务器(监听器)并获得一个短连接令牌。另一侧将该令牌传递给tailcat客户端进行连接。两者之间的所有流量均通过Wire Guard进行端到端加密。初始连接通过Tailscale的DERP中继网络引导,然后magicsock执行NAT穿越,尽可能升级为直接的点对点UDP连接(通常如此!)。

你不需要Tailscale账户,也不需要机器上的root/管理员权限(它不会更改机器的路由表、DNS等)。它只是一个用户空间库和CLI工具。而且全部开源。你可以使用我们免费的限速DERP中继(默认DERP映射为https://tailcat.dev/derpmap.json),也可以运行自己的。

用法:在两台机器之间通过管道传输stdin/stdout。服务器启动,打印其临时地址:$ tailcat # 选择引导中继区域302,旧金山 # 服务器监听新地址:tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu (挂起,等待...)然后客户端可以:$ echo hello | tailcat tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu $ 然后服务器解除阻塞:$ tailcat # 选择引导中继区域302,旧金山 # 服务器监听新地址:tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu hello $ 通过隧道暴露本地端口或者你可以服务一个本地TCP端口,转发到localhost:$ tailcat --serve=8080,8443 # 或 --serve=all # 服务器监听新地址:tc XXXXXXXXX 然后客户端:$ tailcat tc XXXXXXXXX 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 # 服务器监听新地址:tc XXXXXXXXX 在客户端:$ tailcat ssh tc XXXXXXXXX $ tailcat ssh tc XXXXXXXXX ls -la 杂项命令Ping测试连通性;每个pong报告是通过DERP中继还是直接路径到达。--until-direct持续ping(最多--timeout,默认10秒)直到直接路径工作,如果不行则退出非零:$ tailcat ping --until-direct <token> pong in 42.1ms via DERP(sfo) pong in 1.2ms via 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 解析连接令牌并打印其内容(服务器的Wire Guard公钥和DERP信息)为JSON,不连接任何东西:$ tailcat parse tcom Fw WCCcj S5n KNq Aod034n Wo JZW0LZq Dhh C8U_d Kdn DRYQ8u NGFp GQEu {"Server Public": "nodekey:9c8d2e6728da80a1dd37e275a82595b42d9a838610bc53f74a7670d1610f2e34","Region ID": 302} 将短令牌(引用DERP区域ID,要求客户端获取DERP映射)解析为更长的自包含令牌,嵌入DERP服务器信息...