docker自建rustdesk-server远程桌面的解决方案
作者:willops
rustdesk简介
RustDesk 是一款可以平替 TeamViewer 的开源软件,旨在提供安全便捷的自建方案。
RustDesk 是一款功能齐全的远程桌面应用,具有以下特性:
- 支持 Windows、macOS、Linux、iOS、Android、Web 等多个平台。
- 支持 VP8 / VP9 / AV1 软件编解码器和 H264 / H265 硬件编解码器。
- 完全掌控数据,轻松自建。
- P2P 连接,端到端加密。
- 在 Windows 上可以非管理员不安装运行,根据需要在本地或远程提升权限。
- 我们崇尚简单,尽一切可能让它简单。
项目地址:https://github.com/rustdesk/rustdesk
RustDesk 架构
RustDesk 采用了经典的客户端-服务器模型,其中涉及三个主要组件:RustDesk 客户端、RustDesk 服务器和 ID Server。
- RustDesk 客户端:运行在你的设备上(Windows,macOS,Linux,Android, iPhone)用于连接两个设备的软件,它负责监听来自客户端的连接请求,并在建立连接后向客户端发送屏幕更新和接收输入事件。
- RustDesk 中继服务器(Relay Server):运行在服务器上,充当客户端之间的桥梁,转发来自一方的数据包到另一方。在某些环境中(如经过 NAT 出网)设备之间无法进行 P2P 连接,可以用服务器来中转
- ID 服务器(ID Server):运行在服务器上,用于维护客户端及中继服务器的连接信息,促进设备之间建立 P2P 连接。
在RustDesk的服务器端部署中,hbbr
和 hbbs
是两个重要的组件,分别用于不同的功能:
- hbbs - 代表
RustDesk ID / Rendezvous Server
,RustDesk ID注册服务器,用于分配和注册ID;hbbs
是RustDesk的中介服务器(Broker Server),用于管理和协调客户端连接。它帮助客户端找到并建立P2P连接。hbbs
负责维护客户端的在线状态,并处理连接请求。当客户端A希望连接客户端B时,它会向hbbs
发送请求,hbbs
会帮助它们建立连接。 - hbbr -代表
RustDesk Relay Server
,RustDesk 中继服务器,如果P2P无法连接,会使用hbbr进行流量中继。hbbr
是RustDesk的中继服务器(Relay Server),用于在两台客户端之间进行连接中继。它允许无法直接建立P2P连接的客户端通过中继服务器进行通信。当客户端A和客户端B之间无法建立直接连接时,它们会通过hbbr
中继服务器进行数据传输。 - rustdesk-utils - RustDesk 命令行工具
P2P直连说明:
- RustDesk 首先尝试建立直接 P2P 连接,如果 P2P 失败,将使用中继服务器。
- 确认连接方式,首先连接到远程主机,可以将鼠标移动到工具栏图标(绿色图标),将显示它是直接连接还是通过中继服务器连接。
使用端口说明:
序号 | 服务 | 端口 | 协议 | 用途 | 是否可选 |
---|---|---|---|---|---|
1 | hbbs | 21114 | TCP | 用于 Web 控制台API,仅在专业版中可用 | 可选 |
2 | hbbs | 21115 | TCP | NAT类型测试 | 必选 |
3 | hbbs | 21116 | TCP/UDP | UDP用于ID注册和心跳服务,TCP用于TCP打洞和连接服务 | 必选 |
4 | hbbr | 21117 | TCP | 用于Relay服务 | 必选 |
5 | hbbs | 21118 | TCP | 用于支持Web客户端 | 可选 |
6 | hbbr | 21119 | TCP | 用于支持Web客户端 | 可选 |
部署rustdesk-server
rustdesk支持自行搭建属于你的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端口21116
2、登录阿里云控制台,配置域名解析(可选):
配置一条A记录,将rustdesk-server公网IP地址解析到rustdesk.example.com
域名(需自行准备域名并进行备案)。
部署rustdesk-server
配置主机名
hostnamectl set-hostname rustdesk-server
创建部署目录
mkdir -p /data/rustdesk/composecd /data/rustdesk/compose
创建docker-compose文件
root@rustdesk-server:/data/rustdesk/compose# vim docker-compose.yaml services: hbbs: container_name: hbbs image: rustdesk/rustdesk-server:1.1.11 command: hbbs environment: - "RELAY=hbbr:21117" - "ENCRYPTED_ONLY=1" 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验证,防止其他获取地址的客户端非法连接
执行以下命令运行容器
root@rustdesk-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
和hbbs
root@rustdesk-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 root@rustdesk-server:/data/rustdesk/compose#
查看主机当前目录结构
root@rustdesk-server:~# apt install -y tree root@rustdesk-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 root@rustdesk-server:~#
连接验证
服务端搭建好后,在要连接的两个客户端设备上都下载 RustDesk 客户端。
下载地址是:https://github.com/rustdesk/rustdesk/releases
在rustdesk-server上获取默认生成的公钥key
root@rustdesk-server:~# cat /data/rustdesk/root/id_ed25519.pub G2yFoE+0pWWqXAHM174TXbsoUqJB1brHKOxZhEKv7hA=
首先找到 RustDesk 客户端的 设置
-> ID/中继服务器
,然后输入如下三个信息
- ID 服务器:
rustdesk.example.com:21116
,默认端口为21116
时可以省略端口配置 - 中级服务器:
rustdesk.example.com:21117
,默认端口为21117
时可以省略端口配置 - Key:填写部署服务默认生成的
id_ed25519.pub
文件中的内容
示例配置如下:
所有客户端必须都完成相应配置,配置完成后连接测试:
1、中继连接测试
连接成功后鼠标指针放在左上角绿色图标处,显示通过加密中继连接,说明两台机器位于不同网络,无法通过P2P直连,要经过阿里云rustdesk-server中继连接。
2、直连连接测试
如果位于同一网络的两台客户端互联,由于中间不存在NAT设备和防火墙,将显示两台客户端为加密直连,无需经过中继:
到此这篇关于docker自建rustdesk-server远程桌面的文章就介绍到这了,更多相关docker自建rustdesk-server内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!