通过 ZTM 实现安全 RDP 远程桌面连接

RDP (Remote Desktop Protocol) 是微软开发的远程桌面共享软件,是 Windows 自带的远程桌面工具。RDP 默认通过 3389 端口通讯,但要求客户端和服务端之间直接连接。通过使用 ZTM[1],RDP 客户端和服务端可以在没有直接网络连接的情况下进行通信,例如在出差时使用酒店 Wi-Fi 访问办公室的 Windows 桌面电脑。“ZTM+RDP”方案可以替代 TeamViewer、ToDesk、向日葵等远程访问工具,最大的优势在于安全性和隐私保护。TeamViewer、ToDesk、向日葵等工具需要用户注册并使用其 SaaS 服务,RDP 客户端和服务端的通信会经过这些 SaaS 服务器,存在信息泄漏的可能性。而“ZTM+RDP”方案完全运行在用户自己控制的环境中,包括中转服务器(运行 ZTM Hub)也是用户自己管理并只有自己拥有访问权,从而极大地保护了用户隐私,提供了更高的安全能力。

本文将介绍如何在咖啡厅 Wi-Fi 环境下,使用 macOS 的 ZTM 客户端,通过 ZTM 远程访问办公室的 Windows 桌面电脑 RDP。为了构建 ZTM 环境,我们采用 AWS 上的 ZTM AMI,一键完成 ZTM Hub 的部署。具体步骤如下:

1.在 AWS 使用 AMI 部署 ZTM Hub2.在 macOS 安装 ZTM,并连接到 ZTM Hub3.在 Windows 安装 ZTM,并连接到 ZTM Hub4.在 macOS 的 ZTM 控制台配置隧道,打通 macOS 到 Windows 的 RDP 连接5.验证连接

1. 使用 AMI 部署 ZTM Hub

1.登陆 AWS 控制台,选择“创建实例”。在这个例子中,我们选择新加坡区域。2.在选择 AMI 的时候,输入 ZTM,并进行“搜索”,如图所示:

ec5132caa733ff0a9f2ff940f8e707ae.jpeg

1.在搜索结果页面可以看到 Flomesh ZTM 的 AMI 信息,点击“Select”按钮,如图所示:

0464f2194ee65a53073083816a3cdd56.jpeg

1.返回创建实例页面后,默认类型是 T3.Small,如果只是个人使用,可以选择更小的实例类型,比如 T3.Micro,如图所示:

df3ae6caecf12e7ae3f55701f4ca5f03.jpeg

1.点击创建实例。ZTM AMI 有 7 天的免费试用期,在此期间可以随时退订;如果继续使用,费用为每小时 1 美分,AWS 会在月账单中自动扣费。2.实例启动后,SSH 到 EC2 上,查看 /root/.ztm/ztm-permit.json 文件。这个文件包含了连接到 ZTM Hub 所需要的所有信息,包括密钥和 Hub 的地址:

root@ip-172-31-43-150:~# cat .ztm/ztm-permit.json






{"ca":"-----BEGIN CERTIFICATE-----\nMIICoTCCAYkCFCMS6GYjC6Yedc2xjfvFs4eJaj/OMA0GCSqGSIb3DQEBCwUAMA0x\nCzAJBgNVBAMMAmNhMB4XDTI0MDcyOTEwMTkxM1oXDTI1MDcyOTEwMTkxM1owDTEL\nMAkGA1UEAwwCY2EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC69592\nlVV+TFUOLXezcc7KUlXmpvpCH8YvnUdnwPaQTupyAMTIiIKnjOaJsZ/UlUi7aSHB\nD5cWbelOF7r1CjmyXJJhHH3kp5e8jNBt4L8+zqXoDKa0q0IhUYM1KX1+2KDuqQaF\nAndgl2O8/lFAoyib6l+wSPZKY85MIgnuvdkvMSKQyCDaOjFI9Onh3k/PeS/2uKYB\n6b6JRo35zqHSUaq4MVyRM/+THE9Tl93J2rYZffHt6D94LyZeWhkJD3mdiZOA7upU\nRxtOG0wO/DxcJ7YD9GfwDtpY7tQfUmF4VpMdsGeMK0RMn3Sb5N3nMrBwNY7MY5lF\n8T8o2xA/HIncIGvbAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAChL8iGawye6hfUk\nHxtDqfCxCEK9QPttBexr0A0hYoFBbTIROQC78nkO5+0C/uhiUxqGwOhIsyBs/ilE\nQ/bPjTooq50/XooBVjz5v5YB1d0KItBSzJIBVWOVNxWBRFO6BusFRJIfqHULWjLB\nNUhq3VXJwcgTQALZKZI1SjDYhY0B/ZTaJn2mSwuBVhM4hMGxkuqI+zfUZhYrM0V8\n5VWYOrLYHMNBy+WM6dREuxPUvdNVe10f7QRJqAh8Zv7cwanwbu5xm2lX1mysSmRF\nFNbznsOzAgKV/T9oHAkdUGCGCJx+SoK+W0/HqW/qUftAmYDhvSAK+JJtVBsVp91+\nviaOEbs=\n-----END CERTIFICATE-----\n","agent":{"certificate":"-----BEGIN CERTIFICATE-----\nMIICozCCAYsCFADCU21/DU5I7rcyTXiPv+GPkNxOMA0GCSqGSIb3DQEBCwUAMA0x\nCzAJBgNVBAMMAmNhMB4XDTI0MDcyOTEwMTkxM1oXDTI1MDcyOTEwMTkxM1owDzEN\nMAsGA1UEAwwEcm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMHm\n6p1EwERfQb6FJzuDX/mzaUdsUOW7C/jGpsmTsPyYpOhXjg/CcCD3llhGyqESJ2pi\nJD3vPfCCxCWGJ8AVvKEc3vwflfv6ym+9hgBBYP1CjqLuBp4UNq9XhSRb0RgKz9QO\nGBDxyfhWGY5YCpxb4juwWVLw9X5TTUVNIJ0ntPZUocBQ/JM76fNks0CaIxpPEkVc\nh6uUGwRCAOMb3h+7bBct/tWt7sCav7wqRjKCueuBTCO/zUhbifjAaOyg3W70VnVD\n1blKxTIMKO7NsS7gQh9mkarEdDV9v5NKkTHjsqo6F6oBKKUER7z16qikA4HrJBr2\nG31R6Uf7CIc63+9baCsCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAXpziWlO9k5Y0\nhaK+npkqCZtujY02dy1nrkwfTOOfxrvk0QiLNIp5CMGlWDS6I8o8h0a50SUQQd54\nnZXpZP++TjI/hhQShQ3cZC8KKvkP7AV6rgUWO3SpCWHLL32CeqDI5o87lvb77+Uc\n5aMDK/kol1TUN635ruC7CJCJNiy+gTjJrxdl7/DiaYsez7G30IzwV+t5qvAxoJAs\nq4QilxsLMPg/8Y3xZ7HowlLxzy3QCV1paceFedja9wxqym7se5e++lbdqYPvE9If\nuU4Rzbrj5QGnNV1WJRXlhnuNW3TO5/hHryK1wi8EHHIWyzP4Xs7yVivmOplEksXU\nYSrbdu+n+Q==\n-----END CERTIFICATE-----\n","privateKey":"-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDB5uqdRMBEX0G+\nhSc7g1/5s2lHbFDluwv4xqbJk7D8mKToV44PwnAg95ZYRsqhEidqYiQ97z3wgsQl\nhifAFbyhHN78H5X7+spvvYYAQWD9Qo6i7gaeFDavV4UkW9EYCs/UDhgQ8cn4VhmO\nWAqcW+I7sFlS8PV+U01FTSCdJ7T2VKHAUPyTO+nzZLNAmiMaTxJFXIerlBsEQgDj\nG94fu2wXLf7Vre7Amr+8KkYygrnrgUwjv81IW4n4wGjsoN1u9FZ1Q9W5SsUyDCju\nzbEu4EIfZpGqxHQ1fb+TSpEx47KqOheqASilBEe89eqopAOB6yQa9ht9UelH+wiH\nOt/vW2grAgMBAAECggEAE1/z/H/0qEBObO+YInm3mtdDA0h+8t2UTijnXIf97NeB\nzteE0e1PT/P9WVfFgn+yYY5p6ahgq4odeFRl32ssnHqqi03KqlF+bdjlrVvbCaNf\nZkdbcOs7JZ0cqCvmgjz+VEWOQQ8v67kKt67zbHk/60/tNPzvws4nD/ArfJiNm/lf\nIOd9zyprD9WKpwyaQb0ccQJFYf1rYCfIgDNn5+J3WcKUrw7/K0+OAUFgcTE8rSA+\nfV/OR/IoxR1bvEjQgkL1amoGCWIO37n+g8GjqTslWafoLU6RiP3VnwPka1ktfT7l\n9cKHnIzuTGT8svUbKxXTLLgtYKoc1TsZCi7VhxpoRQKBgQD4So+ZkMeo6nN+w4g1\nfeT+c4lKaQ6vUmD8IslrVfJl0ZrUqrxwNk1Vr9IOff3bzT5NdNVarcLyzIfGCedq\nIhuuDrvaC9bpggETatiiNYDbqQWyREGAc3teFtn//Y0jG13O0XQJ7gchXzeVvYCc\n5NG/zutXE/cxmzv8DKLoG3crLQKBgQDH7BDBr76AjRJ+QNthryAgSRvg0H6usnqM\nxpSg6BFWU0KTrJGDJCTSzh0A7uq1uJWI+EgbtcSZyABjLZreRmWyudww8f+Q807N\nmB+JQwgBPTHotzqT61DqASPelFi3nJslz/2EZHFIAzFv6hIi6rLrSH2KTlxwCwqG\nzygTbgSXtwKBgEkMHp1OY/9FIr+LpToflMxrj1ut9t0Lvm7PiTSj75GXDhc9N/1H\nbI8mEAWleZc+FfNRySdJcc5e8B8KcOPfrwcRXKD01MCUN97Pk3Z9iTCW1I8y15aD\n4yq2TGKs5OYMOhgLtTjqp3xh83SbLhw4IQWK4BAS7J/Wqfg8NbYztAoGADsef\n8YG5lq1XOag3z7/voxNkkTk4tFeTgcbIhCDD71rWaC5wz34jjsYYFNKU3XxY6bhZ\nNFs6vpevl6VudpJDwHPHGIM7fo7OO5rMcgxXkifhAbBSD09tOu98pF7ZNDHKsn/u\n4RO/4DAEPp7SWmx5b7V7OndSlCHs1EyKTO1sP38CgYAcsL4LCZ7ZlFlL038HBJCF\nezf/bmyD8hcNA2qI6NZxp4vX75i3vCLwGrh45ut8Lu9xGjq/gafVvd0E9Lz0m3+0\nZdVgDwNeDN9RBXeILePlOfWTlzDrYo88C3gujkzidibTL70OBjcrlpc+V1ZVFNb4\nojuJqro5Ue7GV4Vo9pQyrg==\n-----END PRIVATE KEY-----\n"},"bootstraps":["54.179.128.116:8888"]}

2. 安装 macOS ZTM

在 ZTM 的 release 页面[2] 下载 macOS 对应的 dmg 文件,注意适配 M1 处理器或 x86 处理器。比如我使用的是 MacBook Air M1,所以下载这个:https://github.com/flomesh-io/ztm/releases/download/v0.1.0/ztm-app-v0.1.0-macos-arm64.dmg。注意扩展名为 .dmg 的文件面向图形界面用户,扩展名为 .tar.gz 的文件面向命令行用户。安装后运行,如下图:

d549049f31cd90186a79301064ee0c57.jpeg

点击加号,选择“Join Mesh”;在弹出的窗口点击右上角的 "+ Join" 按钮,如图:

2a68e4d3d7213f46db3fc0a9caa3d634.jpeg

在添加页面中填写“Mesh Name”,随便填写即可。填写“Join As”用于标识本地所在的节点。在右侧 "Permit" 的位置,点击铅笔图标,输入在步骤 1.6 中拷贝的 ztm-permit.json 的内容。填写后点击 "Save"。如下图:

45d0ed82378c46f46dde3217236729ff.png

保存后,Mesh 列表页会显示 Mesh 状态是 Connected,如图:

8f49f5aebe3a1847317416dffeea01a1.png

注意 "Hubs" 的位置会显示一个数字,"1" 表示有一个终端(EP=Endpoint)连接到了这个 Hub。

3. 安装 Windows ZTM

和安装 macOS ZTM 类似,安装 Windows ZTM 过程简单而直接。安装启动后,添加 Mesh 即可。添加成功后,点击左侧 Endpoints 可以看到两个 EP 连接到了 Hub,如图:

d3f058bba9ceaa37a32cf1380f5a0d85.jpeg

4. 配置 ZTM 隧道用于 RDP 连接

接下来在 ZTM 中配置一个隧道。建立隧道后,两个端点(EP)可以跨越互联网进行通信,而不需要直接的网络连接。以下操作在 macOS 上进行。在浏览器访问 http://127.0.0.1:7777/,这个地址是 ZTM 提供的服务。在左侧菜单选择 "Apps" 菜单,然后点击 "Tunnel" 图标,如图:

d8f7fa69453647189ce9877f9df150cd.jpeg

在 Tunnel 页面右上角,点击 "+",创建一个 Tunnel,如图:

fa861532cfb89e2eae2c48c1d8874e80.png

如下图创建隧道:

b3d85854a4e3713cb9e169467866fc45.png

在 ZTM 中,“隧道”是一个核心的网络能力。这里详细介绍 ZTM 中“隧道”的用处和配置。

在常规的 IP 网络中,如果需要从 A 到 B 建立一个网络连接,需要有从 A 到 B 的路由,同时 B 监听某个端口。这时我们称为“A 到 B 路由可达”。在现实中,这种“路由可达”并不总是容易实现,例如在咖啡店的 Wi-Fi 网络到办公室桌面电脑之间,往往是“路由不可达”的。ZTM 的核心功能

之一就是解决这种“路由不可达但仍然需要互相访问”的问题,即 ZTM Tunnel。

在上图的配置中,首先给 Tunnel 一个名字,在 Metadata 中填写,比如“office-rdp”,Protocol 选择 TCP。

接下来配置 Inbound。在 ZTM 网络中,任意两个 Endpoint 可以使用 Tunnel 互通。例如在我们的例子里,在咖啡厅网络中的 MacBook Air 可以访问办公室里的 Windows 桌面电脑;反过来,办公室的 Windows 桌面电脑也可以访问 MacBook Air。当更多设备接入同一个 ZTM 网络时,可以使用 Tunnel 在任意两个设备之间建立连接。但是在没有 Tunnel 的情况下,同一个 ZTM 网络中的任意两个设备无法通信。我们必须明确地在两个设备之间建立 Tunnel 并配置正确的访问权限才能通信,这样做具有更好的安全特性,也是 ZTM 中 Zero Trust 概念的体现。对于一个从 A 到 B 的 Tunnel,我们称 A 为 "Inbound",B 为 "Outbound"。可以将 Tunnel 想象成一个水管,水在里面单向流动,水流入的一端就是 Inbound,水流出的一端就是 Outbound。

在我们的例子中,MacBook Air 端是 Inbound,Windows 端是 Outbound。因此在配置中,Inbound 的 Endpoint 选择 "Caishu-macair";Outbound 的 Endpoint 选择 "win"。

接下来配置 Inbound 的 Listens,这里是 "IP:Port" 格式,可以配置为 "127.0.0.1:3390"。注意这里的 IP 需要是 MacBook Air 端的 IP,通常使用 127.0.0.1 或者 0.0.0.0。使用 127.0.0.1 更安全,因为 MacBook Air 之外的电脑无法连接。3390 端口是随便选择的,只要是本地没有使用的端口即可,通常选择 1024 以上的端口,因为低于 1024 的端口需要特权才能监听。

同样配置 Outbound 的 Targets 参数,这个参数描述提供 RDP 服务的 IP 和端口,在我们的例子中是 Windows 上的 3389 端口。

接下来配置 Allowed Exits 和 Allowed Entrances。这两个参数可以不配置,但配置的情况下,它们约束了能够连接到 Tunnel 的 EP。配置在 Allowed Exits 中的 EP 是 Tunnel 允许的出口,这里配置为 "win",即来自 Caishu-macair 的 Tunnel 只能从 win 出去。在 Outbound 侧,Allowed Entrances 表示只有来自 Caishu-macair 的 Tunnel 才能连接到 win 上。可能会好奇:既然一个 Tunnel 已经明确配置了从 Caishu-macair 到 win,为什么还需要限制两端呢?这是因为可以在一个 Tunnel 上配置多个 Inbound 和多个 Outbound 的场景。假如除了 MacBook Air 需要访问这个 win 的 RDP,还有一个 ThinkPad 也需要访问这个 win RDP,此时可以配置两个 EP。同样,在 Outbound 侧,也可以配置不止一个,比如除了办公室的 win RDP,还有一个备用电脑 win-backup RDP。这种配置在服务器环境中非常常见,通常需要不止一个服务提供者,用来构建高可用和灾备方案。虽然这样有一点不符合 " 最小访问原则 ",但对于常用的场景,只要留着它们不做任何配置即可。

到这里,Tunnel 的配置就完成了,点击 Inbound 和 Outbound 上的对号图标,并保存。结果如下图:

15829714573a662bac33c8aa49bfaff9.png

5. 验证连接

现在在 MacBook Air 上使用 RDP 客户端工具,连接 127.0.0.1:3390,就可以通过 ZTM Tunnel 连接到办公室桌面电脑的 Windows RDP 上了~如下图是我使用的 RDP 客户端工具的配置:

688ab02828dfd6ec29b09267a87e8fa3.jpeg

关于 ZTM

ZTM https://github.com/flomesh-io/ztm 是开源的去中心化网络基础设施软件。它基于 HTTP/2 隧道构建,可以在任何类型的 IP 网络上运行,例如 LAN、容器化网络和互联网等。

为什么选择 ZTM

ZTM 通过提供一系列核心功能,为构建去中心化应用程序奠定了基础,包括:

•内网穿透,跨 Internet 网关和防火墙的网络连接•TLS 加密的通信通道•基于证书的身份验证和访问控制•去中心化的应用程序发布和部署•分散式文件发现和数据共享

ZTM 可用于各种场景,从连接家庭和工作场所的 2 节点个人网络,到连接全球办公室和分支机构的 10000 节点企业网络。

 ZTM 可以多种设备上运行,支持 CPU 架构:x86、ARM、MIPS、RISC-V、LoongArch 等,以及操作系统:Linux、Windows、macOS、FreeBSD、Android 等。

关于 Flomesh

Flomesh(易衡科技)成立于 2018 年,自主研发并开源了高性能可编程代理 Pipy(https://github.com/flomesh-io/pipy)。以 Pipy 为基础,Flomesh 研发了软件负载均衡、服务网格两款软件产品。为工信部认证的可信云产品、可信开源项目。

Flomesh 核心竞争力来自完全自研的核心组件 Pipy,该组件高性能、高可靠、低延迟、可编程、可扩展、低依赖,采用 C++ 开发,内置自研的 JS 引擎,支持使用 JS 脚本做扩展开发。支持包括 x86、arm、龙芯、海光等硬件 CPU 架构;支持 Linux、FreeBSD、macOS、Windows、OpenWrt 等多种核心的操作系统。

Flomesh 成立以来,以技术为根基、以客户为导向,产品被应用在头部股份制商业银行总行、大型保险公司、运营商总部以及研究院等众多客户和多个场景。

加入 Flomesh 社区

添加小 P 成为好友,参与社区互动,享受丰富互动并获取独家周边礼品!

52fc72e41765f1fa7aab5992877e2a32.jpeg
引用链接

[1] ZTM: https://github.com/flomesh-io/ztm
[2] release 页面: https://github.com/flomesh-io/ztm/releases

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值