第一部分:服务器端部署 (CentOS)

1. 系统准备 (CentOS/RHEL/Rocky Linux 系统)

# 更新系统
sudo yum update -y
# 或者对于 CentOS 8+/Rocky Linux:
# sudo dnf update -y

# 安装 Docker
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 或者对于 CentOS 8+/Rocky Linux:
# sudo dnf install -y docker-ce docker-ce-cli containerd.io

# 启动 Docker 服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 注意:执行后需要重新登录终端或重启系统生效

# 安装 Docker Compose 插件
sudo yum install -y docker-compose-plugin
# 或者对于 CentOS 8+/Rocky Linux:
# sudo dnf install -y docker-compose-plugin

2. 部署 RustDesk 服务端

# 1. 创建并进入指定目录
mkdir -p /opt/module/rustdesk && cd /opt/module/rustdesk

# 2. 创建 compose.yml 文件
cat > compose.yml << 'EOF'
services:
  hbbs:
    container_name: hbbs
    image: docker.io/rustdesk/rustdesk-server-pro:latest
    command: hbbs
    volumes:
      - ./data:/root
    network_mode: "host"
    depends_on:
      - hbbr
    restart: unless-stopped

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

# 3. 启动服务 (使用 Docker Compose V2)
sudo docker compose up -d

# 4. 检查服务状态,确认两个容器都在运行
sudo docker compose ps

3. 配置防火墙 (CentOS)

CentOS/RHEL/Rocky Linux (云服务器可忽略):

# 开放 TCP 端口范围
sudo firewall-cmd --permanent --add-port=21115-21119/tcp
# 开放 UDP 端口
sudo firewall-cmd --permanent --add-port=21116/udp
# 保留 SSH 端口
sudo firewall-cmd --permanent --add-service=ssh
# 重新加载防火墙配置
sudo firewall-cmd --reload

云服务器:进入安全组,如图示例开放以下端口即可

在这里插入图片描述

关键端口说明:

  • 21116 (TCP):用于 HBBS 的 NAT 类型检测。
  • 21116 (UDP):用于 ID 注册与心跳。
  • 21117 (TCP):用于 HBBS 服务。
  • 21118 (TCP):用于 HBBR(中继)服务。
  • 21115 (TCP):用于 Web 客户端(可选)。
  • 21119 (TCP):用于支持 Web 控制台(Pro 版功能)。

第二部分:获取中继服务器的 ID 与 Key

服务运行后,密钥文件会自动生成在 ./data 目录下。

# 进入项目目录
cd /opt/module/rustdesk

# 查看生成的密钥文件
ls -la data/

# 您应该会看到类似以下文件:
# id_ed25519 id_ed25519.pub

# 获取 Key (公钥)
cat data/id_ed25519.pub

# 服务器ID 其实就是 hbbs 所在服务器的公网IP或解析到该IP的域名

在这里插入图片描述

重要信息:

  • Key:就是 id_ed25519.pub 文件的内容,一串长长的字符串。
  • ID/地址:是您运行 HBBS 的服务器公网 IP 地址,或者您为该 IP 设置的域名

第三部分:客户端安装与配置

控制端与被控端

RustDesk 的客户端是通用的,同一个程序既可以作为控制端,也可以作为被控端。

1. 客户端下载

从 RustDesk 官网下载客户端:https://rustdesk.com/zh/

支持 Windows, macOS, Linux, Android, iOS 等所有主流平台。

2. 客户端配置

控制端被控端上都需要进行相同的网络配置。

  • 打开 RustDesk 客户端。
  • 点击左下角的菜单按钮(三条横线或齿轮图标)。
  • 进入 “网络” 设置。

“ID服务器”“中继服务器” 中填入您的服务器公网 IP 或域名。

  • 例如your-server.com123.123.123.123

“Key” 中填入从 id_ed25519.pub 获取的公钥字符串。

配置示例:

  • ID 服务器: your-domain.com (或你的服务器公网IP)
  • 中继服务器: your-domain.com (通常与ID服务器相同)
  • Key: ssh-ed25519 AAAA...xxx (您的公钥)

3. 开始连接

  1. 在被控端设备上,RustDesk 客户端会显示本机的 “ID”“密码”
  2. 在控制端设备上,在输入框中输入被控端的 “ID”,然后点击 “连接”
  3. 输入被控端上显示的 “密码”,即可建立远程控制连接。

CentOS 特别注意事项

  1. SELinux:如果您的 CentOS 启用了 SELinux,可能会遇到权限问题。可以临时禁用 SELinux 或设置适当的策略:

    # 临时禁用
    sudo setenforce 0
    
    # 永久禁用(需要重启)
    sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    
  2. Podman:CentOS 默认可能安装了 Podman,如果您选择使用 Podman:

    # 安装 podman-compose
    sudo yum install -y podman-compose
    # 然后使用 podman-compose up -d 启动
    
  3. 目录权限:确保 /opt/module/rustdesk 目录有正确的写入权限:

    sudo chmod 755 /opt/module/rustdesk
    

资源占用示例

hbbs:内存占用 4.6MB
hbbr:内存占用 1.7MB

在这里插入图片描述

hbbs 和 hbbr 的作用

hbbs = “电话号码本” + “接线员”(告诉你如何联系对方)
hbbr = “快递员”(当无法直接交付时帮你传送包裹)

两个服务协同工作,确保 RustDesk 在各种网络环境下都能建立稳定的远程连接。

hbbs (RustDesk ID Server) - 信令服务器

主要功能:

  • ID 注册与管理:为每个客户端设备分配和注册唯一的 RustDesk ID
  • 地址解析:将 RustDesk ID 解析为实际的网络地址
  • NAT 穿透协调:帮助客户端之间建立直接 P2P 连接
  • 心跳检测:维持与客户端的连接状态
  • 会话管理:管理远程控制会话的建立

类比理解:
就像 电话总机DNS 服务器

  • 你知道朋友的 RustDesk ID(就像知道电话号码)
  • hbbs 告诉你这个 ID 对应的设备在哪里(就像电话总机转接)

hbbR (RustDesk Relay Server) - 中继服务器

主要功能:

  • 数据中继:当客户端之间无法建立直接 P2P 连接时,转发数据
  • 流量转发:传输屏幕图像、鼠标键盘数据、文件传输等
  • 穿透失败备用:作为 NAT 穿透失败的备用方案

类比理解:
就像 快递中转站VPN 服务器

  • 当两个设备无法直接通信时(比如都在不同的 NAT 后面)
  • hbbr 作为中间人帮助转发数据

工作流程示例

客户端A (控制端)                客户端B (被控端)
     ↓                              ↓
   连接到 hbbs (注册ID) ←------→ 连接到 hbbs (注册ID)
     ↓                              ↓
   获取客户端B的地址信息            等待连接
     ↓                              ↓
   尝试直接 P2P 连接 -----------→ 接受连接
     ↓                              ↓
如果直接连接失败 ↘                ↙ 如果直接连接失败
                通过 hbbr 中继传输数据

流程说明:

  1. 注册阶段:客户端A和B都向 hbbs 注册自己的 ID 和网络信息
  2. 地址交换:hbbs 为双方提供对方的网络地址信息
  3. P2P尝试:客户端之间尝试建立直接连接(最理想的低延迟方式)
  4. 中继备用:如果直连失败(由于防火墙/NAT限制),通过 hbbr 中转数据
  5. 数据传输:最终通过直连或中继方式传输远程控制数据

查看服务状态

# 查看日志确认服务正常运行
sudo docker logs hbbs
sudo docker logs hbbr

# 查看实时日志
sudo docker logs -f hbbs