1
0

Docker 部署 RustDesk,实现满血远控自由

2026-06-18
Docker 部署 RustDesk,实现满血远控自由

云服务器除了挂载个人的技术博客或者跑几个后端容器,其实它还能极大地提升我们的日常办公体验。

今天就来分享一个亲身经历的极其硬核且实用的玩法:利用云服务器自建 RustDesk 远控中继服务,彻底告别商业远控软件的“画质压缩”,打造极其丝滑的专属远程开发环境。

一、 为什么要抛弃商业远控,投入 RustDesk 的怀抱?

目前市面上的主流远控工具,基础的打洞直连能力确实不错。但免费版的痛点也很明显:画质被强制压缩、高峰期网络抖动、时不时弹出的“升级专业版”诱惑。 对于需要长时间远程连回主机看代码、敲终端、看文档的开发者来说,发虚的文字边缘和间歇性的卡顿极其搞心态。

而 RustDesk 作为一个优秀的开源远控方案,最大的杀手锏就是 允许自建中继服务器(Relay Server)

这意味着,远程画面的清晰度和延迟不再受制于官方免费共享节点的拥挤程度,而是完全取决于你手里这台云服务器的带宽。如果你恰好拥有一台按峰值带宽计费(比如 200Mbps)且没有流量限制的轻量云主机,那体验将是对商业免费版的降维打击——你可以毫无顾忌地拉满原画质,享受接近原生局域网的零延迟操作。

二、 客户端极简准备

在控制端和被控端分别前往 RustDesk 官网或 GitHub 下载对应的客户端。

对于 Windows 系统,双击运行下载的 .exe 文件后,注意一定要点击界面上的“安装”按钮,将其正式注册为系统服务。这一步至关重要,它能让远控软件获取系统底层的控制权,完美穿透 Windows 的 UAC 管理员弹窗,并支持开机无人值守自启。

客户端装好后先放在一边,接下来进入重头戏。

三、 云服务器配置:十分钟 Docker 极速部署

RustDesk 底层是用 Rust 编写的,主打极致轻量。即使是一台入门级的 2C2G 服务器,在跑着其他微服务、剩余内存只剩 1GB 的情况下,拿来跑中继服务也绰绰有余(实测双进程常驻内存占用不到 50MB)。

1. 放行防火墙端口

在部署前,必须进入云服务器的控制台,在安全组(或防火墙)中放行以下关键端口:

  • 21115 - 21117 (TCP 协议) —— 用于核心中继和 ID 匹配服务
  • 21116 (UDP 协议) —— 用于 P2P 打洞直连
  • 21118 - 21119 (TCP 协议) —— 用于支持 Web 端远控

如下图所示(注意,阿里云是用斜杠 / 来表示范围):

image-xVrh.png

补充:各个端口的作用

  • 21115 (TCP):用于 NAT 类型测试。主控和被控端靠它来判断当前网络环境,决定是尝试 P2P 直连,还是走服务器中继。
  • 21116 (TCP):TCP 打洞与连接服务。
  • 21116 (UDP)核心心跳端口。被控端和主控端的 ID 注册、心跳保活全靠这个 UDP 端口。如果防火墙漏开了这个 UDP,客户端就会一直显示“未就绪”。
  • 21117 (TCP)核心中继端口。这就是 hbbr 服务专属的通道。当两台电脑无法直连,需要用到带宽进行画面转发时,所有的视频流数据全是从这个端口走的。
  • 21118 / 21119 (TCP):为了支持网页端(Web Client)而设立的 WebSocket 端口。如果以后想在没有安装客户端的电脑上,直接用浏览器远程控制,这两个端口就必须开。

2. 编写 docker-compose.yml

通过 SSH 连入云服务器,新建一个工作目录,并创建 docker-compose.yml 文件。由于我们只需要最核心的免配置打洞和中继功能,不需要花里胡哨的商业版 Web 控制台,部署脚本可以做到极致精简:

version: '3'

networks:
  rustdesk-net:
    external: false

services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs
    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

注:一般写 Docker 配置喜欢用 ports: - "21116:21116" 这种方式去映射端口。但是,远控软件高度依赖获取客户端真实的公网 IP 来进行 P2P 打洞。如果走 Docker 的默认桥接网络(Bridge),经过一层 NAT 转换后,服务端有时会抓取不到真实的 IP,导致打洞失败概率飙升。 而使用 network_mode: "host",意味着这个容器直接与你的云服务器共享同一个网络栈。不但省去了写一长串端口映射的麻烦,还能最大程度保证 P2P 直连的成功率,榨干网络性能。

3. 一键启动

在当前目录下执行拉取和启动命令:

docker compose up -d

不出意外的话,一两分钟后服务端就已经悄无声息地在后台服役了。

四、 双端接入

1.获取服务器生成的“安全秘钥” (Key)

为了防止别人蹭带宽,RustDesk 在启动的一瞬间,自动在服务器里生成了一串加密秘钥。 直接在刚刚配置docker yaml文件的目录下(我的是 ~/RustDesk)敲下这行命令:

cat data/id_ed25519.pub

终端会输出一串类似于 xyz123abc... 的乱码字符串。把这串字符串复制下来,这就是我们的专属 Key。

2.配置被控端

  1. 回到被控电脑的 RustDesk 界面。
  2. 点击 ID 旁边的 三个垂直小点 () -> 选择 “网络” (Network)
  3. 如果看到“解锁网络设置”,点一下解锁。
  4. 现在我们会看到几个输入框,按以下规则填写:
    • ID 服务器 (ID Server): 填入云服务器的公网 IP(例如 123.45.67.89)。
    • 中继服务器 (Relay Server): 填入同一个公网 IP
    • API 服务器: 不填,这是付费版用的。
    • Key: 粘贴你刚刚在终端里复制的那串 秘钥字符串
  5. 点击 “应用”
  6. 验证是否成功: 回到 RustDesk 首页,看最底下那行字。如果变成了纯粹的 “就绪” (Ready)(且前面是个绿色的点),说明被控电脑已经成功挂载到云服务器上了!

3.配置主控端(本地的电脑/平板)

在用来远程操作的设备上,重复上述第二步的完全相同的操作。(填入相同的 IP,相同的 Key)。

4.终极体验时刻!

当两端的底部都显示“就绪”后: 在主控电脑的“控制远程桌面”输入框里,填入被控电脑的 ID,点击连接,输入密码。这时就能丝滑体验远程连接了!

更多有趣的特性及功能使用待之后博客发布~

评论