吴志勇的博客 吴志勇的博客
  • h5

    • HTML5&CSS3
  • scss

    • css预处理语言
  • JavaScript

    • JavaScript教程
    • Ajax
    • ES6教程
    • NodeJS
    • Typescript
  • 框架

    • Jquery
    • VUE
    • React
  • Swing专题
  • java基础
  • javaweb
  • 框架
  • 数据库
  • netty
  • 设计模式
  • 微服务及架构
  • 云原生
  • maven
  • 单元测试
工具
我的
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

吴志勇

......
  • h5

    • HTML5&CSS3
  • scss

    • css预处理语言
  • JavaScript

    • JavaScript教程
    • Ajax
    • ES6教程
    • NodeJS
    • Typescript
  • 框架

    • Jquery
    • VUE
    • React
  • Swing专题
  • java基础
  • javaweb
  • 框架
  • 数据库
  • netty
  • 设计模式
  • 微服务及架构
  • 云原生
  • maven
  • 单元测试
工具
我的
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 运维

    • linux&shell
    • Docker教程
    • git
    • Jenkins教程
    • 正则表达式
    • 一键打包到linux环境
    • vmvare安装虚拟机集群
    • kubesphere部署nacos
    • Vmware安装centos7后网络配置
    • Certbot与Nginx配置SSL证书及自动续签指南
  • VSCode的使用
  • idea热部署
  • vscode+github图床
  • 旧笔记本安装pve+黑群晖
  • 使用阿里云容器镜像服务
  • nvm管理nodejs
  • ollma
  • 虚拟机挂载CentOS挂载本地目录
  • 老毛子Padavan安装应用
  • docker安装firecrawl并使用
  • Python使用UV指南
  • huggingface部署n8n
  • n8n使用飞书作为数据存储
  • frp内网穿透以及服务化
  • rustdesk自建服务
    • 一、 RustDesk 功能特性
    • 二、核心组件与参数解析
    • 三、Docker 安装与使用步骤
      • 前提条件
      • 第一步:拉取 RustDesk 服务器镜像
      • 第二步:创建数据目录并运行 hbbs (ID 服务器)
      • 第三步:运行 hbbr (中继服务器)
      • 第四步:验证安装
    • 四、使用 Docker Compose 安装 (推荐方式)
    • 五、客户端配置
    • 五、一些功能上的问题
      • 1. 如何使用内网穿透(TCP隧道)功能?
      • 2. 如何确保使用 P2P 而不是中继?
      • 3. 可以传输文件吗?
      • 4. 什么是 "允许 IP 直接访问"?
      • 5. RustDesk API 服务简介与推荐
  • 工具
wuzhiyong
2026-03-20

rustdesk自建服务

# 使用 Docker 自建 RustDesk 远程桌面服务

本文档旨在帮助您使用 Docker 快速部署自己的 RustDesk 开源远程桌面服务。RustDesk 是一款优秀的开源远程桌面软件,可作为 TeamViewer 和 AnyDesk 的替代品。通过自建服务器,您可以拥有一个完全独立、安全且不受限制的远程连接环境。

# 一、 RustDesk 功能特性

RustDesk 作为一个功能齐全的远程桌面解决方案,具备以下核心特性:

  • 跨平台支持: 客户端支持 Windows, macOS, Linux, iOS, Android 以及 Web 端,覆盖了绝大多数使用场景。
  • 数据安全: 所有通信流量都经过端到端的加密,确保您的数据在传输过程中的安全。自建服务意味着数据完全由您自己掌控。
  • 高性能: 底层采用 Rust 语言编写,保证了其运行效率和稳定性,提供低延迟的远程桌面体验。
  • 文件传输: 在远程会话中可以方便地与远程计算机互传文件。
  • 内置 TCP 隧道: 可以轻松设置 TCP 隧道,用于内网穿透等高级功能。
  • 完全开源: 无论是客户端还是服务器端都是开源的,您可以自由审查、修改和部署。
  • 自定义: 您可以自定义客户端的界面,包括 Logo、名称等,打造属于您自己或公司的品牌。

# 二、核心组件与参数解析

RustDesk 服务器主要由两个核心服务组成:hbbs 和 hbbr。

  • hbbs - ID/注册服务器 (ID/Rendezvous Server)

    • 功能: 这是 RustDesk 的入口服务。它负责处理客户端的 ID 注册、心跳维持和连接协商。当您在客户端输入对方的 ID 时,hbbs 会帮助两个客户端找到彼此并尝试建立直接连接(P2P)。
    • 默认端口: 21115 (TCP, 用于NAT类型测试), 21116 (TCP/UDP, 用于ID注册和心跳服务), 21118 (TCP, 用于Web客户端支持)。
  • hbbr - 中继服务器 (Relay Server)

    • 功能: 当两个客户端因为网络限制(如处于复杂的 NAT 网络后)而无法建立直接的 P2P 连接时,hbbr 会作为中继,转发它们之间的所有通信流量。
    • 默认端口: 21117 (TCP, 用于中继服务), 21119 (TCP, 用于Web客户端支持)。

# 三、Docker 安装与使用步骤

请按照以下步骤操作。由于您在 Windows 环境下操作,我们将省略 sudo 并调整网络参数。

# 前提条件

  1. 已安装 Docker Desktop for Windows。
  2. 确保您的防火墙或云服务商的安全组策略已放行以下端口:
    • TCP: 21115, 21116, 21117, 21118, 21119
    • UDP: 21116

# 第一步:拉取 RustDesk 服务器镜像

打开 PowerShell 或 CMD,执行以下命令来从 Docker Hub 拉取最新的官方镜像。

docker image pull rustdesk/rustdesk-server
1

# 第二步:创建数据目录并运行 hbbs (ID 服务器)

首先,在您喜欢的位置创建一个用于存放数据的文件夹,例如 /root/rustdesk。

mkdir /root/rustdesk
cd /root/rustdesk
1
2

然后,运行 hbbs 容器。注意,我们移除了 --net=host 并使用 -p 参数来手动映射端口。

  • -td: 这是 -t 和 -d 的组合。-d (detached) 表示在后台运行容器(守护式运行),-t (tty) 为容器分配一个伪终端。组合使用可以确保容器在后台稳定运行。
  • --net=host: 这个选项让容器直接共享宿主机的网络命名空间。容器将不会拥有自己独立的IP地址,而是直接使用宿主机的IP地址和端口。这样做的好处是性能更好,并且无需手动进行端口映射(-p 参数)。注意:此选项在 Windows 和 macOS 的 Docker Desktop 上不生效,主要用于 Linux 环境。在 Windows 上部署时应移除此参数,并改用 -p 参数手动映射端口。
docker run --name hbbs -v /root/rustdesk:/root -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -td --restart unless-stopped rustdesk/rustdesk-server hbbs -r [你的域名或公网IP]
1

# 第三步:运行 hbbr (中继服务器)

接着运行 hbbr 容器。它会使用与 hbbs 相同的持久化数据目录。

docker run --name hbbr -v /root/rustdesk:/root -p 21117:21117 -p 21119:21119 -td --restart unless-stopped rustdesk/rustdesk-server hbbr
1

# 第四步:验证安装

执行 docker ps 命令,您应该能看到 hbbs 和 hbbr 两个容器都处于 Up 状态。

> docker ps
CONTAINER ID   IMAGE                      COMMAND   CREATED         STATUS         PORTS                                                                       NAMES
...            rustdesk/rustdesk-server   "hbbr"    ...             Up ...         0.0.0.0:21117->21117/tcp, 0.0.0.0:21119->21119/tcp                           hbbr
...            rustdesk/rustdesk-server   "hbbs"    ...             Up ...         0.0.0.0:21115->21115/tcp, 0.0.0.0:21116->21116/tcp, 0.0.0.0:21118->21118/tcp   hbbs
1
2
3
4

同时,检查 /root/rustdesk 目录,您会发现 Docker 自动生成了一些配置文件,特别是以 id_ed25519 命名的公钥(.pub)和私钥文件。请务必妥善保管这些文件,尤其是私钥!

# 四、使用 Docker Compose 安装 (推荐方式)

如果您希望管理更加方便,可以使用 docker-compose.yml 文件。在您的数据目录下创建该文件:

version: '3'

services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r xxxxxx.com -k _
    volumes:
      - ./data:/root
    network_mode: "host" # Linux 推荐使用 host 模式
    # 如果是 Windows/macOS,请注释掉 network_mode 并取消下面 ports 的注释
    # ports:
    #   - 21115:21115
    #   - 21116:21116
    #   - 21116:21116/udp
    #   - 21118:21118
    restart: unless-stopped
    depends_on:
      - hbbr

  hbbr:
    container_name: hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr -k _
    volumes:
      - ./data:/root
    network_mode: "host"
    # ports:
    #   - 21117:21117
    #   - 21119:21119
    restart: unless-stopped
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

参数说明:

  • -k _: 这个参数非常重要。它强制要求客户端必须配置正确的 Key 才能连接。这能有效防止未经授权的用户占用您的服务器带宽。

启动命令:

docker-compose up -d
1

# 五、客户端配置

客户端下载地址:

蓝奏云 (opens new window) 密码:6v3z

现在您的服务器已经运行起来了。打开 RustDesk 客户端,进行如下配置:

  1. 点击您ID右侧的三个点 ... 菜单。

  2. 选择 "ID/中继服务器"。

  3. 在 "ID 服务器" 输入框中,填入您服务器的公网 IP 地址或域名(例如 your-server-ip)。

  4. 将 "中继服务器" 和 "API 服务器" 留空,客户端会自动推断。

  5. 在 "Key" 输入框中,填入您服务器上 /root/rustdesk\id_ed25519.pub 文件中的公钥内容。

  6. 点击 "确定" 保存。

    image-20260313114127101

配置完成后,客户端标题栏的下方会显示 "就绪" 以及一个绿色的圆点,表示已成功连接到您自己的服务器。现在您可以开始享受安全、独立的远程桌面服务了。

# 五、一些功能上的问题

# 1. 如何使用内网穿透(TCP隧道)功能?

RustDesk 本身的设计初衷就是为了实现内网穿透。只要您的 hbbs 和 hbbr 服务器部署在拥有公网 IP 的服务器上(或通过路由器做了端口映射),处于任何内网环境下的客户端都可以通过该服务器建立连接。

步骤:

  • 在远程控制窗口的菜单中,您可以找到 "TCP 隧道"。
  • 这允许您将远程机器上的某个端口(如 3389 RDP 端口或 80 网页端口)映射到本地机器的端口上,实现类似 SSH Tunnel 的功能。

TCP 隧道允许您将远程计算机上的某个端口映射到您本地的端口,从而安全地访问远程内网的服务(如 SSH、RDP、数据库、Web 服务等)。

使用场景举例: 假设您有一台位于办公室的电脑 A(受控端),它所在的内网中还有一台只对内网开放的 GitLab 服务器(地址为 192.168.1.100:80)。您希望在家里的电脑 B(控制端)上直接访问这个 GitLab。

操作步骤:

  1. 建立远程连接: 从电脑 B 远程控制电脑 A。
  2. 设置隧道: 在远程控制窗口的顶部菜单栏,找到并点击 "TCP 隧道"。
  3. 添加隧道规则:
    • 本地端口: 填入您希望在本地(电脑 B)监听的端口,例如 8080。
    • 远程 IP: 填入目标服务在远程内网中的 IP,即 192.168.1.100。
    • 远程端口: 填入目标服务在远程内网中的端口,即 80。
    • 点击 "添加"。
  4. 访问服务: 现在,在您的本地电脑 B 上打开浏览器,访问 http://localhost:8080,您就会发现自己已经可以访问办公室的 GitLab 页面了。

# 2. 如何确保使用 P2P 而不是中继?

RustDesk 总是会优先尝试 P2P (点对点) 直接连接。只有在 P2P 连接尝试失败后,才会自动切换到 中继 (Relay) 模式。

RustDesk架构图

要提高 P2P 连接的成功率,请确保:

  • 放行 UDP 21116 端口: P2P 打洞(NAT Hole Punching)高度依赖 UDP 协议。如果该端口仅开启了 TCP,将无法进行 P2P 连接。
  • 网络环境: P2P 的成功率取决于两端网络 NAT 类型(如对称型 NAT 较难打洞)。
  • 查看状态: 在连接成功后,点击顶部的状态图标,如果显示 "直接连接"(Direct Connection),则说明当前是 P2P 模式;如果显示 "通过中继服务器连接"(Relay Connection),则说明当前是中继模式。

什么是udp打洞:

它是实现 P2P 直连 的核心技术。

  • 原理: 当两个客户端都处于 NAT(路由器)后时,服务器(hbbs)会协助它们交换内网和外网的 IP 及端口信息。然后两个客户端尝试直接向对方发送 UDP 包。如果成功,数据将直接在两个客户端之间传输,不再经过您的服务器。
  • 优势: 极低延迟,不消耗服务器带宽。
  • 建议: 在客户端设置中勾选 "启用 UDP 打洞",并确保服务器的 UDP 21116 端口已放行。

# 3. 可以传输文件吗?

可以。 RustDesk 提供了两种文件传输方式:

  • 专门的文件传输模式: 在发起连接前,可以选择 "文件传输" 而不是 "远程控制"。这会打开一个类似 FTP 客户端的左右双栏界面,方便批量管理文件。
  • 远程控制中传输: 在远程控制窗口中,您可以直接通过顶部菜单的 "传输文件" 功能进行操作,或者简单的通过剪贴板复制粘贴文件(取决于客户端支持情况)。

# 4. 什么是 "允许 IP 直接访问"?

这个功能允许客户端 绕过 ID 服务器 直接通过 IP 地址进行连接。

  • 使用场景:
    1. 局域网内连接: 两台电脑在同一个路由器下,直接通过局域网 IP (如 192.168.1.x) 连接,速度极快。
    2. 固定公网 IP: 如果受控端有固定公网 IP 且映射了端口(默认 21118),您可以直接输入该 IP 连接。
  • 设置方法: 勾选 "允许 IP 直接访问",然后在连接端输入 IP:端口。

# 5. RustDesk API 服务简介与推荐

在基础的 RustDesk 部署中,hbbs 和 hbbr 只负责连接通讯,无法实现地址簿同步、用户登录、设备备注、在线状态等功能。为此,你可以部署 API 服务,为 RustDesk 提供账户管理、地址簿同步、设备标签、在线状态显示和安全策略等能力,相当于为远程桌面加上“大脑”和“数据库”。

目前主流的 API 服务有:

  • rustdesk-api (opens new window) (推荐):Go 语言开发,轻量高效,支持地址簿、在线状态、用户管理、设备备注和 Web 管理后台。
  • rustdesk-api-server (opens new window):Python 开发,功能全面,支持完整 API 和 Web 管理界面,便于多用户和设备管理。

官方 API 服务(Pro版)为付费,以上开源方案均支持 Docker 一键部署。

客户端配置 API 服务方法:

  1. 部署好 API 服务(如 http://your-server-ip:8080)。
  2. 打开 RustDesk 客户端,进入 设置 -> 网络 -> ID/中继服务器。
  3. 在 API 服务器 一栏填入你的 API 服务地址(如 http://your-server-ip:8080)。
  4. 回到主界面,点击左侧“未登录”,用 API 服务后台账号登录。
  5. 登录后,远程设备列表、备注等信息将自动同步,无需担心丢失。
上次更新: 2026-03-20 01:34:43

← frp内网穿透以及服务化

Copyright © 2020-2026 wuzhiyong
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式