前言
在远程办公、技术支持、家庭协助等场景中,TeamViewer、ToDesk 等远程控制工具广受欢迎。但你是否也遇到过这些困扰:
- 免费版限制越来越多?
- 商业用途风险被封?
- 数据中转经过第三方,安全性存疑?
- 卡顿延迟
这里我们介绍一款开源、安全、免费的远程控制系统 ------ RustDesk ,只需要有一个公网 ip,就可以搭建自己的 RustDesk Server,完全替代传统远控工具!
为什么选择 RustDesk?
RustDesk 是一款用 Rust 开发的开源远程桌面工具,功能类似于 TeamViewer / ToDesk,但具有以下优势:
- ✅ 自建服务器,数据全程私有化传输
- ✅ 完全免费,无商业限制
- ✅ 支持 Windows、macOS、Linux、Android、iOS 多平台
- ✅ 支持文件传输、剪贴板共享、多窗口等丰富功能
- ✅ 开源透明,安全可控
RustDesk
RustDesk github 地址:github.com/rustdesk/ru... 。
RustDesk server 如何工作?
安装好的 Rustdesk server 有两个可执行程序 hbbs 和 hbbr。
hbbs
- RustDesk ID (rendezvous / signaling) server,监听 TCP(21114 - 仅适用于 Pro 中的 http,21115、21116、21118 用于 Websocket)和 UDP (21116)hbbr
- RustDesk 中继服务器,监听 TCP(21117、21119 用于 Web 套接字)
以下是 RustDesk 客户端如何与 hbbr / hbbs 通信流程图: github.com/rustdesk/ru...


只要 RustDesk 在机器上运行,机器就会不断 ping ID 服务器(hbbs
)以使其当前的 IP 地址和端口为人所知。
当您启动从计算机 A 到计算机 B 的连接时,计算机 A 会联系 ID 服务器并请求与计算机 B 通信。
然后,ID 服务器尝试使用 hole punching 将 A 和 B 直接相互连接。
如果 hole punching 失败,A 将通过中继服务器(hbbr
)与 B 通信。
在大多数情况下,hole punching 是成功的,并且从不使用中继服务器。
RustDesk server 安装
我们需要有一台有公网 ip 的云主机,推荐使用 Linux 系统。
可以使用官方的一键安装脚本也可以使用 docker 安装。
一键安装
bash
wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/install.sh
chmod +x install.sh
./install.sh
安装成功后会在终端输出你的 rustdesk server IP/DNS 和 public key ,这两个需要配置到 RustDesk Client. 另外如果忘记 public key, 可以在/opt/rustdesk 目录查找以 .pub
后缀的文件。

Docker compose 安装
创建配置目录
bash
mkdir -pv /data/rustdesk-server
创建 docker-compose.yaml
yaml
networks:
rustdesk-net:
external: false
services:
hbbs:
container_name: hbbs
ports:
- 21115:21115
- 21116:21116 # 自定义 hbbs 映射端口
- 21116:21116/udp # 自定义 hbbs 映射端口
image: rustdesk/rustdesk-server
command: hbbs
volumes:
- $PWD/hbbs:/root # 自定义挂载目录
networks:
- rustdesk-net
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: hbbr
ports:
- 21117:21117 # 自定义 hbbr 映射端口
image: rustdesk/rustdesk-server
command: hbbr
volumes:
- $PWD/hbbr:/root # 自定义挂载目录
networks:
- rustdesk-net
restart: unless-stopped
启动服务
docker-compose up -d
验证 hbbs,hbbr 容器是否正常运行
docker ps
hbbs 容器第一次启动,会自动生成相关 key 文件在容器的/root 目录,你可在相应的挂载目录查看 public key 内容。

公有云安全组端口放行说明
在搭建 RustDesk Server 时,务必在对应云主机的控制台 安全组 中放行以下端口,以确保服务正常运行:
hbbs 服务所需端口
端口号 | 协议 | 说明 |
---|---|---|
21114 | TCP | 用于 Web 控制台(仅专业版 Pro 可用) |
21115 | TCP | 用于 NAT 类型测试 |
21116 | TCP / UDP | 必须同时启用 TCP 和 UDP,用于 ID 注册、心跳服务(UDP)以及 TCP 打洞、连接服务(TCP) |
21118 | TCP | 用于支持 Web 客户端(可选) |
hbbr 服务所需端口
端口号 | 协议 | 说明 |
---|---|---|
21117 | TCP | 用于中继服务 |
21119 | TCP | 用于支持 Web 客户端(可选) |
注意 :如果你不使用 Web 客户端功能,可以关闭 21118 和 21119 两个端口。
⚠️ 重点:21116 必须同时放行 TCP 和 UDP 协议!

另外云上的云主机默认镜像是不会启用系统防火墙,如果开启 iptables, firewalld 或者 ufw,记得也要放行。
Rustdesk 客户端安装配置
下载对应客户端安装包,安装运行后,RustDesk 客户端界面如下。

在你的 ID 右上角点击设置,选择网络。

点击解锁网络设置,输入密码验证成功后,然后点击 ID/中继服务器。填写两项:
- ID 服务器:云服务公网 ip
- Key:hbbs/id_ed25119.pub 内容

主控端和被控端的 ID/中继服务器都需要一样的配置。
连接测试
在主控端输入被控端的 ID 和一次性密码,也可以在被控端配置设置固定密码和 2FA。

我使用的云服务器是阿里云 2C2G 3M 带宽配置的 ECS,RustDesk 显示 Delay 平均在 30 ms 以下,体验非常好。比之前使用的 TeamViewer、ToDesk 好太多了。

