版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

简介

Zero Trust Mesh 是一个建立在 HTTP/2 隧道上的,能跨网关和防火墙的,支持 TLS 加密和基于证书的访问控制等功能的网络工具。

核心特点:安全、便携、易用、高效,完美符合 Zero Trust 的理念。背后使用的是 Flomesh 的 Pipy 项目。

ZTM 的核心是三个组件:CA, Hub 和 Agent,它们之间的关系如下:

  • 位于数据中心的 ZTM 节点负责进行权限验证(CA),也可充当仓库(Hub)节点
  • 不同终端(Endpoint)上的 ZTM 代理(Agent)负责相应服务(Service)的发布和订阅

作为不同的组件,CA,Hub 和 Agent 可分布在一个或多个节点,取决于你的网络拓扑和安全架构。 这里把 Hub 当做 DockerHub 或者 GitHub 的 Hub 会更容易理解一些, 但实际上组网的模型抽象是 Mesh, 而 Hub 可以只是 Mesh 中的一个节点。

不同的 Mesh 里面会有不同的 Agent 发布的 Service,其它的 Agent 可以通过 CA 颁发的证书信息加入任意 Mesh 并按需订阅 Service。由于采用了 RSA + mTLS 双向认证,所以不用担心中间人攻击。 而且 Agent 可以采用任意的用户身份(类似QQ 号与昵称)加入 Mesh,这样就不用担心真实身份泄露。

能看到哪些 Service 实际取决于你所加入的 Mesh。 而 Mesh 也是可以有多个的,非常灵活 (虽然机制灵活,但使用不当也是可以引入混乱的)。 可以类比成 Discord 的设计,一个服务器可以有不同的 Channel(Mesh), User Role(Nick Name) 和 Bot(Service)。

对于服务的有关描述,我使用的术语是发布(Publish)和订阅(Subscribe), 目前官方 CLI 统一使用创建(Create)来描述这两个操作,因为逻辑的确是一样的。 但这描述比较偏实现,不太符合用户的直观感受。 将来改成推送(Push)和拉取(Pull),也说得过去。

已弃置-场景一:办公和家庭互访

  1. 在公网(117.50.188.201)部署 ztm 的 CA 和 HUB 组件。其中 CA 组件用于生成和验证用户的配置文件,该配置文件集成证书信息。HUB 组件开发对外映射端口(3790),提供接入服务。
  2. 在公网环境的主机上通过 ztm 生成 office 和 home 环境对应的配置文件(json)
  3. 在 home 环境中启动 Agent 
  4. 在 home 环换使用 home.json 配置文件加入 mesh (注意 mesh 名称
  5. 在 home 环境发布服务,该服务可供其它配置好的 agent 访问
  6. 在 office 环境中启动 Agent
  7. 在 office 环境中使用 office.json 配置文件加入 mesh (和第4点保持一致)
  8. 在 office 环境创建本地端口,链接到 home 环境的服务上
  9. 在 office 环境通过访问创建的端口打开 home 环境发布的服务

已弃置-公网服务器配置

下载安装 ztm 并配置 CA 和 HUB 端,需要注意 HUB 端需要对应公网 IP 和端口

代码块
languagebash
ZTM_VERSION=0.0.4
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 -
cp bin/ztm /usr/sbin/ztm

mkdir -p ~/data/ztm
ztm start ca --listen 127.0.0.1:9999 --database ~/data/ztm/ca.db
ztm start hub --listen 0.0.0.0:3790

systemctl status ztm-ca
systemctl status ztm-hub

ztm invite home --bootstrap 117.50.188.201:3790 > ~/data/ztm/home.json
ztm invite office --bootstrap 117.50.188.201:3790 > ~/data/ztm/office.json  

# 如果不小心输错了 IP 地址,先删除用户,再执行上面的命令
ztm evict nas

已弃置-Home 环境配置

  1. 在 home 环境安装 ztm
  2. 将 home.json 文件复制到 home 环境的主机
  3. agent 模式运行
  4. 注册到 mesh 
  5. 添加服务(发布可以访问的端口)
代码块
languagebash
ZTM_VERSION=0.0.4
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 -
cp bin/ztm /usr/sbin/ztm

ztm start agent --listen 127.0.0.1:7777 --database ~/data/ztm/agent.db
ztm join zyfeng-hub --as home --permit ~/data/ztm/home.json
zte get mesh

ztm create service tcp/firefox --host 192.168.77.102 --port 8006
ztm create service tcp/routeros --host 192.168.77.1 --port 80
ztm get service

已弃置-Office 环境配置

  1. 在 office 环境安装 ztm
  2. 将 office.json 文件复制到 office 环境的主机
  3. agent 模式运行
  4. 注册到 mesh 
  5. 添加本地端口(映射到 home 的远程服务端口)
代码块
languagebash
ZTM_VERSION=0.0.4
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 -
cp bin/ztm /usr/sbin/ztm

ztm start agent --listen 127.0.0.1:7777 --database ~/data/ztm/agent.db
ztm join zyfeng-hub --as office --permit ~/data/ztm/office.json
zte get mesh

ztm create port 192.168.14.83/tcp/20080 --service tcp/routeros
ztm create port 192.168.14.83/tcp/20081 --service tcp/firefox
ztm create port 192.168.14.83/tcp/22222 --service tcp/ssh117

在 Office 环境输入 Office 主机地址+本地端口实现访问 Home 环境的端口服务

已弃置-Windows 环境

 PowerShell 可以用命令更新当前 Windows User PATH 环境变量:

代码块
languagepowershell
[Environment]::SetEnvironmentVariable("Path", `
[Environment]::GetEnvironmentVariable("Path", `
[EnvironmentVariableTarget]::User) + ";D:\DevEnv\ZTM\bin", `
[EnvironmentVariableTarget]::User)

重新打开 PowerShell 窗口,就可以直接运行 ztm 命令了。

代码块
languagepowershell
ztm run agent --listen 127.0.0.1:7777 --database "D:\DevEnv\ZTM\data\agent.db"
ztm join zyfeng-hub --as office-2 --permit "D:\DevEnv\ZTM\data\office2.json"
ztm create service tcp/rdp-1483 --host 192.168.14.83 --port 3389

批处理方式

代码块
languagetext
@echo off
start /B > "c:\intel\bin\ztmagent.log" 
start cmd /k c:\intel\bin\ztm.exe run agent --listen 127.0.0.1:7777 --database "c:\intel\bin\agent.db"
choice /t 3 /d y
start cmd /k c:\intel\bin\ztm.exe join zyfeng-hub --as office2 --permit "c:\intel\bin\office2.json"
start cmd /k c:\intel\bin\ztm.exe create service tcp/rdp-1483 --host 192.168.14.83 --port 3389

ztm-0.1.0 版本

ztm-0.1.0 版本开始合并了 CA 和 Hub 角色同时内置了4种应用

  • Tunnel - 建立安全的 TCP/UDP 通道Establish secure TCP/UDP tunnels between endpoints
  • Proxy - 不同终端直接的代理访问 A SOCKS/HTTP forward proxy that takes in traffic from one endpoint and forward out via another endpoint
  • Script - 远程执行的脚本 Execute PipyJS scripts remotely on an endpoint
  • Terminal - 终端访问 Remote access to the shell on an endpoint

draw.io Diagram
bordertrue
diagramNameZTM-office-home
simpleViewerfalse
width
linksauto
tbstyletop
lboxtrue
diagramWidth541
revision1

公网服务器配置

正常情况下无需在公网服务器启用 Agent ,可以让公网服务器仅承担连接和认证的功能

代码块
languagebash
sudo /usr/local/ztm/ztm start hub --listen 0.0.0.0:3790 --names frps.waringid.me:3790 --permit root.json
sudo ztm start agent --listen 127.0.0.1:7777 --data /usr/local/ztm/  #可选
sudo ztm join zyfeng-hub --as server117 --permit root.json           #可选  

Office 环境-Linux

代码块
languagebash
ztm start agent --listen 127.0.0.1:7777 --data /usr/local/ztm/ 
ztm join zyfeng-hub --as office-182-53 --permit root.json  
ztm tunnel open in tcp/home-rdp --listen 0.0.0.0:3390 #本地端口
ztm ep home-77-102 tunnel open out tcp/home-rdp --targettargets 192.168.77.21:3389 #需要访问的远程端口

Office 环境 - Windows

代码块
languagepowershell
[Environment]::SetEnvironmentVariable("Path", `
[Environment]::GetEnvironmentVariable("Path", `
[EnvironmentVariableTarget]::User) + ";D:\DevEnv\ZTM\bin", `
[EnvironmentVariableTarget]::User)
代码块
languagepowershell
@echo off
start cmd /k c:\intel\bin\ztm.exe run agent --listen 127.0.0.1:7777 --data "c:\intel\bin"
choice /t 3 /d y
start cmd /k c:\intel\bin\ztm.exe join zyfeng-hub --as office-14-83 --permit "c:\intel\bin\root.json"

Home 环境

代码块
languagebash
ztm start agent --listen 127.0.0.1:7777 --data /usr/local/ztm/ 
ztm join zyfeng-hub --as home-77-102 --permit root.json  
ztm tunnel open in tcp/office-rdp --listen 0.0.0.0:3390 #本地端口
ztm ep office-14-83 tunnel open out tcp/office-rdp --targettargets 192.168.14.83:3389 #需要访问的远程端口

参考

目录