开源远程桌面解决方案:RustDesk自建服务器详解
前言
远程操控类软件并不少,比如推荐过的 ToDesk,还有老牌的 TeamViewer、向日葵、微软远程桌面、AnyDesk 等,但这些工具大多数商业化、免费限制多,或服务器在国外连接卡顿不流畅。
但如果你还是想找一款“免费开源”的远程控制软件来替代这些商业软件,RustDesk 正是一个好选择!它完全免费可商用、跨平台、功能丰富不限速,甚至你还能自建中继服务器,不必担心安全和网速问题!可以说是解决了大家对远控软件的很多痛点……
什么是 RustDesk?
RustDesk 是一个强大的开源远程桌面软件,它使用 Rust 编程语言构建,提供安全、高效、跨平台的远程访问体验。
RustDesk 软件轻量小巧,界面清爽,跨平台支持 Windows、Mac、Linux 和 iOS、Android 系统,也提供网页版客户端,支持文件传输、可调整画面质量、端到端加密、支持局域网发现、支持 IP 白名单、剪贴板互通 (复制粘贴文件)、收发文本消息等功能。
它跟 ToDesk、TeamViewer、AnyDesk 等软件一样简单易用,无需任何配置,也不必像微软远程桌面那样考虑内网穿透的情况,能轻松实现各种远程办公、远程教学/演示,或者是远程协助/技术支持等工作。
然而现在有一个坏消息:由于被诈骗分子频繁使用,该项目现已暂停国内服务。
好在 RustDesk 有一个很关键的特性就是它允许用户自建服务器,从而在使用 RustDesk 时获得更多的控制权和隐私保护。所谓自建服务器,也就是自建 ID Server 和 Relay Server,至于什么是 ID Server 和 Relay Server,下面我们会给大家详细介绍,并提供一步步的指南来帮助你设置自己的 ID Server 和 Relay Server。
RustDesk 架构
要理解自建服务器的重要性,首先需要对 RustDesk 的架构有一个全面的了解。RustDesk 采用了经典的客户端-服务器模型,其中涉及三个主要组件:RustDesk 客户端、RustDesk 服务器和 ID Server。
客户端-服务器模型
在 RustDesk 的架构中,客户端是运行在用户设备上的应用程序。它提供了一个图形界面,允许用户发起远程访问请求并与远程计算机进行交互。另一方面,服务器组件运行在要远程访问的目标计算机上。它负责监听来自客户端的连接请求,并在建立连接后向客户端发送屏幕更新和接收输入事件。
ID Server 的角色
ID Server 在 RustDesk 的生态系统中扮演着重要的角色。它的主要职责是促进客户端和服务器之间的初始连接建立。当 RustDesk 服务器启动时,它会连接到 ID Server 并注册自己,提供如服务器 ID 和公网 IP 地址等信息。类似地,当客户端想要连接到特定的 RustDesk 服务器时,它会向 ID Server 查询目标服务器的连接信息。
ID Server 维护了一个已注册的 RustDesk 服务器目录,并充当客户端和服务器之间的中介,帮助它们建立直接的点对点 (P2P) 连接。一旦客户端从 ID Server 获得了服务器的连接信息,它就可以尝试直接连接到服务器,而无需进一步通过 ID Server 中继数据。
Relay Server 的角色
在某些网络环境下,RustDesk 客户端和服务器可能无法直接建立 P2P 连接,例如当它们位于 NAT (网络地址转换) 或防火墙后时。为了克服这一挑战,RustDesk 引入了 Relay Server。
如果客户端无法直接连接到服务器,它会向 ID Server 请求一个 Relay Server。然后,客户端和服务器都连接到指定的 Relay Server,并通过它来中继所有的网络通信。Relay Server 在这种情况下充当客户端和服务器之间的桥梁,转发来自一方的数据包到另一方。
值得注意的是,即使通过 Relay Server 进行通信,RustDesk 也会维护端到端加密,确保中继服务器无法访问明文数据。Relay Server 只是盲目地转发加密的数据包,而不能查看或修改其内容[^1]。
自建服务器
准备工作
有自己的一台服务器,带宽最好3Mbps以上。(推荐是国内服务器,国外UDP协议干扰比较严重);
在服务器上安装 1Panel 面板,非必须(这种方法最简单);
服务器已开启必要的端口:
TCP: 21115, 21116, 21117, 21118, 21119
UDP: 21116
Docker 部署 RustDesk 服务
情形一:安装有1panel 面板
当你安装好 1panel 面板后,在其商店里找到 RustDesk 应用点击安装,之后查看安装日志:
我们在日志中可以找到两个关键信息:Relay Server 和公钥。后面需要用到。
在参数中分别找到 21116 端口和 21117 端口映射的外网端口,其中,21116 是 ID Server 的端口,21117 是 Relay Server 的端口。
情形二:直接 Docker 部署
安装 Docker
如果您的服务器上还没有安装 Docker,请使用以下命令安装:
# 使用清华源,如果是国外云服务器可以不运行这一步
export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce"
# 安装命令
curl -fsSL https://get.docker.com/ | sh
终端输入docker -v
检查是否安装完毕,如果有正确输出版本 ,那么就代表安装成功了。
Docker version 27.1.1, build 6312585
安装 RustDesk 服务
安装好 docker 环境后,直接执行下面两行命令:
docker run --name hbbs -v $(pwd)/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
docker run --name hbbr -v $(pwd)/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr
用下面日志命令,查看远程服务的key我们一会会用到。
docker logs hbbs
检查是否正常运行
控制台输入 docker ps -a
,查看STATUS
状态是否是 Up
;
除过上述手动安装的方式,我们也可以使用科技lion大佬制作的一键脚本进行安装:
安装基础组件
apt update -y && apt install -y curl
{/tabs-item}
{tabs-item CentOS/RedHat/Fedora/AlmaLinux/Rocky Linux}yum update && yum install -y curl
{/tabs-item}
{tabs-item Alpine Linux}apk update && apk add curl
{/tabs-item}
运行脚本
bash <(curl -sL kejilion.sh)
脚本全面支持Ubuntu、Debian,Cent OS和Alpine Linux系统
只要执行命令自动获取最新版本
客户端设置
我这里以 Windows 11 为例,分别在控制端和被控制端的电脑安装 RustDesk,
下载地址:
设置中继服务器
点击窗口右上角 三横线 或 左侧 ID 旁边的 三个点 进入设置页面。
再依次点击: 网络 -> 解锁网络设置
安装完成后,打开 RustDesk,点击上面的三个点,进入配置,找到网络配置;
先解锁网络设置,然后在 ID/中继服务器 中输入你的 <服务器IP>:<ID Server 外网端口>
,在中继服务器中输入你的 <服务器IP>:<Relay Server 外网端口>
,在 Key 中输入你的公钥即可。
如果是默认rustdesk官方推荐的端口,那么只需要填写你的服务器 IP 到 ID 服务器 输入框和Key即可,其他的rustdesk会自动获取,最后点击 “确认” 就可以了。
如果使用docker方式有更改端口,可以按照如下默认端口,找到自己映射的外部端口。
返回主页查看底部状态,如果是绿色圆圈,并且是 就绪两字,就表示成功了。
被控端
被控端设置和控制端使用相同的 ID 服务器、中继服务器和 Key,回到软件首页就可以看到 ID 号和 密码了;
然后在控制端输入被控端的ID号和密码,即可控制另一台设备,十分简单。
测试效果如下图:
总结
RustDesk 最大的亮点在于开源并支持自建中继服务器,可保证网络安全和网速稳定。大家可以根据需求自行搭建,而且有开发能力的朋友还能基于它的源代码进行二次开发。
功能上,远程控制软件该有的功能 RustDesk 基本都齐全,软件小巧轻量,跨平台支持丰富,可以很好满足各种远控办公的需求了。如果你一直在寻找免费可商用、低成本的远程控制软件方案,特别是有能力自建中继,那么 RustDesk 绝对是你个人或公司团队的极佳远程方案。
参考链接
[^1]:
[^2]:
- 感谢你赐予我前进的力量