说起来远程桌面这事儿,我之前一直用的 TeamViewer,但最近不知道是网络问题还是咋的,连接质量越来越不稳定,有时候急着用的时候卡在那儿真的心态爆炸。正好看到 GitHub 上有个开源项目叫 RustDesk,11 万+的 Star,用 Rust 写的远程桌面软件,定位就是 TeamViewer 和 AnyDesk 的开源替代品。想着与其年年交订阅费,不如自己搭一个。

这篇文章就记录一下我是怎么在云服务器上部署 RustDesk 服务端的,整个过程不复杂,Docker 一把梭就完事儿了。

什么是 RustDesk

先简单介绍一下。RustDesk 是个开源的远程桌面软件,核心特点:

  • 完全自托管:服务端自己搭,数据不经过第三方
  • 跨平台:Windows、macOS、Linux、iOS、Android、Web 都支持
  • 开箱即用:不需要复杂配置,下载客户端就能用
  • 端到端加密:通信内容加密,安全性有保障
  • 支持 NAT 穿透:能直连就直连,实在不行才走中继

它分为两部分:客户端(你远程控制的设备上安装的软件)和服务端(负责 ID 注册、协商连接、转发数据)。我们今天要部署的就是服务端。

前置准备

服务器选择

既然要 24 小时在线稳定运行,一台云服务器是少不了的。要求不高,官方文档说 1 核 CPU、512MB 内存、10GB 存储就能跑,但实际建议 2 核 2GB 起步,留点余量。系统推荐 Ubuntu 22.04 或 24.04 LTS。区域的话,选香港最好,不用搞docker镜像。

服务器厂商的话,腾讯云、阿里云、雨云这些都可以考虑,我用的是雨云,注册时邀请码填 techaser有新人折扣,看自己预算选就行。

雨云官网:https://rainyun.com

需要开放的端口

RustDesk 服务端主要用到这几个端口:

端口 协议 用途
21115 TCP ID 注册
21116 TCP/UDP 心跳和直连穿透
21117 TCP 中继转发

大厂的云服务器要在云服务器的安全组里把这几个端口放行,UDP 也要开,别只放 TCP。

部署服务端

服务端部署有两种方式:直接运行二进制文件,或者用 Docker。我推荐 Docker,一行命令搞定更新维护。

1. 安装 Docker

雨云的服务器比较方便,可以直接在服务器管理面板装docker。到那个“重装/安装系统和软件”里有docker可以选。

如果你是别的厂的服务器,先装一下Docker:

# 安装 Docker
curl -fsSL https://get.docker.com | bash

# 确认安装成功
docker --version
docker compose version

2. 创建目录和 docker-compose.yml

在服务器上找个地方建目录:

mkdir -p /opt/rustdesk-server/data
cd /opt/rustdesk-server

然后创建 docker-compose.yml

version: "3.8"

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

这里有个关键点:必须用 network_mode: "host",不能改成端口映射。RustDesk 的协议设计需要直接读取宿主机的网络接口信息,用 NAT 的话客户端会无法正确识别。

3. 启动服务

docker compose up -d

查看容器状态:

docker ps

确保 hbbs 和 hbbr 两个容器都在运行。如果状态不对,用 docker logs hbbs 和 docker logs hbbr 看日志排查。

4. 获取公钥

服务端启动后,会在 ./data 目录生成一对 Ed25519 密钥。我们需要把公钥拿出来,后面配置客户端要用到:

cat /opt/rustdesk-server/data/id_ed25519.pub

这会输出一行 Base64 字符串,复制下来备用。私钥 id_ed25519 留在服务器上就行,不要外泄。

5. 配置防火墙

确保云服务器的安全组放行了 21115-21117 的 TCP 和 UDP 流量。另外在服务器内部也可以用 ufw 确认一下:

sudo ufw allow 21115/tcp
sudo ufw allow 21116/tcp
sudo ufw allow 21116/udp
sudo ufw allow 21117/tcp
sudo ufw reload

配置客户端

服务端跑起来之后,就可以在各种设备上安装客户端了。

下载客户端

RustDesk 客户端下载地址:

Windows、macOS、Linux 直接下载对应安装包;手机去 App Store / Google Play / F-Droid 搜 "RustDesk" 就行。

连接自建服务器

打开客户端,点击右上角的三个点菜单,选择「网络」:

  • ID 服务器:填你的服务器 IP 或域名,例如 你的服务器IP:21115
  • Key:粘贴刚才从服务端获取的公钥

填完点确定,客户端会自动重连。连接成功的标志是底部状态栏显示你的服务器地址,而不是官方的公共节点。

测试连接

在两台设备上分别配置同一个服务端,然后用其中一台去连接另一台的 ID。第一次连接会提示「是否信任此设备」,确认后以后就自动放行了。

实测下来,直连的话延迟很低,体验和 TeamViewer 差别不大。如果双方都在复杂网络环境下,直连失败会自动走中继,速度会慢一些但能用。

进阶配置

设置开机自启(systemd)

如果你不想用 Docker,也可以直接跑二进制文件,然后用 systemd 管理:

sudo nano /etc/systemd/system/rustdesk-hbbs.service

写入:

[Unit]
Description=RustDesk HBBS (ID Server)
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/rustdesk-bin
ExecStart=/opt/rustdesk-bin/hbbs -r 你的服务器IP:21117
Restart=on-failure
User=root

[Install]
WantedBy=multi-user.target

同理创建 rustdesk-hbbr.service,然后:

sudo systemctl daemon-reload
sudo systemctl enable rustdesk-hbbs rustdesk-hbbr
sudo systemctl start rustdesk-hbbs rustdesk-hbbr

强制使用中继

如果网络环境复杂,直连一直失败,可以在 hbbs 的启动命令里加个参数强制走中继:

hbbs:
  command: hbbs -r 你的服务器IP:21117
  environment:
    - ALWAYS_USE_RELAY=Y

使用场景

自建 RustDesk 服务端之后,应用场景还挺多的:

  • 远程办公:在家里连公司的电脑,或者反过来
  • 技术支援:帮家人朋友处理电脑问题,不用跑过去
  • 服务器管理:图形化操作,比纯 SSH 方便
  • 家庭影院控制:用手机控制客厅的 HTPC

完全私有化之后,数据都在自己手上,不用担心第三方服务抽风或者隐私问题。

总结

RustDesk 是个认真的开源项目,代码质量不错,社区活跃度也高。服务端用 Docker 部署非常简单,几分钟就能跑起来。如果你也在找 TeamViewer 的替代方案,或者有远程控制的需求,值得试试看。


有问题欢迎评论区交流,看到会回。

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐