如何自建RustDesk服务实现零成本远程控制

作者: iswbm / 发表于 2024-06-30 / 分类: Tool

tool

近期在做某项目时,需要在多把手机上跑矩阵账号,有需要时不时登陆到手机上做一些操作的需求,于是就开始研究如何在 iPhone 上低成本地远程操控其他的安卓手机

市面上其实已经有不少成熟的商业软件在做这个事情,但是使用是需要付费的,如果不想多花钱呢,可以使用开源的 RustDesk ,RustDesk 允许自建服务器来实现远程控制手机,而且对于服务器的要求不高,1c1g 的服务器就可以支撑一个小型工作室的远程需求。对于几乎人手一台服务器的开发者来说,自建 RustDesk 就可以满足零成本远程需求。

1. RustDesk 介绍

与 TeamViewer、ToDesk 等专有远程访问解决方案相比,RustDesk 作为一个开源软件,提供了几个显著的优势:

  1. RustDesk 完全免费使用,没有任何隐藏费用或订阅计划。
  2. 由于其开源特性,RustDesk 的代码是透明的,可以由社区审计,从而提供更高的安全性和可信度。
  3. RustDesk 使用 Rust 语言开发,从根本上确保了程序的内存安全和高性能。
  4. 跨平台,支持 Windows、macOS、Linux、Android 和 iOS 等多种操作系统。
  5. 支持远程唤醒机器,真正做到想连就连,无人值守

然而现在有一个坏消息:由于被zp分子频繁使用,该项目现已暂停国内服务。

如果需要在国内使用,就只能走自建节点这一条路啦~

所谓自建服务器,也就是自建 ID Server 和 Relay Server,至于什么是 ID Server 和 Relay Server,下面我们会给大家详细介绍,并提供一步步的指南来帮助你设置自己的 ID Server 和 Relay Server。

2. RustDesk 架构

要自建 RustDesk,首先要理解下 RustDesk 的架构。RustDesk 由三个组件组成:

  1. 客户端:运行在你的设备上(Windows,macOS,Linux,Android, iPhone)用于连接两个设备的软件,它负责监听来自客户端的连接请求,并在建立连接后向客户端发送屏幕更新和接收输入事件。

  2. 中继服务器(Relay Server):运行在服务器上,充当客户端之间的桥梁,转发来自一方的数据包到另一方。在某些环境中(如经过 NAT 出网)设备之间无法进行 P2P 连接,可以用服务器来中转

  3. ID 服务器(ID Server):运行在服务器上,用于维护客户端及中继服务器的连接信息,促进设备之间建立 P2P 连接。

值得一提的是,即使通过 Relay Server 进行通信,RustDesk 也会维护端到端加密,确保中继服务器无法访问明文数据。Relay Server 只是盲目地转发加密的数据包,而不能查看或修改其内容。

3. RustDesk 部署

3.1 准备服务器

需要将 RustDesk 部署于公网的服务器上,因此在开始部署前,请先准备一台服务器,规格要求不高,1c2g 即可满足。

如果自己还没有服务器的,可购买一个,新用户都优惠很大,几十块钱一年还是挺划算的。

最近大行情不好,各大云厂商也一直在打折促销,在可以点我下面的链接领个卷再去购买比较划算

  • 阿里云:https://iswbm.com/alicloud
  • 腾讯云:https://iswbm.com/txcloud
  • Ucloud:https://iswbm.com/ucloud

3.2 开始部署

接下来的操作都要在服务器上操作了,先在服务器上前往 github (https://github.com/rustdesk/rustdesk-server/releases)下载最新版本的 rustdesk

wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.11-1/rustdesk-server-linux-amd64.zip
unzip rustdesk-server-linux-amd64.zip

解压完会出现三个文件,其中:

  • hbbs: 对应前面说的 ID Server,用于分配和注册ID;
  • hbbr: 对应前面说的Relay Server,如果P2P无法连接,会使用hbbr进行流量中继。

接下来需要将 hbbr 和 hbbs 启动起来,在服务器启动二进制文件做为服务运行有许多种方式,如:

  1. nohup:将二进制程序挂载在后台
  2. Service:使用 systemd 来管理
  3. screen:使用 screen 来管理,即使当前会话退出,进程也不会中断

最优雅的方式应该是使用 systemd 管理,但是需要编写 Service 文件。

这里我使用常用的 screen 来运行,请确保你的服务器上已经安装 screen 工具

yum install screen -y

然后用如下命令创建一个 hbbr 的会话空间,并启动 hbbr

# 创建 hbbr 会话空间
screen -R hbbr

# 启动 hbbr
./hbbr

然后再按快捷键 ctrl+a+d,分离会话

再创建一个 hbbs 的会话空间,并启动 hbbs

# 创建 hbbs 会话空间
screen -R hbbs

# 启动 hbbr
./hbbs

启动过程中,请注意记录下日志中的 key

同样再按快捷键 ctrl+a+d,分离会话

分离会话之后,可以通过如下方法查看会话列表,并再次进入会话

3.3 域名解析

为了给工作室里的其他人使用时更方便操作连接,而不需要记 ip,建议可以搞一个二级域名然后解析到服务器上

3.4 防火墙开放端口

默认情况下,hbbs 监听21115(tcp), 21116(tcp/udp), 21118(tcp),hbbr 监听21117(tcp), 21119(tcp)。

在开始使用前,请务必在服务器控制台上的防火墙开启这几个端口, 请注意21116同时要开启TCP和UDP。其中21115是hbbs用作NAT类型测试,21116/UDP是hbbs用作ID注册与心跳服务,21116/TCP是hbbs用作TCP打洞与连接服务,21117是hbbr用作中继服务, 21118和21119是为了支持网页客户端。如果您不需要网页客户端(21118,21119)支持,对应端口可以不开。

  • TCP(21115, 21116, 21117, 21118, 21119)
  • UDP(21116)

4. 连接验证

服务端搭建好后,在要连接的两个设备里都 下载 RustDesk 客户端,地址是:https://github.com/rustdesk/rustdesk/releases

下面以 Android 为例(注意 iPhone 只能是主控,不能被控)

首先找到 RustDesk 客户端的 设置 -> ID/中继服务器 ,然后输入如下两个信息

  • ID 服务器:{domain}:21116
  • Key:前面记录的那个 key

然后打开 保持 RustDesk 后台服务开机自启动,以确保进程不会被杀掉

切换到 共享屏幕 启动服务,并且要打开 输入控制 否则只能查看屏幕无法控制,启动服务后,就可以用设备提示的 ID 和一次性密码在主控上输入进行连接,不过为后续更方便无人值守连接,可以在客户端为设备固定密码,然后在主控上用固定密码连接,注意点保存密码,下次就可以直接连接了~

iswbm

作者

iswbm

云计算 & 容器 & 前后端研发工程师。喜欢探索新技术,空闲时也折腾 Logseq 等效率工具。 可以在 GitHub 关注我了解更多,也可以加我微信(stromwbm) 与我交流。