惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

www.infosecurity-magazine.com
www.infosecurity-magazine.com
D
DataBreaches.Net
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
F
Full Disclosure
V2EX - 技术
V2EX - 技术
N
News and Events Feed by Topic
Help Net Security
Help Net Security
L
LangChain Blog
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
Google Online Security Blog
Google Online Security Blog
P
Proofpoint News Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
B
Blog RSS Feed
N
Netflix TechBlog - Medium
N
News | PayPal Newsroom
TaoSecurity Blog
TaoSecurity Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Vulnerabilities – Threatpost
B
Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
I
Intezer
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园_首页
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
AI
AI
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cyberwarzone
Cyberwarzone
P
Proofpoint News Feed
Google DeepMind News
Google DeepMind News
G
GRAHAM CLULEY
Vercel News
Vercel News
罗磊的独立博客
MyScale Blog
MyScale Blog
Last Week in AI
Last Week in AI
博客园 - 司徒正美
C
CERT Recently Published Vulnerability Notes
GbyAI
GbyAI
Scott Helme
Scott Helme
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Troy Hunt's Blog
A
About on SuperTechFans
P
Privacy International News Feed

Liups233の小站

YubiKey OpenPGP 智能卡使用指南 - Liups233の小站 通过 WKD / OPENPGPKEY DNS 记录部署 GPG 公钥 - Liups233の小站 OpenLiteSpeed 安装与建站配置 详细教程 - Liups233 使用 DNSCrypt-Proxy 为 Linux 配置加密 DNS - Liups233 WordPress 7.0 编辑器改回无衬线字体 - Liups233の小站 Redis 数据库权限与 Unix Socket 配置 - Liups233の小站 Cloudflare 设置 mTLS 验证来源拉取 - Liups233の小站 ChatGPT Go 印度区免费试用白嫖 1 年 - Liups233の小站 使用 S/MIME 证书签名并加密电子邮件 - Liups233の小站 为 WordPress 外发邮件添加 S/MIME 签名 - Liups233の小站 网站域名变更迁移教程/记录 - Liups233の小站 将动漫视频刻录为视频光盘-蓝光/AVCHD DVD - Liups233の小站 百乐 CUSTOM 912 钢笔使用体验 - Liups233の小站 使用 Cloudflare mTLS 用户端凭证保护博客登入页面 - Liups233の小站 Kobo 手动安装 NickelMenu 和 KOReader - Liups233の小站 Kobo 阅读器字典缺字解决 - Liups233の小站 iCloud+ 域名邮箱的注册和使用 - Liups233の小站 9 美元一年的通配符 SSL 证书 - Liups233の小站 宝塔面板 Nginx 启用 Brotli 和 Pagespeed - Liups233の小站 拷贝 DVD/Blu-ray 光盘并使用 MeGUI 压制 - Liups233の小站 Spotify 相较 Apple Music 的优点 - Liups233の小站 欧卡/美卡自定义手排挡位布局 - Liups233の小站 内地居民到港开户汇丰和中银香港全过程 - Liups233の小站 给光驱刷入 LibreDrive 固件解锁区域和加密限制 - Liups233の小站 个人博客适用的 Cloudflare 防火墙和缓存规则 - Liups233の小站 为Kobo阅读器添加Google Drive和Dropbox功能 - Liups233の小站 百乐 PILOT Capless Fermo 钢笔评测 - Liups233の小站 业余无线电 B 类考试笔记 - Liups233の小站 黑白阅读器的绝唱?Kobo Clara BW 简单评测 - Liups233の小站 八重洲 WIRES-X 网络注册与使用教程 - Liups233の小站 异世的同路人 — 恋语 Juliamo 游戏简评 - Liups233の小站 欢迎加入我的 FreeDMR 服务器 - Liups233の小站 低至 6 港币一年的 Club SIM eSIM 保号卡 - Liups233の小站 H310/H710(P)/H810 阵列卡刷写为直通模式 - Liups233の小站
Docker 自建 RustDesk 远程和 API 服务 - Liups233の小站
Liups233 · 2026-05-03 · via Liups233の小站

前言

RustDesk 是一个开源的远程桌面软件,可以通过自建服务器的方式,通过远程连接访问电脑。本教程将说明如何通过 Docker 的方式快速部署 RustDesk 服务,以及如何通过 API 服务在不同设备之间快速进行远程连接。写这个教程的原因是网上的大部分教程都太零散,特别是没有对 API 服务的详细说明,希望这个教程能帮助到你。

本教程默认的环境是没有 443 端口的家宽下的内网服务器。就算你是有 443 的云服务器,也可以参考。

封面图来自 RustDesk Documentation

目录

架构说明

RustDesk 架构中包含两个服务:hbbs ID 服务和 hbbr 中继服务。其中,在 ID 服务里还包含一个 Web 控制台,可以方便进行用户设置。RustDesk 的架构图如下:

RustDesk 架构
RustDesk 架构

具体解释如下(转自 RustDesk 自建服务器部署和使用教程 – 米开朗基杨 – 博客园):

  1. 客户端 – 服务器模型
    在 RustDesk 的架构中,客户端是运行在用户设备 (如笔记本电脑、平板电脑或智能手机) 上的应用程序。它提供了一个图形界面,允许用户发起远程访问请求并与远程计算机进行交互。另一方面,服务器组件运行在要远程访问的目标计算机上。它负责监听来自客户端的连接请求,并在建立连接后向客户端发送屏幕更新和接收输入事件。
  2. ID Server 的角色
    ID Server 在 RustDesk 的生态系统中扮演着重要的角色。它的主要职责是促进客户端和服务器之间的初始连接建立。当 RustDesk 服务器启动时,它会连接到 ID Server 并注册自己,提供如服务器 ID 和公网 IP 地址等信息。类似地,当客户端想要连接到特定的 RustDesk 服务器时,它会向 ID Server 查询目标服务器的连接信息。 ID Server 维护了一个已注册的 RustDesk 服务器目录,并充当客户端和服务器之间的中介,帮助它们建立直接的点对点(P2P)连接。一旦客户端从 ID Server 获得了服务器的连接信息,它就可以尝试直接连接到服务器,而无需进一步通过 ID Server 中继数据。
  3. Relay Server 的角色
    在某些网络环境下,RustDesk 客户端和服务器可能无法直接建立 P2P 连接,例如当它们位于 NAT (网络地址转换) 或防火墙后时。为了克服这一挑战,RustDesk 引入了 Relay Server。 如果客户端无法直接连接到服务器,它会向 ID Server 请求一个 Relay Server。然后,客户端和服务器都连接到指定的 Relay Server,并通过它来中继所有的网络通信。Relay Server 在这种情况下充当客户端和服务器之间的桥梁,转发来自一方的数据包到另一方。 值得注意的是,即使通过 Relay Server 进行通信,RustDesk 也会维护端到端加密,确保中继服务器无法访问明文数据。Relay Server 只是盲目地转发加密的数据包,而不能查看或修改其内容。

端口映射

配置前,需要先在服务器上开放以下端口:

  • 21114/TCP
  • 21115/TCP
  • 21116/TCP&UDP
  • 21117/TCP
  • 21118/TCP
  • 21119/TCP

以下以 Red Hat Enterprise Linux 9 进行 Docker 安装的说明,其它发行版请参照 Install | Docker Docs

先执行以下命令来卸载可能有的 Docker,避免冲突。如果是全新的系统,大概率是没有任何 Docker 组件的。

sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
podman \
runc

然后执行这三条命令来添加 Docker 软件源:

sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf update

在执行命令来安装 Docker:

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

如果显示需要确认 GPG Key,请前往 Docker 官方的安装教程确认最新的 GPG 密钥指纹。截至教程最后一次更新时,GPG 密钥指纹为 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35

安装完成后,执行 sudo systemctl enable --now docker 来启动 Docker 服务,并设置开机自启。如果不希望开机自启,就执行 sudo systemctl start docker 来启动 Docker 服务。

要确认 Docker 安装正确,并且网络通畅,执行 sudo docker run hello-world 可以试运行一个简易的测试镜像,有输出就行。至此,Docker 安装结束。

编排容器

为了快速配置,本教程使用 RustDesk Server 官方仓库的一个分支版本,仓库地址为 https://github.com/lejianwen/rustdesk-api。至于风险就需要自己评估了,不建议用于生产服务器,或者和生产环境做好隔离。

以将容器部署到 /opt/rustdesk-server-s6 目录为例,执行以下命令:

sudo mkdir /opt/rustdesk-server-s6 && cd /opt/rustdesk-server-s6
sudo touch docker-compose.yml

然后将以下内容粘贴进创建的 docker-compose.yaml。其中,<DOMAIN> 需要更改为服务器的域名或 IP。

services:
  rustdesk:
    image: lejianwen/rustdesk-server-s6:latest
    ports:
      - 21114:21114
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
      - 21117:21117
      - 21118:21118
      - 21119:21119
    environment:
      - RELAY=<DOMAIN>:21114
      - ENCRYPTED_ONLY=1
      - MUST_LOGIN=N
      - TZ=Asia/Shanghai
      - RUSTDESK_API_RUSTDESK_ID_SERVER=<DOMAIN>:21116
      - RUSTDESK_API_RUSTDESK_RELAY_SERVER=<DOMAIN>:21117
      - RUSTDESK_API_RUSTDESK_API_SERVER=https://<DOMAIN>:21114
      - RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub
      - RUSTDESK_API_JWT_KEY= # jwt key
    volumes:
      - ./data/server:/data
      - ./data/api:/app/data
    networks:
      - rustdesk-net
    restart: unless-stopped

networks:
  rustdesk-net:
    external: false

然后使用 sudo docker compose up -d 来启动容器编排。启动后,输入 sudo docker compose logs | grep Password 来查看生成的随机管理员密码,用来登入后台。

此外,还需要获取连接公钥。通过 cat ./data/server/id_ed25519.pub 查看公钥内容,然后复制备用,在配置控制端和被控端的时候会用到。

后台管理

访问 http://<服务器 IP>:21114 即可打开 RustDesk 后台,用户名为 admin,密码为刚才生成的随机密码。打开后,在左侧 系统>用户管理 中,可以修改 admin 用户的密码,点击右侧的「重置密码」即可。也可以创建新用户,给其他人使用。

系统>设备管理 中,可以查看连接过的设备。如果历史设备过多,可以在这里删除最近用不到的。

RustDesk 使用

前往 https://github.com/rustdesk/rustdesk/releases/latest 下载对应版本的 RustDesk 并安装,控制端和被控端都要安装。

网络设置

注意:控制端和被控端都需要进行以下的网络设置

在左侧找到网络设置,点击「解锁网络设置」,再点击「ID/中继服务器」,如图:

rustdesk net setting
RustDesk 网络设置

然后填写以下内容:

  • ID 服务器:<服务器公网 IP 或域名>:21116
  • 中继服务器:<服务器公网 IP 或域名>:21117
  • API 服务器:http://<服务器公网 IP 或域名>:21114
  • Key:(填写 id_ed25519.pub 公钥中的内容)

小提示:在这里可以点击右上角的复制和粘贴键,可以快速导出导入网络配置

无人值守密码配置

注意:只有被控端需要进行固定密码设置

在左侧找到安全设置,点击「解锁安全设置」,往下翻找到密码,将密码选项改为「使用固定密码」,再点击「设置固定密码」。由此一来,连接到这个设备使用的密码就是固定的了。

另外,如果需要更安全,可以启用下方的 2FA 双重认证功能。启用后,连接到该被控端就需要输入一个 TOTP 密码。

控制端关闭被控功能

默认情况下,安装好 RustDesk 后,都会默认启用被控功能,但通常情况下控制端是不需要被控制的。进入设置,点击左侧的常规,在服务一栏中点击「停止」,即可关闭被控功能。

由此一来,控制端就不会被控制了,同时也不会显示在设备列表中(如果还是有,就手动在 RustDesk 后台删掉)。

账户

注意:控制端和被控端都需要进行账户设置

回到主页,点击中间的第五个按钮,即可登入:

  • 用户名:admin(也可以登入别的账户)
  • 密码:(你设置的密码)
RustDesk 登入账户
RustDesk 登入账户

当控制端和被控端都登入账户后,回到主页,点击中间的第五个按钮,控制端就可以看到该账户下可以连接的设备了。双击进行连接后,会提示输入被控端设置的固定密码,即可连接。

待解决的问题

  • HTTPS 配置(21114 端口,涉及后台网页和 API 服务)

很久没写文章了,主要最近忙着上班实习,学校也有很多事情,感觉越来越忙了。这篇文章其实也是从我在公司写的操作文档里摘取出来的,希望能帮到你,欢迎到我 主页 看更多。