docker自建rustdesk-server远程桌面

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 客户端:运行在你的设备上(Windows,macOS,Linux,Android, iPhone)用于连接两个设备的软件,它负责监听来自客户端的连接请求,并在建立连接后向客户端发送屏幕更新和接收输入事件。
  2. RustDesk 中继服务器(Relay Server):运行在服务器上,充当客户端之间的桥梁,转发来自一方的数据包到另一方。在某些环境中(如经过 NAT 出网)设备之间无法进行 P2P 连接,可以用服务器来中转
  3. ID 服务器(ID Server):运行在服务器上,用于维护客户端及中继服务器的连接信息,促进设备之间建立 P2P 连接。

在RustDesk的服务器端部署中,hbbrhbbs 是两个重要的组件,分别用于不同的功能:

  • 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。
  • 服务器已安装dockerdocker-compose工具

1、登录阿里云控制台,配置防火墙规则,开通以下端口

端口放通说明:

  • 放通TCP端口2111521116211172111822229
  • 放通UDP端口21116

2、登录阿里云控制台,配置域名解析(可选):

  • 配置一条A记录,将rustdesk-server公网IP地址解析到rustdesk.example.com域名(需自行准备域名并进行备案)。

部署rustdesk-server

配置主机名

bash 复制代码
hostnamectl set-hostname rustdesk-server

创建部署目录

bash 复制代码
mkdir -p /data/rustdesk/compose
cd /data/rustdesk/compose

创建docker-compose文件

yaml 复制代码
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验证,防止其他获取地址的客户端非法连接

执行以下命令运行容器

bash 复制代码
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    

查看运行的两个容器hbbrhbbs

bash 复制代码
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# 

查看主机当前目录结构

bash 复制代码
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

bash 复制代码
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设备和防火墙,将显示两台客户端为加密直连,无需经过中继:

相关推荐
TsengOnce13 分钟前
Docker 安装 禅道-21.2版本-外部数据库模式
运维·docker·容器
无为扫地僧1 小时前
三、ubuntu18.04安装docker
ubuntu·docker
谷莠子9052 小时前
hadoop实验之创业有感
hadoop·docker·团队开发
G丶AEOM2 小时前
Docker快速入门
docker
大熊程序猿3 小时前
airflow docker 安装
运维·docker·容器
带电的小王4 小时前
Docker在Ubuntu上安装
ubuntu·docker
fanruitian4 小时前
docker 为单个容器设置代理
运维·docker·容器
梁萌4 小时前
Docker快速安装Tomcat
docker·容器·tomcat·镜像
Doker 多克6 小时前
IntelliJ IDEA Docker集成
spring cloud·docker·intellij-idea
筏镜13 小时前
调整docker bridge地址冲突,通过bip调整 bridge地址
java·docker·eureka