【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 start
和 service hbbr start
来启动这两项服务,启动后可以通过 service hbbs status
和 service hbbr status
查看进程的运行状态,显示绿色的Active即无误。
一切准备就绪后即可通过 systemctl enable hbbs
和 systemctl enable hbbr
允许它们开机自启。最后端口的放行,iptables
、firewalld
、ufw
的命令分别如下,其中的端口请按照你的设置的进行放行(默认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
可以得到用于客户端与服务器认证的公钥
在Rustdesk客户端中,找到【ID/中继服务器】选项点进去设置成我们搭建好hbbs/hbbr的服务器(官方文档)。
在 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能够保持开源的初心并找到合适自己的盈利方式,毕竟光用爱发电是不可能的。
最后呢,就再次感谢作者带来这样一款好用的软件吧~