使用RustDesk搭建私有远程桌面服务


不久之前,为了方便远程控制各个设备,我把各个受我控制的设备都从向日葵迁移到了 ToDesk 上。但是这几天 ToDesk 出现了严重的恶性Bug。而且众所周知例如向日葵和 ToDesk 这些软件的后门那叫一个多得离谱,本身就对各个远程软件不是非常信任的我这次终于是绷不住了,决定自己想办法全面迁移到自建的远程桌面服务上。在翻找了众多远程桌面服务后,最后选中自建 RustDesk 的远程桌面服务。

搭建服务器环境

RustDesk 的服务器支持 Debian/Ubuntu/CentOS/Windows/Docker 环境搭建,本次我选择了在 Ubuntu20.04 LTS 的服务器上搭建,毕竟有公网IP使用会更方便。

第一步 下载服务端程序

Github Releases下载最新版本的 rustdesk-server-linux-amd64.zip 服务端程序压缩包,unzip 解压后会得到 hbbshbbr 两个文件。
通过sudo ./hbbs -h可以得知 hbbs 是 Rustdesk 的ID服务。同样的,通过sudo ./hbbr -h可以得知 hbbr 是 RustDesk 的中继服务器。

第二步 启动基础服务端

在服务器上运行hbbshbbr,官方建议使用pm2管理服务。

1
2
3
4
5
6
# 直接启动
sudo ./hbbs
sudo ./hbbr
# 在pm2中启动
sudo pm2 start ./hbbs
sudo pm2 start ./hbbr

需要注意的是 pm2 需要 Node.JS V16+ 才可以运行,如果需要使用 pm2 管理服务器端的服务请自行安装符合要求的 Node.JS。如果需要 pm2 内的服务开机自启请执行 pm2 savepm2 startup

默认情况下,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)支持,对应端口可以不开。

第三步 进阶配置

自定义服务端口

如果你不想使用程序默认的端口,那么你可以在启动 hbbs 时使用 -r 指定端口:

1
2
3
4
# 直接启动
sudo ./hbbs -r <主机的地址[:port]>
# 在pm2中启动
sudo pm2 start ./hbbs -- -r <主机的地址[:port]>

hbbr 则是使用 -p 指定:

1
2
3
4
# 直接启动
sudo ./hbbr -p <主机的地址[:port]>
# 在pm2中启动
sudo pm2 start ./hbbr -- -p <主机的地址[:port]>

设置无正确key禁止建立非加密连接

hbbs 首次运行时,会自动在运行目录下生成 id_ed25519id_ed25519.pub 两个文件,分别存储着用于连接加密的私钥和公钥。
在后面进行客户端配置的时候,我们会需要在客户端设置中填写一个key用于连接服务器。
出于安全性考虑,我们需要设置无正确key禁止建立非加密连接:

1
2
3
4
5
6
# 直接启动
sudo ./hbbs -k _
sudo ./hbbr -k _
# 在pm2中启动
sudo pm2 start ./hbbs -- -k _
sudo pm2 start ./hbbr -- -k _

服务端程序信息

hbbs信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
*@*:~/rustdesk# sudo ./hbbs -h
hbbs 1.1.6
Purslane Ltd. <[email protected]>
RustDesk ID/Rendezvous Server

USAGE:
hbbs [OPTIONS]

FLAGS:
-h, --help Prints help information
-V, --version Prints version information

OPTIONS:
-c, --config <FILE> Sets a custom config file
-k, --key <KEY> Only allow the client with the same key
--mask <MASK> Determine if the connection comes from LAN, e.g. 192.168.0.0/16
-p, --port <NUMBER(default=21116)> Sets the listening port
-r, --relay-servers <HOST> Sets the default relay servers, seperated by colon
-R, --rendezvous-servers <HOSTS> Sets rendezvous servers, seperated by colon
-M, --rmem <NUMBER(default=0)> Sets UDP recv buffer size, set system rmem_max first, e.g., sudo sysctl -w
net.core.rmem_max=52428800. vi /etc/sysctl.conf, net.core.rmem_max=52428800,
sudo sysctl –p
-s, --serial <NUMBER(default=0)> Sets configure update serial number
-u, --software-url <URL> Sets download url of RustDesk software of newest version
hbbr信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
*@*:~/rustdesk# sudo ./hbbr -h
hbbr 1.1.6
Purslane Ltd. <[email protected]>
RustDesk Relay Server

USAGE:
hbbr [OPTIONS]

FLAGS:
-h, --help Prints help information
-V, --version Prints version information

OPTIONS:
-k, --key <KEY> Only allow the client with the same key
-p, --port <NUMBER(default=21117)> Sets the listening port

客户端配置

Windows/Linux/MacOS等桌面客户端

  1. 安装运行 RustDesk 客户端
  2. 点击 ID 右侧的菜单按钮,选择“ ID/中继服务器”
    图片来自RustDesk
  3. 在 ID 服务器输入框中输入 hbbs 的域名或 ip 地址,另外两个地址可以不填,RustDesk 会自动推导(如果没有特别设定),中继服务器指的是hbbr(21117)端口。
    图片来自RustDesk
  4. 填写由服务端生成的key并保存:
    1
    cat <运行目录>/id_ed25519.pub

    V1.2.0以前的RustDesk客户端不支持WayLand显示设备,如果需要使用支持WayLand显示设备的客户端请访问Github Pre-Releases。如果您的设备为X11显示设备则不受限制。

Android/iOS客户端

  1. 安装运行 RustDesk 客户端
  2. 选择设置-ID/中继服务器
  3. 在 ID 服务器输入框中输入 hbbs 的域名或 ip 地址,另外两个地址可以不填,RustDesk 会自动推导(如果没有特别设定),中继服务器指的是hbbr(21117)端口。
  4. 填写由服务端生成的key并保存:
    1
    cat <运行目录>/id_ed25519.pub
    在以上设置全部完成之后即可通过自建的服务器进行远程桌面连接了。

参考资料

RustDesk Docs