前一篇《开发者利器!一款好用的内网穿透开源工具 ztm 快速体验》使用了 zt-tunnel,本篇将探索 ztm 默认内置的 zt-proxy app。
官方文档中对于 zt-tunnel 和 zt-proxy 的描述如下:
- zt-tunnel: A zero-trust tunnel that eliminates physical distance limitations, allowing you to access your devices from anywhere. For example, you can run zt-tunnel on your home computer and access it from your office computer. zt-tunnel integrates the intranet penetration function from version 0.0.4 into a service + port model, transforming it into outbound and inbound tunnel modes, making device access easier.
- zt-proxy: A zero-trust proxy that allows you to access your devices from anywhere. For example, you can run zt-proxy on your home computer and access all your devices from your office computer, as if they were in the same local area network.
一开始我不太理解它俩的区别,我询问了一下 Gemini-1.5-Pro,得到的回复如下:
zt-tunnel 和 zt-proxy 主要区别在于它们的功能和使用场景:
- zt-tunnel (零信任隧道): 创建一个点对点的加密隧道,用于访问单个设备。它就像一条专线,连接你的办公电脑和你家里的电脑。你可以在家里的电脑上运行 zt-tunnel,然后从办公室的电脑通过这条隧道访问家里的电脑,如同两台电脑在同一个局域网内。 zt-tunnel 从 0.0.4 版本开始整合了内网穿透功能,使其能够进行双向连接(进出站隧道模式)。
- zt-proxy (零信任代理): 允许你通过家里的电脑作为代理,访问家里局域网内的所有设备。它更像一个网关,让你从办公室的电脑访问家里整个网络。你可以在家里的电脑上运行 zt-proxy,然后从办公室的电脑访问家里所有连接到相同局域网的设备,如同你的办公电脑也连接到家里的局域网一样。
简单来说:
- zt-tunnel: 用于访问单个设备,点对点连接。
- zt-proxy: 用于访问整个局域网。
打个比方:
假设你家里有一台电脑和一台打印机。
- 使用 zt-tunnel,你可以从办公室访问家里的电脑,但不能直接访问打印机。
- 使用 zt-proxy,你可以从办公室访问家里的电脑,也可以直接访问打印机,就像你在家里一样。
这下明白了!所以在第一篇的实验环境中,我可以将台式机作为 zt-proxy,就能直接访问 Ubuntu 虚拟机的服务了,我设计的实验环境如下:
- 云服务器:Ubuntu 22.04,作为 ztm hub,用来转发流量;
- 笔记本(IP:192.168.1.156):要求能访问互联网,ztm agent 节点,作为 ztm mesh 的 root 用户,用来对其他 ztm agent 签发证书,以及作为发起请求的机器;
- Ubuntu 虚拟机(IP:192.168.2.137):Ubuntu 22.04,ztm agent 节点,用来部署测试服务;
- 台式机(IP:192.168.1.2):Windows 10,ztm agent 节点,用来运行 zt-proxy。
这里笔记本和台式机是同一个网段,可以互相访问,Ubuntu 虚拟机和台式机是使用 NAT 模式,只能从台式机访问到 Ubuntu 虚拟机,笔记本无法访问 Ubuntu 虚拟机。
另外需要注意,Ubuntu 上部署的测试服务,在本文的环境中,需要监听 0.0.0.0,而在上一篇中,它可以监听 127.0.0.1。
关于 ztm hub 以及 ztm 命令行的部署就不再叙述,可以参考第一篇,我在这之前把 Windows 虚拟机的 Agent 和 Ubuntu 虚拟机的 Agent 都退出了 Mesh,清理了一下环境。
台式机
安装 ztm 后启动,按照以下步骤,创建 zt-proxy:
笔记本
第一种方式,我们可以通过设置浏览器的代理服务器,完成访问:
第二种方式,我们可以使用 curl 的代理服务器参数,完成访问:
~ curl -x 192.168.1.2:5000 http://192.168.2.137:5000
{"message":"Hello World!"}