在远程桌面方面博主以前一直用的是 TeamViewer,官方各种查商用加限制之后换成了国产的 ToDesk,但是近来 ToDesk 也开始炸鱼了,强制登陆加各种限制。最近恰好看到 Rustdesk 转为开源模式了就摸索着尝试一下它的使用,体验真的很棒~
一、软件简介#
RustDesk,工具如其名,基于高效的 Rust 语言构建的开源远程桌面工具。这款工具最早我是在 V2EX 上看到的,但是当时自建服务端需要支付 100 美金购买授权,用于展示的 demo 只能实现最简单的演示功能,内置的服务器似乎位于境外,无法作为生产力软件使用。
最近又看到群友提起,发现 RustDesk 已经将服务端开源并允许自行搭建中转服务器。开学以来博主频繁用到远程桌面软件,因为即使不在办公室也时常需要在办公室的电脑上录制会议、接收文件、刷网课等。从去年开始博主一直使用的是 ToDesk,但是近期几个新版本主控不仅强制登陆还加入了针对 Android 被控的限制,免费版仅有支持一台设备且并且一个月才能更换一次。软件本身也有点小 bug,手机作为主控时断开连接把 app 置于后台一段时间之后,再打开就会提示 “账号未登陆”,只有重启软件后才能继续正常控制账户内的电脑。
简单总结一下博主这几天使用 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 将不会强制校验客户端的密钥是否正确,导致转发服务器可能会被匿名使用!
1234567891011121314151617181920 | # systemd 配置路径# /etc/systemd/system/hbbs.service [Unit]Description=RustDeskServiceAfter=network.target [Service]Type=simpleUser=rootRestart=on-failureRestartSec=5s#设置运行路径WorkingDirectory=/程序路径/rustdesk#可修改锚点端口,当前为 21116(锚点)和 21115(锚点 - 1)和 21118(锚点 + 2)#-r 用于指定网卡 IP(适用多网卡),-k 参数用于强制校验客户端公钥,用于避免未授权的使用ExecStart=**/程序路径/**rustdesk/hbbs-r0.0.0.0-p21116-k_ **[Install]**WantedBy=multi-user.target |
---|
HBBR#
解压出来的 hbbr 文件先通过chmod +x hbbr
赋予可执行权限,然后通过喜欢的编辑器编辑/etc/systemd/system/hbbr.service
,将用于参考的以下配置根据需要进行修改并保存,同样将密钥校验以-k _
参数写入启动命令中。
hbbr.service
1234567891011121314151617181920 | # systemd 配置路径# /etc/systemd/system/hbbr.service [Unit]Description=RustDeskServiceAfter=network.target [Service]Type=simpleUser=rootRestart=on-failureRestartSec=5s#设置运行路径WorkingDirectory=/程序路径/rustdesk#可修改锚点端口,当前为 21117(锚点)和 21119(锚点 + 2)#-k 参数用于强制校验客户端公钥,用于避免未授权的使用ExecStart=**/程序路径/**rustdesk/hbbr-p21117-k_ **[Install]**WantedBy=multi-user.target |
---|
为了简化这个流程,你可以将解压出来预编译的hbbr
、hbbs
放于/home/rustdesk
文件夹下,直接执行以下两个 txt 中的内容(点击前往)创建 service。.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 端由于正在测试加上博主暂时没有这个需求,就没有去尝试,如果你有好的实践欢迎在评论区分享你的经验~
端口放行
Shell
123456789101112131415161718 | #CentOS firewalldfirewall-cmd--zone=public--add-port=21115/tcp--permanentfirewall-cmd--zone=public--add-port=21116/tcp--permanentfirewall-cmd--zone=public--add-port=21116/udp--permanentfirewall-cmd--zone=public--add-port=21117/tcp--permanent #Debian/Ubuntu ufwufwallow21115/tcpufwallow21116/tcpufwallow21116/udpufwallow21117/tcp #iptablesiptables-IINPUT1-ptcp--dport21115-jACCEPTiptables-IINPUT1-ptcp--dport21116-jACCEPTiptables-IINPUT1-pudp--dport21116-jACCEPTiptables-IINPUT1-ptcp--dport21117-jACCEPTiptables-save// 保存(解决重启失效) |
---|
四、配置客户端#
在新版的服务中,在 hbbs/hbbr 运行目录下执行cat id_ed25519.pub
可以得到用于客户端与服务器认证的公钥(配图操作有误,感谢作者指正)。
在 Rustdesk 客户端中,找到【ID / 中继服务器】选项点进去设置成我们搭建好 hbbs/hbbr 的服务器(官方文档)。
其中第一项 ID 服务器处以【IP:端口
】的形式填写服务器服务器IP
和hbbs锚点端口
、第二项以相同的格式填写服务器IP
和hbbr锚点端口
、第四项 Key 将上文获取到的id_ed25519.pub
填入,保存后即可和 Todesk、Teamviewer 等一样通过 ID + 密钥的形式控制其他客户端。
需要注意的是不论是主控还是被控,都需要设置为同一个ID/中继服务器
才能够正常连接使用。除此之外,局域网 IP 直连可以在被控的设置菜单中开启【允许 IP 直接访问】,然后在主控端连接框直接输入【被控IP
:21116】进行连接。其他平台更细节的使用可以参考官方文档(点击前往)进行学习。
五、结语#
RustDesk 无疑是一款优秀的开源远程桌面工具,在这个远程桌面工具反复被商业公司养鱼、割韭菜的背景之下,它可谓是一股清流打破了这样的局面,给我们带来了更多的选择。
当然 RustDesk 本身仍有许多改进的空间,比如 APP 连接之后默认让画面适合屏幕的状态更好、扫码功能启动更流畅些、交互 UI 更友好一些等等。根据同类的软件猜测 RustDesk 未来可能会有更高效的组件如 NVENC、更完备的账户和控制系统等等,也希望 RustDesk 能够保持开源的初心并找到合适自己的盈利方式,毕竟光用爱发电是不可能的。这里有一个作者接受捐助的网址(点击前往),有余力可以考虑支持一下作者。
最后呢,就再次感谢作者带来这样一款好用的软件吧~
转载自: Luminous' Home » 【RustDesk】自建远程桌面服务替代 TeamViewer/Todesk