
rustdesk简介RustDesk 是一款可以平替 TeamViewer 的开源软件旨在提供安全便捷的自建方案。RustDesk 是一款功能齐全的远程桌面应用具有以下特性* 支持 Windows、macOS、Linux、iOS、Android、Web 等多个平台。* 支持 VP8 / VP9 / AV1 软件编解码器和 H264 / H265 硬件编解码器。* 完全掌控数据轻松自建。* P2P 连接端到端加密。* 在 Windows 上可以非管理员不安装运行根据需要在本地或远程提升权限。* 我们崇尚简单尽一切可能让它简单。官方网站https://rustdesk.com/zh/项目地址https://github.com/rustdesk/rustdesk### RustDesk 架构RustDesk 采用了经典的客户端-服务器模型其中涉及三个主要组件RustDesk 客户端、RustDesk 服务器和 ID Server。1. RustDesk 客户端运行在你的设备上WindowsmacOSLinuxAndroid iPhone用于连接两个设备的软件它负责监听来自客户端的连接请求并在建立连接后向客户端发送屏幕更新和接收输入事件。2. RustDesk 中继服务器Relay Server运行在服务器上充当客户端之间的桥梁转发来自一方的数据包到另一方。在某些环境中如经过 NAT 出网设备之间无法进行 P2P 连接可以用服务器来中转3. ID 服务器ID Server运行在服务器上用于维护客户端及中继服务器的连接信息促进设备之间建立 P2P 连接。在RustDesk的服务器端部署中hbbr和hbbs是两个重要的组件分别用于不同的功能* hbbs - 代表RustDesk ID / Rendezvous ServerRustDesk ID注册服务器用于分配和注册IDhbbs是RustDesk的中介服务器Broker Server用于管理和协调客户端连接。它帮助客户端找到并建立P2P连接。hbbs负责维护客户端的在线状态并处理连接请求。当客户端A希望连接客户端B时它会向hbbs发送请求hbbs会帮助它们建立连接。* hbbr -代表RustDesk Relay ServerRustDesk 中继服务器如果P2P无法连接会使用hbbr进行流量中继。hbbr是RustDesk的中继服务器Relay Server用于在两台客户端之间进行连接中继。它允许无法直接建立P2P连接的客户端通过中继服务器进行通信。当客户端A和客户端B之间无法建立直接连接时它们会通过hbbr中继服务器进行数据传输。* rustdesk-utils - RustDesk 命令行工具P2P直连说明* RustDesk 首先尝试建立直接 P2P 连接如果 P2P 失败将使用中继服务器。 * 确认连接方式首先连接到远程主机可以将鼠标移动到工具栏图标绿色图标将显示它是直接连接还是通过中继服务器连接。 使用端口说明序号服务端口协议用途是否可选1hbbs21114TCP用于 Web 控制台API仅在专业版中可用可选2hbbs21115TCPNAT类型测试必选3hbbs21116TCP/UDPUDP用于ID注册和心跳服务TCP用于TCP打洞和连接服务必选4hbbr21117TCP用于Relay服务必选5hbbs21118TCP用于支持Web客户端可选6hbbr21119TCP用于支持Web客户端可选### 部署rustdesk-serverrustdesk支持自行搭建属于你的RustDesk服务器所有的一切都是免费且开源的。所谓自建服务器也就是自建 ID Server 和 Relay Server。整体部署架构如下官方文档https://github.com/rustdesk/rustdesk-server/blob/master/README-ZH.md#### 前置部署要求前置要求* 准备一台公网linux服务器并绑定公网IP地址以阿里云轻量应用服务器为例操作系统为Ubuntu 22.04。* 服务器已安装docker和docker-compose工具1、登录阿里云控制台配置防火墙规则开通以下端口端口放通说明* 放通TCP端口21115、21116、21117、21118、21119* 放通UDP端口211162、登录阿里云控制台配置域名解析可选* 配置一条A记录将rustdesk-server公网IP地址解析到rustdesk.example.com域名需自行准备域名并进行备案。#### 部署rustdesk-server配置主机名 hostnamectl set-hostname rustdesk-server 创建部署目录 mkdir -p /data/rustdesk/compose cd /data/rustdesk/compose 创建docker-compose文件 rootrustdesk-server:/data/rustdesk/compose# vim docker-compose.yaml services: hbbs: container_name: hbbs image: rustdesk/rustdesk-server:1.1.11 command: hbbs environment: - “RELAYhbbr:21117” - “ENCRYPTED_ONLY1” ports: - 21115:21115 - 21116:21116 - 21116:21116/udp - 21118:21118 volumes: - /data/rustdesk/root:/root networks: - rustdesk-net depends_on: - hbbr restart: unless-stopped hbbr: container_name: hbbr image: rustdesk/rustdesk-server:1.1.11 command: hbbr ports: - 21117:21117 - 21119:21119 volumes: - /data/rustdesk/root:/root networks: - rustdesk-net restart: unless-stopped networks: rustdesk-net: external: false 主要参数说明* 环境变量RELAY指定hbbr 服务的地址和端口由于使用同一个docker network可以通过容器名称hbbr连接* 环境变量ENCRYPTED_ONLY启用加密连接并使用key验证防止其他获取地址的客户端非法连接执行以下命令运行容器 rootrustdesk-server:/data/rustdesk/compose# docker-compose up -d [] Building 0.0s (0/0) docker:default [] Running 3/3 ? Network compose_rustdesk-net Created 0.1s ? Container hbbr Started 0.1s ? Container hbbs Started 查看运行的两个容器hbbr和hbbsrootrustdesk-server:/data/rustdesk/compose# docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS hbbr rustdesk/rustdesk-server:1.1.11 “hbbr” hbbr 44 seconds ago Up 43 seconds 0.0.0.0:21117-21117/tcp, :::21117-21117/tcp, 0.0.0.0:21119-21119/tcp, :::21119-21119/tcp hbbs rustdesk/rustdesk-server:1.1.11 “hbbs” hbbs 44 seconds ago Up 42 seconds 0.0.0.0:21115-21116-21115-21116/tcp, :::21115-21116-21115-21116/tcp, 0.0.0.0:21118-21118/tcp, :::21118-21118/tcp, 0.0.0.0:21116-21116/udp, :::21116-21116/udp rootrustdesk-server:/data/rustdesk/compose# 查看主机当前目录结构 rootrustdesk-server:~# apt install -y tree rootrustdesk-server:~# tree /data/rustdesk/ /data/rustdesk/ ├── compose │ └── docker-compose.yaml └── root ├── db_v2.sqlite3 ├── db_v2.sqlite3-shm ├── db_v2.sqlite3-wal ├── id_ed25519 └── id_ed25519.pub 2 directories, 6 files rootrustdesk-server:~# #### 连接验证服务端搭建好后在要连接的两个客户端设备上都下载 RustDesk 客户端。下载地址是https://github.com/rustdesk/rustdesk/releases在rustdesk-server上获取默认生成的公钥key rootrustdesk-server:~# cat /data/rustdesk/root/id_ed25519.pub G2yFoE0pWWqXAHM174TXbsoUqJB1brHKOxZhEKv7hA 首先找到 RustDesk 客户端的设置-ID/中继服务器然后输入如下三个信息* ID 服务器rustdesk.example.com:21116默认端口为21116时可以省略端口配置* 中继服务器rustdesk.example.com:21117默认端口为21117时可以省略端口配置* Key填写部署服务默认生成的id_ed25519.pub文件中的内容示例配置如下所有客户端必须都完成相应配置配置完成后连接测试1、中继连接测试连接成功后鼠标指针放在左上角绿色图标处显示通过加密中继连接说明两台机器位于不同网络无法通过P2P直连要经过阿里云rustdesk-server中继连接。2、直连连接测试如果位于同一网络的两台客户端互联由于中间不存在NAT设备和防火墙将显示两台客户端为加密直连无需经过中继