使用Rustdesk自建远程服务

我的消息
使用Rustdesk自建远程服务

使用 RustDesk 自建远程服务

一、项目背景

RustDesk 是一款开源的远程桌面软件,支持 Windows、Linux、macOS、Android 等多个平台,可以用于远程桌面控制、文件传输等场景

RustDesk 默认使用官方提供的公共服务器。如果希望获得更好的自主控制能力,也可以自己部署 RustDesk 服务端,让所有客户端通过自己的服务器进行设备发现、连接协商和中继通信

本次部署使用一台香港 VPS,通过 Docker 部署 RustDesk Server,实现家中电脑与其他个人设备之间的远程连接

1. 部署环境

项目 配置
云服务器 香港 VPS
操作系统 Ubuntu 22.04
CPU 2 核
内存 4 GB
公网带宽 10 Mbps
容器运行环境 Docker Engine + Docker Compose
远程服务 RustDesk Server

本次使用 RustDesk Server 官方 Docker 镜像:

rustdesk/rustdesk-server:latest

二、安装 Docker

首先更新系统软件包:

sudo apt update
sudo apt upgrade -y

安装 Docker 官方仓库所需的依赖:

sudo apt install ca-certificates curl -y

添加 Docker 官方 GPG 密钥:

sudo install -m 0755 -d /etc/apt/keyrings

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc

sudo chmod a+r /etc/apt/keyrings/docker.asc

添加 Docker 官方软件源:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新软件包索引:

sudo apt update

安装 Docker Engine、CLI、Containerd 和 Compose 插件:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

验证 Docker 是否正常运行:

sudo docker run hello-world

如果能够看到 Docker 的欢迎信息,说明 Docker 已经安装成功。

查看 Docker 版本:

sudo docker version

三、部署 RustDesk Server

RustDesk Server 主要由两个核心服务组成:

  • hbbs:ID/Rendezvous Server,负责设备 ID 注册、连接协商等工作
  • hbbr:Relay Server,在无法建立 P2P 直连时,为两端设备提供中继通信

两项服务都需要正常运行。

1. 创建部署目录

创建 RustDesk 数据目录:

sudo mkdir -p /opt/rustdesk/data

进入部署目录:

cd /opt/rustdesk

2. 创建 Docker Compose 配置文件

创建配置文件:

sudo nano docker-compose.yml

写入以下内容:

services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r 123.123.123.23:21117
    volumes:
      - ./data:/root
    network_mode: "host"
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - ./data:/root
    network_mode: "host"
    restart: unless-stopped

这里需要注意:

  1. 154.64.244.131 是 VPS 的公网 IPv4 地址,需要根据实际服务器地址修改
  2. 21117 是 Relay Server 使用的 TCP 端口
  3. ./data:/root 用于持久化保存 RustDesk 服务端密钥等数据
  4. network_mode: host 表示容器直接使用宿主机网络
  5. restart: unless-stopped 表示容器异常退出或服务器重启后,Docker 会自动尝试恢复服务

保存并退出编辑器

3. 启动服务

执行:

sudo docker compose up -d

查看容器运行状态:

sudo docker compose ps

正常情况下,可以看到:

  • hbbs:Up
  • hbbr:Up

这表示两个容器已经成功启动

4. 查看运行日志

查看 hbbs 日志:

sudo docker logs hbbs

查看 hbbr 日志:

sudo docker logs hbbr

hbbs 正常运行时,可以看到类似以下信息:

Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
Listening on tcp :21116
Listening on udp :21116
Listening on tcp :21115

hbbr 正常运行时,可以看到类似以下信息:

Listening on tcp :21117
Listening on websocket :21119

如果能够看到对应的监听信息,说明服务端已经正常启动

四、获取服务端公钥

RustDesk 使用密钥机制验证客户端连接的服务端身份

服务端启动后,会自动生成密钥文件

查看公钥:

sudo cat /opt/rustdesk/data/id_ed25519.pub

将输出的内容复制保存

例如:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=

这个公钥后续需要填写到每一台 RustDesk 客户端中

注意:

  • id_ed25519.pub 是公钥,可以配置到客户端
  • id_ed25519 是私钥,必须保存在服务器上,不能泄露
  • 不要随意删除或重新生成密钥,否则可能需要重新配置客户端

五、配置服务器防火墙

RustDesk Server 需要开放相应的网络端口

本次部署使用以下端口:

端口 协议 用途
21115 TCP NAT 类型检测等
21116 TCP ID 服务及连接协商
21116 UDP ID 注册及打洞通信
21117 TCP Relay 中继通信

1. 配置 Ubuntu UFW

查看当前防火墙状态:

sudo ufw status

开放 RustDesk 所需端口:

sudo ufw allow 21115/tcp
sudo ufw allow 21116/tcp
sudo ufw allow 21116/udp
sudo ufw allow 21117/tcp

再次查看规则:

sudo ufw status

确认以上规则已经添加

2. 配置云服务器安全组

除了 Ubuntu 系统内部的防火墙,还需要在云服务商控制台配置安全组规则

添加以下入站规则:

端口 协议 来源
21115 TCP 0.0.0.0/0
21116 TCP 0.0.0.0/0
21116 UDP 0.0.0.0/0
21117 TCP 0.0.0.0/0

这里的 0.0.0.0/0 表示允许来自任意 IPv4 地址的连接

如果服务器还启用了 IPv6,并且需要通过 IPv6 访问,也需要根据实际情况配置相应的 IPv6 规则

注意:UFW 和云服务器安全组是两套独立的防火墙规则,必须同时满足

六、配置 RustDesk 客户端

服务端部署完成后,就可以配置 Windows、Ubuntu 等设备上的 RustDesk 客户端

所有需要加入自建服务器的设备,都需要进行相同的网络配置

1. 打开网络设置

启动 RustDesk 客户端,进入:

设置 → 网络 → ID/中继服务器

根据实际版本,菜单名称可能略有不同

填写以下内容:

配置项 填写内容
ID Server 154.64.244.131
Relay Server 154.64.244.131
API Server 留空
Key 服务端公钥

其中,Key 填写第四节获取的 id_ed25519.pub 文件内容

保存设置。

2. 配置无人值守访问

如果希望在无人操作的情况下远程连接某台电脑,需要在被控端设置永久访问密码

进入 RustDesk 安全设置,找到无人值守访问相关选项,设置访问密码

建议:

  • 使用独立且足够复杂的密码
  • 不要将访问密码与服务端公钥混淆
  • 不要将访问密码分享给不可信任的人
  • 根据实际需要限制访问权限

服务端公钥只用于验证自建服务器身份,并不代表任何人都可以直接控制你的电脑

七、RustDesk 的连接原理

RustDesk 的远程连接主要涉及 ID Server、Relay Server 和 P2P 直连。

简单理解:

              RustDesk 自建服务器
             ┌───────────────────┐
             │                   │
             │       hbbs        │
             │   ID / 协调服务    │
             │                   │
             │       hbbr        │
             │    Relay 中继      │
             │                   │
             └───────────────────┘
                      │
             ┌────────┴────────┐
             │                 │
          控制端              被控端
         Windows             Windows
         / Linux              / Linux

实际连接时,大致分为以下几种情况:

情况一:P2P 直连

两台设备通过 hbbs 完成设备发现和连接协商,随后尝试直接建立网络连接

如果直连成功,远程桌面数据通常不需要经过 VPS 中继

情况二:Relay 中继

如果两台设备由于 NAT、防火墙或网络环境限制,无法建立 P2P 直连,则可以通过 hbbr 转发数据

此时 VPS 的带宽就会成为实际远程连接速度的限制因素之一

本次 VPS 带宽为 10 Mbps,理论上单方向传输速率上限约为 1.25 MB/s,实际速度还会受到网络开销、线路质量和服务器负载影响

因此,能够 P2P 直连时,通常可以减少 VPS 的带宽消耗

八、日常维护

1. 查看容器状态

sudo docker compose ps

2. 查看 hbbs 日志

sudo docker logs -f hbbs

3. 查看 hbbr 日志

sudo docker logs -f hbbr

4. 重启服务

cd /opt/rustdesk
sudo docker compose restart

5. 停止服务

cd /opt/rustdesk
sudo docker compose down

6. 更新镜像

cd /opt/rustdesk

sudo docker compose pull

sudo docker compose up -d

更新前建议备份 /opt/rustdesk/data,尤其是服务端密钥文件

九、部署总结

本次使用一台 Ubuntu 22.04 香港 VPS,通过 Docker Compose 部署了 RustDesk Server

整个部署过程主要包括:

  1. 安装 Docker Engine 和 Compose
  2. 创建 RustDesk 数据目录
  3. 编写 Docker Compose 配置文件
  4. 启动 hbbs 和 hbbr 两项服务
  5. 获取服务端公钥
  6. 配置 Ubuntu UFW 和云服务器安全组
  7. 在 RustDesk 客户端中配置 ID Server、Relay Server 和公钥

相比依赖公共服务器,自建 RustDesk 服务端可以让设备发现和中继服务由自己管理,也便于长期维护个人远程桌面环境

需要注意的是,自建服务器并不意味着远程连接完全不经过第三方网络,也不意味着设备本身自动获得安全保障。客户端访问密码、操作系统账户、网络安全和服务器密钥都需要妥善管理

对于个人使用场景,一台配置不高的 VPS 就可以承担 RustDesk 服务端的基础运行需求,最关键的是,它完全免费

评论 0

登录后即可参与讨论。

还没有评论,欢迎登录后参与讨论。