【RustDesk】自建远程桌面服务

在远程桌面方面博主以前一直用的是TeamViewer,官方各种严查商业用途以及各种限制之后,恰好看到Rustdesk这款开源远程桌面软件,就摸索着尝试一下它的使用,体验真的很棒~

一、软件简介

RustDesk,工具如其名,基于高效的Rust语言构建的开源远程桌面工具, 是一个功能齐全的开源远程控制替代方案,可通过最少的配置实现自托管和安全性。RustDesk已经将服务端开源并允许自行搭建中转服务器。

简单总结一下使用RustDesk的优势:

(1)轻量:不论服务端还是客户端、不论哪个平台,软件小巧、功能完备。
(2)全平台支持:支持Android、Linux、Windows任意双向控制。
(3)安全可控:软件开源,服务端自建,通信加密。
(4)带宽高效:仅需2-3M即可流畅1080P,支持TCP打洞端对端P2P连接。


二、准备工作

除了日常使用的主控、被控手机和电脑之外,要准备的就只有一台服务器。

三、构建服务端

Rustdesk官方有提供docker一把梭的的部署方式,可以很方便地将服务端搭建起来。不过本文着重记录一下手动配置的方式,毕竟作为Rustdesk本身硬件要求极低,还是要把优势最大化展示出来。

官方文档点击前往

Rustdesk的服务端(即转发服务器)需要最少3个端口,程序占用另外两个用于实现Web端的远程桌面(参考:点击前往)。官方文档对于各端口的用途说明比较简略,下表是一个简要的概述。我引入了一个“锚点”的概念,因为针对Rustdesk服务端的自定义端口设置是通过指定锚点再通过-1、+2来产生的,并不是让你自行随意指定五个端口。

端口号 协议 程序 用途 锚点
21115 tcp HBBS NAT类型测试
21116 tcp/udp HBBS TCP 打洞与连接服务/UDP ID注册与心跳服务 HBBS锚点
21117 tcp HBBR 中继服务 HBBR锚点
21118 tcp HBBS WebSocket服务
21119 tcp HBBR WebSocket转发

HBBR、HBBS服务端64位的Windows/Linux的预编译包可以通过GitHub Release进行获取,其余的架构则需要自行clone源码通过cargo进行编译(官方文档)。若构建中遇到问题可以在评论区留言,博主可以协助或者完善本文。

GitHub预编译包点击前往

官方的文档推荐使用PM2来守护进程(点击前往),但是我感觉为了一个轻量级的远程桌面工具,装一套Node.js的工具有一点不太合适。博主还是推荐通过systemd实现进程的管理、开机自启。

HBBS

解压出来的hbbs文件先通过 chmod +x hbbs赋予可执行权限,先运行一次 ./hbbs,生成用于客户端认证使用的公钥 id_ed25519.pub,随后用 cat id_ed25519.pub命令查看公钥并记下。然后通过喜欢的编辑器编辑 /etc/systemd/system/hbbs.service,将用于参考的以下配置根据需要进行修改并保存,这时也要将强制校验密钥以 -k _参数写入启动命令中。

⚠警告:博主强烈建议增加 -k参数设置,否则hbbs将不会强制校验客户端的密钥是否正确,导致转发服务器可能会被匿名使用!

# systemd配置路径
# /etc/systemd/system/hbbs.service

[Unit]
Description=Rust Desk Service
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
#设置运行路径
WorkingDirectory=/*程序路径*/rustdesk
#可修改锚点端口,当前为21116(锚点)和21115(锚点-1)和21118(锚点+2)
#-r用于指定中转服务器,-k参数用于强制校验客户端公钥,用于避免未授权的使用
ExecStart=/*程序路径*/rustdesk/hbbs -r 1.1.1.1:21117 -p 21116 -k _

[Install]
WantedBy=multi-user.target

HBBR

解压出来的hbbr文件先通过 chmod +x hbbr赋予可执行权限,然后通过喜欢的编辑器编辑 /etc/systemd/system/hbbr.service,将用于参考的以下配置根据需要进行修改并保存,同样将密钥校验以 -k _参数写入启动命令中。

hbbr.service

# systemd配置路径
# /etc/systemd/system/hbbr.service

[Unit]
Description=Rust Desk Service
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
#设置运行路径
WorkingDirectory=/*程序路径*/rustdesk
#可修改锚点端口,当前为21117(锚点)和21119(锚点+2)
#-k参数用于强制校验客户端公钥,用于避免未授权的使用
ExecStart=/*程序路径*/rustdesk/hbbr -p 21117 -k _

[Install]
WantedBy=multi-user.target

.service设置好后,即可通过 service hbbs startservice hbbr start来启动这两项服务,启动后可以通过 service hbbs statusservice hbbr status查看进程的运行状态,显示绿色的Active即无误。

一切准备就绪后即可通过 systemctl enable hbbssystemctl enable hbbr允许它们开机自启。最后端口的放行,iptablesfirewalldufw的命令分别如下,其中的端口请按照你的设置的进行放行(默认21115-21117),这里需要注意hbbs锚点端口必须同时放行tcp和udp。WEB端由于正在测试加上博主暂时没有这个需求,就没有去尝试,如果你有好的实践欢迎在评论区分享你的经验~

端口放行

#CentOS firewalld
firewall-cmd --zone=public --add-port=21115/tcp --permanent
firewall-cmd --zone=public --add-port=21116/tcp --permanent
firewall-cmd --zone=public --add-port=21116/udp --permanent
firewall-cmd --zone=public --add-port=21117/tcp --permanent

#Debian/Ubuntu ufw
ufw allow 21115/tcp
ufw allow 21116/tcp
ufw allow 21116/udp
ufw allow 21117/tcp

#iptables
iptables -I INPUT 1 -p tcp --dport 21115 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 21116 -j ACCEPT
iptables -I INPUT 1 -p udp --dport 21116 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 21117 -j ACCEPT
iptables-save //保存(解决重启失效)

四、配置客户端

在新版的服务中,在hbbs/hbbr运行目录下执行 cat id_ed25519.pub可以得到用于客户端与服务器认证的公钥

2024-03-05T19:17:47.421605745-xipkbhof.png

在Rustdesk客户端中,找到【ID/中继服务器】选项点进去设置成我们搭建好hbbs/hbbr的服务器(官方文档)。

2024-03-05T19:18:25.313769622-bylwtdnn.png

2024-03-05T19:18:44.124430724-nvtsanau.png

在 ID 服务器输入框中(被控端+主控端)输入 hbbs 主机或 ip 地址,另外两个地址可以不填,RustDesk会自动推导(如果没有特别设定),中继服务器指的是hbbr(21117)端口。第四项Key将上文获取到的 id_ed25519.pub填入,保存后即可和Todesk、Teamviewer等一样通过ID+密钥的形式控制其他客户端。

需要注意的是不论是主控还是被控,都需要设置为同一个 ID/中继服务器才能够正常连接使用。除此之外,局域网IP直连可以在被控的设置菜单中开启【允许IP直接访问】,然后在主控端连接框直接输入【被控IP:21116】进行连接。其他平台更细节的使用可以参考官方文档(点击前往)进行学习。


五、结语

RustDesk无疑是一款优秀的开源远程桌面工具,在这个远程桌面工具反复被商业公司养鱼、割韭菜的背景之下,它可谓是一股清流打破了这样的局面,给我们带来了更多的选择。

当然RustDesk本身仍有许多改进的空间,比如APP连接之后默认让画面适合屏幕的状态更好、扫码功能启动更流畅些、交互UI更友好一些等等。根据同类的软件猜测RustDesk未来可能会有更高效的组件如NVENC、更完备的账户和控制系统等等,也希望RustDesk能够保持开源的初心并找到合适自己的盈利方式,毕竟光用爱发电是不可能的。

最后呢,就再次感谢作者带来这样一款好用的软件吧~

消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息