小天管理 发表于 2024年6月19日 发表于 2024年6月19日 入手极空间 Z4Pro 快两个周了,使用体验文章还得再等一等,多一些深度体验的时间。到目前来看,还是很满意的。 虽然演示里用上 NAS 来运行 Docker ,实际上即使没有 NAS 设备,只要网络中存在任何可以运行 ZTM 组件的设备,都可以实现远程访问。 背景 今天来说说极空间的远程访问功能,产品页面对远程访问的描述是: 让极空间真正成为你家庭中的网络设备控制中心: 无需公网 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 包含了几个核心组件: 流量转发程序 ZTM Agent:部署在要打通的网络,可以部署在个人计算机、服务器、边缘或者端侧设备中。用于连接 ZTM Hub 发起加密隧道,将设备的流量安全地转发到 Hub 。 流量转发集群 ZTM Hub:与每个 Agent 建立加密隧道,转发来自 Agent 的请求,实现多点接入和高可用性。 证书管理服务器 ZTM CA:证书管理服务器。用于签发证书、吊销证书以及验证 Agent 用于访问的 TLS 证书。 方案 在远程访问中,我们需要在极空间中安装 ZTM Agent 。其主动与部署在公有云的 ZTM Hub 建立加密隧道,然后将家庭网络中的服务注册到 Hub 。 位于另一个网络中的电脑或者任意服务器,同样安装 ZTM Agent ,在成功与 Hub 建立隧道后,就可以发现其他 Agent 注册的服务。然后就可以通过创建端口将发现的服务映射到本地。 接下来就开始我们的演示! 演示 在演示中我们将会用台有公网 IP 的云主机,可以购买云厂商 99 元的主机,通常都有 3-4M 的带宽,用来转发 1080P 甚至低码流的 4K 也没压力。 在极空间中,我们是使用 Docker 来运行 ZTM Agent 。Agent 占用的资源非常低,我为容器分配 0.5 核的 CPU 和 128M 的内存,如果流量不大可以分配更少的资源。 1. 运行 ZTM Hub 首先 ssh 到云主机,通过 ZTM CLI 安装 ZTM CA 和 Hub 。 当前最新的 ZTM 为 0.0.3 版本,通过下面的命令安装 CLI 。 ZTM_VERSION=0.0.3 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 ca --listen 127.0.0.1:9999 接下来是启动 Hub ,默认监听在 8888 端口,同样可以通过参数 --listen 来修改,这里我们使用默认值。 sudo ztm start hub 2. 为 Agent 颁发证书 Agent 与 Hub 建立 HTTP/2 的加密隧道,使用 mTLS 进行双向认证。使用 CA 服务为 Agent 颁发证书,格式为 ztm invite USERNAME --bootstrap HUB_PUBLIC_IP:PORT,这里我们为两个 Agent 颁发证书。将证书保存到 json 文件中并下载到本地,后面会用到。 注意:json 文件中包含了公钥和密钥,请妥善保存。如若遗失,通过 ztm evict USERNAME 吊销证书,然后颁发新的证书。 ztm invite home --bootstrap 13.229.223.113:8888 --output > home.json ztm invite macbook --bootstrap 13.229.223.113:8888 --output > macbook.json 3. 极空间 Agent 部署 访问极空间 Docker ,在仓库中搜索并下载 addozhang/ztm 镜像。若遇到镜像下载问题,可以从 这里 下载镜像 tar 文件并上传到极空间中,然后在 本地镜像中选择从极空间导入。 找到已经下载好的镜像,创建容器。 把前面颁发的证书 JSON 文件上传到极空间中,比如保存到存储的 /Docker/ZTM 目录中,然后在容器的文件夹路径中添加文件路径,装载到容器的 /tmp/ztm 中。 ZTM Agent 提供了 web 界面,为了方便使用可以将容器的 7777 端口映射到本地。 同样,为了便于容器外访问,将环境中的 LISTEN 修改为 0.0.0.0:7777,其他保持默认。 点击应用创建容器。 4. Agent 接入 Hub Agent 启动之后,最重要的一步就是将其连接到 ZTM Hub 。这里有两种方法:命令行和 Web 界面。 方法一:使用命令行 点击容器的 SSH 按钮,在弹窗中用户输入 ztm( ZTM 的运行不需要任何特权)。 在命令行窗口中执行下面的命令,与 Hub 建立安全隧道,命令格式 ztm join MESH_NAME --as AGENT_NAME --permit JSON_FILE。 ztm join my-hub --as zspace --permit /tmp/ztm/home.json 可通过命令 ztm get mesh 查看隧道状态。 注:通过 ztm left MESH_NAME 可以断开与 Hub 的连接。 方法二:使用 Web 界面 在浏览器中打开 http://<极空间 IP>:7777,如果是从外部访问可以使用极空间的远程访问功能添加新的连接:使用 http://127.0.0.1:7777 即可。 在 Meshes 标签页中点击 Join。 填入信息,并点击保存: Mesh 输入你想要的名字,比如 my-hub Permit 中点击 + 选择前面颁发的 home.json Join AS 输入你想要的名字,比如 zspace 保存后在 Meshes 标签页中可以看到刚添加的 Hub ,以及其状态。如果状态不是 Connected 请检查颁发的 JSON 文件的内容。 注:点击 Hub 右侧的三个点,可以修改或者断开连接。 5. 注册服务 想要从外部访问内网的服务,我们需要在内网的 Agent 上将服务注册到 Hub ,即创建两个服务。同样可以使用命令行,或者 Web 界面来操作。 方法一:使用命令行 命令格式为 ztm create service PROTOCOL/SERVICE_NAME --host SERVICE_IP --port SERVICE_PORT。这里我们准备了两个服务:OpenWrt 的 Web 后面和一台开启了远程访问的 Windows 电脑。 ztm create service tcp/openwrt-web --host 192.168.11.1 --port 80 ztm create service tcp/win-11 --host 192.168.11.184 --port 3389 使用命令 ztm get service 可以查看注册的服务。 注:通过 ztm delete service PROTOCOL/SERVICE_NAME 可以注销服务。 方法二:使用 Web 界面 在 Services 标签页中,点击 Create。 填入服务的相关信息,然后点击 Save 保存: Service 服务名,比如 openwrt-web Protocol 协议,选择服务对应的协议 TCP Host 服务地址,这里是 OpenWrt 的地址 192.168.11.1 Port服务端口, 这里是 80 使用同样的方式创建 win-11 服务: Service 服务名 win-11 Protocol 协议 TCP Host 服务地址 192.168.11.184 Port服务端口 3389 到此,我们已经完成了家庭网络服务的注册。要想从外部网络访问家庭网的服务,我们需要在外网的设备进行类似的操作。 6. 外网 Agent 部署 首先是安装 ZTM ,可以从 这里 下载对应平台的 CLI ,在 mac 平台有支持 x86 和 M 芯片的 CLI ,win 平台上也有对应的 exe 下载。 我在外网的设备是一台 MacBook ,下载的是 arm64 的 CLI 。 curl -sL https://github.com/flomesh-io/ztm/releases/download/v0.0.3/ztm-aio-v0.0.3-macos-arm64.tar.gz | tar -zxf - sudo cp bin/ztm /usr/local/bin/ztm 安装好 CLI 之后,执行命令启动 Agent ,会自动加入系统服务。 sudo ztm start agent 7. Agent 接入 Hub 重复同样的步骤,使用前面颁发的证书 macbook.json 与 Hub 建立隧道。可以使用命令行或者 Web 界面( http://localhost:7777 )来操作。这里使用命令行来完成,Web 界面的操作可以参考前面的操作。 ztm join my-hub --as macbook --permit macbook.json 检查隧道状态。 ztm get mesh NAME JOINED AS USER HUBS STATUS my-hub macbook macbook 13.229.223.113:8888 Connected 8. 映射服务到本地 服务的映射也是两种方式:命令行和 Web 界面。 方法一:使用命令行 通过下面命令可以查看 Hub 上注册的服务。 ztm get service NAME ENDPOINTS tcp/openwrt-web 1 tcp/win-11 1 服务的映射是通过创建一个本地端口来实现的,格式为 ztm create port LAN_IP/PROTOCOL/PORT --service PROTOCL/NAME。 ztm create port 127.0.0.1/tcp/18080 --service tcp/openwrt-web ztm create port 127.0.0.1/tcp/13389 --service tcp/win-11 检查创建的端口。 ztm get port NAME ENDPOINT SERVICE 127.0.0.1/tcp/18080 macbook tcp/openwrt-web 127.0.0.1/tcp/13389 macbook tcp/win-11 注:通过 ztm delete port LAN_IP/PROTOCOL/PORT 可以删除端口。 方法二:使用 Web 界面 在 Services 标签页中找到发现的服务,点击服务右上角的按钮。 在弹窗中输入端口的信息。 IP 服务的映射地址,如果仅提供当前设备访问,选择 127.0.0.1;如果要提供给局域网的其他设备访问,输入当前设备的局域网地址。 Port 服务的映射端口,不能与其他端口冲突,这里我们将 openwrt-web 服务映射到 18080 端口。 同样的方式,映射 win-11 服务到本地 13389 端口。 在 Local Ports 标签中可以看到创建的两个本地端口。 9. 测试 远程访问 OpenWrt 在浏览器中打开 http://localhost:18080 可以成功访问远程的 OpenWrt 。 远程访问 Windows 设备 使用 macOS 平台上的软件 Microsoft Remote Desktop 来访问远程桌面。 添加一台 PC ,地址为 127.0.0.1:13389,账号为 Windows 设备的登录账号。 登录完成后,就可以远程来操作 Windows 设备了。
已推荐帖子