今天这篇来说说极空间的远程访问功能,产品页面对远程访问的描述是:
让极空间真正成为你家庭中的网络设备控制中心:
- 无需公网 IP 就可以便捷访问家中路由器、Docker 和智能家居
- 不用学习网络知识也可以以轻松使用,快速添加
- 自定义名称及颜色,方便查找与收藏,配合容器使用,扩展丰富功能
比如借助该功能可以方便地管理家中的软路由,非常适合没有公网 IP 的用户。
图片
然后就可以点击新添加的链接,在极空间的窗口内访问 OpenWrt 的 web 控制台了。
图片
细心的你可能会注意到它只能支持 HTTP 协议(官方的功能介绍[1]),只能通过极空间窗口访问,并且只能为管理员账号下使用该功能,灵活性大打折扣。比如远程访问家中的 Windows 设备(Windows 的远程桌面协议 RDP);或者需要 ssh 远程访问 HomeLab 虚拟机。
这些极空间的远程访问就无能为力了,这里就要用到 ZTM 了。
关于 ZTM
ZTM[2](Zero Trust Mesh)是一款开源的网络基础设施软件。它基于 HTTP/2 隧道构建,可以在任何类型的 IP 网络上运行,例如局域网、容器化网络和互联网等。
ZTM 可以在各种环境中使用,从连接家庭和工作场所的 2 节点个人网络,到连接全球办公室和分支机构的 10,000 节点企业网络。
ZTM 可以支持多种 CPU 架构,如 x86, ARM, MIPS, RISC-V, LoongArch 等,以及多种操作系统,如 Linux, Windows, macOS, FreeBSD, Android。
图片
ZTM 的两个重要组件 Hub 和 Agent,组建基于 HTTP/2 的隧道,通过隧道组成去中心化的网络基础设施。在这个高速的网络上,我们可以进行数据的安全传输。
- ZTM Agent:部署在需要接入零信任网络的设备上,包括个人计算机、服务器或边缘设备上,负责启动加密隧道并将设备的流量安全地转发到 ZTM Hub。
- ZTM Hub:分布式部署的接入点,分布式部署的接入点,与每个 Agent 建立加密隧道,转发来自 Agent 的请求,实现多点接入和高可用性。
更多关于 ZTM 的架构和概念介绍,可以查看 官方文档[3]。
方案
在远程访问中,我们需要在极空间中安装 ZTM Agent。其主动与部署在公有云的 ZTM Hub 建立加密隧道,然后将家庭网络中的服务注册到 Hub。
位于另一个网络中的电脑或者任意服务器,同样安装 ZTM Agent,在成功与 Hub 建立隧道后,就可以发现其他 Agent 注册的服务。然后就可以通过创建端口将发现的服务映射到本地。
图片
接下来就开始我们的演示!
演示
在演示中我们将会用台有公网 IP 的云主机,可以购买云厂商 99 元的主机,通常都有 3-4M 的带宽,用来转发 1080P 甚至低码流的 4K 也没压力。
在极空间中,我们是使用 Docker 来运行 ZTM Agent。Agent 占用的资源非常低,我为容器分配 0.5 核的 CPU 和 256M 的内存,如果流量不大可以分配更少的资源。
在操作 ZTM 时,可以通过命令行或者 Web 界面来实现,在下面的演示中我们会尽量使用 Web 界面,关于命令行的使用可以参考文档:ZTM CLI[4] 和 ZTM App[5]。
一、环境搭建
1. 运行 ZTM Hub
首先 ssh 到云主机,通过 ZTM CLI 安装 ZTM CA 和 Hub。 当前最新的 ZTM 为 0.3.1 版本,通过下面的命令安装 CLI。
ZTM_VERSION=0.3.1
curl -sL https://github.com/flomesh-io/ztm/releases/download/v${ZTM_VERSION}/ztm-aio-v${ZTM_VERSION}-generic_linux-x86_64.tar.gz | tar -zxf -
sudo cp bin/ztm /usr/local/bin/ztm
通过命令 ztm help 可以查看 CLI 的使用方法。
通过下面的命令启动 ZTM 的 CA 服务,非常简单。
sudo ztm start hub --listen 0.0.0.0:8888 --names 23.102.227.117:8888 --permit root.json
执行上面的命令之后,会在当前目录中创建一个 root.json 文件。这个文件中包含 root (ZTM 用户)用户的私钥,请妥善保管。
通过 systemctl 可以查看服务运行状态。
systemctl status ztm-hub
2. 极空间 Agent 部署
访问极空间 Docker,在仓库中搜索 flomesh/ztm-agent 镜像,下载最新的 0.3.1 版本。
图片
选择下载好的镜像创建容器。
图片
当上面获取的 root.json 许可文件上传到极空间中改名为 ztm-permit.json,这里我将其保存到存储的 /Docker/ZTM 目录中。然后在容器的文件夹路径中添加文件路径,装载到容器的 /tmp/ztm 中。
图片
将 ZTM Agent web 界面的 7777 端口映射到本地。
图片
在环境变量配置中,进行如下配置。
图片
点击应用创建容器。
图片
在浏览器中使用极空间的 IP 地址访问 ZTM 的 web 页面。在 Meshes 界面中,可以看到极空间已经接入到我们自建的 Mesh 网络中。
图片
3. 启动外网 Agent
接下来在本地电脑 MacBook 上启动 ZTM Agent。下载[6] 对应 macOS 版本的 ZTM,通过下面的命令启动。
ztm start agent
4. 外网 Agent 接入 Mesh 网络
在浏览器中打开 http://127.0.0.1:7777/。
图片
选择 Join Mesh 接入 Mesh 网络。在表单中配置 Mesh 名 ztm-cloud 和 Endpoint 名 macbook,右侧的 Permit 栏中选中前面下载的许可文件。
图片
点击 Save 保存后,可以看到已经成功接入到 Mesh 网络中。
图片
在 Endpoints 界面,可以查看已经接入到 Mesh 网络的 Endpoint。
图片
环境搭建完毕后,接下来我们可以基于 ZTM 的 Mesh 网络来实现跨网络的访问。
二、访问内网服务
1. 打开隧道出口
在内网(家庭网络)访问极空间 Agent 的 ZTM Web 页面。
图片
在 Apps 界面中选择 Tunnel, 然后点击右上角的 + 号添加新的隧道。提供隧道名 openwrt,添加 Outbound。
图片
将 Outbound 指向 OpenWrt 192.168.11.1:80,点击 √ 保存。
图片
最后点击 Create 保存后,就可以看到创建好的隧道。
图片
2. 打开隧道入口
让我们切换到外网也就是 Macbook 的 Agent 来配置隧道入口。
在 Apps 界面打开 tunnel,可以看到 Mesh 网络中已经存在的隧道 openwrt,这个隧道已经存在一个出口。
图片
编辑该隧道,添加入口,将 Listens 设置为 127.0.0.1:8080。
图片
保存之后,可以看到隧道上已打开了入口和出口。
图片
3. 测试
在 MacBook 上打开 http://127.0.0.1:8080 可以直接访问家庭网络中的 OpenWrt,这样外出时也可以方便地进行管理了。
图片
三、远程访问 Windows 设备
回到文章开头提到的远程访问 Windows 设备的场景,对 ZTM 来说一样轻松。
1. 打开隧道出口
在极空间的 Agent 上创建一个新的名为 win-11 的隧道,配置出口为 192.168.11.184:3389。
图片
2. 打开隧道入口
在 MacBook 的 Agent 上找到 win-11 隧道,添加隧道入口 127.0.0.1:13389。
图片
3. 测试
使用 macOS 平台上的软件 Microsoft Remote Desktop 来访问远程桌面。
添加一台 PC,地址为 127.0.0.1:13389,账号为 Windows 设备的登录账号。
图片
登录完成后,就可以远程来操作 Windows 设备了。
图片
图片
总结
在本次演示中,展示了如何通过 ZTM 增强极空间 NAS 的远程访问功能。即使没有 NAS 设备,只要网络中存在任何可以运行 ZTM Agent 的设备,都可以实现远程访问。ZTM 支持所有基于 TCP 或 UDP 的协议,确保更广泛的应用场景和更高的兼容性。
参考资料
[1] 官方的功能介绍: https://www.zspace.cn/help/?articleId=100160
[2] ZTM: https://github.com/flomesh-io/ztm
[3] 官方文档: https://github.com/flomesh-io/ztm/blob/main/docs/Architecture-Concepts_zh.md
[4] ZTM CLI: https://github.com/flomesh-io/ztm/blob/main/docs/CLI_zh.md
[5] ZTM App: https://github.com/flomesh-io/ztm/blob/main/docs/ZT-App_zh.md
[6] 下载: https://github.com/flomesh-io/ztm/releases