使用 ZTM 增强极空间 NAS 的远程访问能力

使用 ZTM 增强极空间 NAS 的远程访问能力

更新于 2024/10/23,试用于 ZTM 版本 v0.3.1。

今天这篇来说说极空间的远程访问功能,产品页面对远程访问的描述是:

让极空间真正成为你家庭中的网络设备控制中心:

  • 无需公网 IP 就可以便捷访问家中路由器、Docker 和智能家居
  • 不用学习网络知识也可以以轻松使用,快速添加
  • 自定义名称及颜色,方便查找与收藏,配合容器使用,扩展丰富功能

比如借助该功能可以方便地管理家中的软路由,非常适合没有公网 IP 的用户。

然后就可以点击新添加的链接,在极空间的窗口内访问 OpenWrt 的 web 控制台了。

细心的你可能会注意到它只能支持 HTTP 协议(官方的功能介绍),只能通过极空间窗口访问,并且只能为管理员账号下使用该功能,灵活性大打折扣。比如远程访问家中的 Windows 设备(Windows 的远程桌面协议 RDP);或者需要 ssh 远程访问 HomeLab 虚拟机。

这些极空间的远程访问就无能为力了,这里就要用到 ZTM 了。

关于 ZTM

ZTM(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 的架构和概念介绍,可以查看 官方文档

方案

在远程访问中,我们需要在极空间中安装 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 CLIZTM App

一、环境搭建

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。下载 对应 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 的协议,确保更广泛的应用场景和更高的兼容性。

(转载本站文章请注明作者和出处乱世浮生,请勿用于任何商业用途)

comments powered by Disqus