RustDesk 全流程自建指南:开源远程桌面解决方案

1. RustDesk 概述

RustDesk 是一款采用 Rust 语言编写的开源远程桌面软件,具有以下核心特性:

  • 完全开源:客户端和服务器端代码均在 GitHub 公开
  • 数据自主可控:支持自建服务器,确保数据隐私
  • 跨平台支持:Windows、Linux、macOS、Android 和 iOS 全平台兼容
  • P2P 连接:支持直接点对点连接,减少延迟
  • 中继备用:当 P2P 不可用时自动切换至中继服务器

项目地址:

这里给一个下载:

2. 核心架构

2.1 组件构成

RustDesk 系统由三个主要组件组成:

  1. 客户端:提供用户界面和连接功能
  2. ID/会合服务器 (hbbs):管理设备ID和协助建立P2P连接
  3. 中继服务器 (hbbr):当P2P不可用时提供数据转发

2.2 网络协议

  • 使用 TCP/UDP 协议进行数据传输
  • 支持 TCP 打洞技术建立直接连接
  • 数据加密传输保障安全性

3. 服务器部署指南

3.1 二进制部署

3.1.1 从源码构建

# 安装构建依赖
sudo apt install -y build-essential cmake git

# 克隆仓库
git clone https://github.com/rustdesk/rustdesk-server
cd rustdesk-server

# 构建发布版本
cargo build --release

# 生成的可执行文件位于
# target/release/hbbs - ID/会合服务器
# target/release/hbbr - 中继服务器
# target/release/rustdesk-utils - 实用工具

3.1.2 直接下载预编译二进制

可从 GitHub Releases 页面下载预编译的二进制文件:
https://github.com/rustdesk/rustdesk-server/releases

3.2 Docker 部署

3.2.1 经典镜像部署

# 部署hbbs
docker run --name hbbs --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbs -r <relay-server-ip[:port]>

# 部署hbbr
docker run --name hbbr --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr

3.2.2 S6-overlay 镜像部署(单容器)

docker run --name rustdesk-server \
  --net=host \
  -e "RELAY=your.relay.server" \
  -e "ENCRYPTED_ONLY=1" \
  -v "$PWD/data:/data" \
  -d rustdesk/rustdesk-server-s6:latest

3.3 关键配置参数

参数说明默认值
-r中继服务器地址
--encrypted-only仅允许加密连接false
-k _允许任何密钥需要匹配密钥
-k <key>指定密钥
--relay-servers多个中继服务器

4. 客户端配置

4.1 连接自建服务器

  1. 打开 RustDesk 客户端
  2. 进入设置 → ID/中继服务器
  3. 填写自建服务器地址:
    • ID服务器:hbbs运行的IP或域名
    • 中继服务器:hbbr运行的IP或域名
  4. 如需密钥认证,在"密钥"字段输入服务器配置的密钥

4.2 高级网络配置

  • 端口映射

    • hbbs: TCP 21115-21119, UDP 21116
    • hbbr: TCP 21117, 21119
  • 防火墙规则

    # 示例ufw规则
    sudo ufw allow 21115:21119/tcp
    sudo ufw allow 21116/udp
    

5. 安全配置

5.1 密钥管理

RustDesk 使用 Ed25519 密钥对进行认证:

# 生成密钥对
rustdesk-utils genkeypair

# 输出示例
Public Key:  8BLLhtzUBU/XKAH4mep3p+IX4DSApe7qbAwNH9nv4yA=
Secret Key:  egAVd44u33ZEUIDTtksGcHeVeAwywarEdHmf99KM5ajwEsuG3NQFT9coAfiZ6nen4hfgNICl7upsDA0f2e/jIA==

5.2 强制加密

在服务器启动时添加 --encrypted-only 参数或设置环境变量 ENCRYPTED_ONLY=1 可强制所有连接必须加密。

6. 性能调优

6.1 带宽控制

环境变量说明示例值
LIMIT_SPEED总速度限制10 (Mb/s)
SINGLE_BANDWIDTH单连接带宽限制5 (Mb/s)
TOTAL_BANDWIDTH总带宽限制100 (Mb/s)

6.2 数据库配置

默认使用 SQLite 数据库,可通过 DB_URL 指定路径:

# 使用自定义数据库路径
hbbs --db-url /path/to/db_v2.sqlite3

7. 监控与维护

7.1 日志查看

设置日志级别:

# 设置日志级别
export RUST_LOG=info  # error|warn|info|debug|trace

# 查看hbbs日志
docker logs -f hbbs

# 查看hbbr日志
docker logs -f hbbr

7.2 性能监控

使用 rustdesk-utils 工具获取服务器状态:

rustdesk-utils stats

8. 故障排除

8.1 常见问题

  1. 无法建立P2P连接

    • 检查两端NAT类型
    • 确认UDP 21116端口开放
    • 尝试禁用防火墙临时测试
  2. 连接速度慢

    • 检查中继服务器带宽限制
    • 确认网络路径质量
    • 考虑部署多地中继服务器
  3. 认证失败

    • 确认客户端和服务器的密钥匹配
    • 检查 --encrypted-only 设置

9. 高级主题

9.1 多服务器部署

可以部署多个hbbs和hbbr实例实现负载均衡:

# 启动多个hbbr实例
docker run --name hbbr1 -p 21117:21117 -d rustdesk/rustdesk-server:latest hbbr
docker run --name hbbr2 -p 21120:21117 -d rustdesk/rustdesk-server:latest hbbr

# hbbs配置多个中继服务器
hbbs -r "relay1.example.com,relay2.example.com:21120"

9.2 自定义开发

RustDesk 提供了开发接口,支持:

  1. 自定义UI界面
  2. 扩展协议功能
  3. 集成到现有系统

开发文档参考项目中的 CONTRIBUTING.md 文件。

10. 版本升级

  1. 备份现有数据和配置
  2. 停止旧版本服务
  3. 部署新版本二进制或Docker镜像
  4. 恢复配置并启动服务
  5. 验证功能正常

建议在测试环境验证后再进行生产环境升级。