介绍
简介 RustDesk,工具如其名,基于高效的Rust语言构建的开源远程桌面工具。
- 轻量:不论服务端还是客户端、不论哪个平台,软件小巧、功能完备。
- 全平台支持:支持Android、Linux、Windows任意双向控制,iOS单向控制。
- 安全可控:软件开源,服务端自建,通信加密。
- 带宽高效:仅需2-3M即可流畅1080P,支持TCP打洞端对端P2P连接。
RustDesk官网:rustdesk.com/zh/
GitHub:github.com/rustdesk/ru...
RustDesk的优势在于可以使用自己的服务器,硬件要求很低,最低配置的云服务器就可以了,CPU和内存要求都是最小的。
如果控制端和被控端位于同一网段下时,不需要通过 relay server 中转,直接建立内网链接。如果TCP打洞直连失败,就要耗费中继流量,一个中继连接的流量在30k-3M每秒之间(1920x1080屏幕),取决于清晰度设置和画面变化。如果只是办公需求,平均在100K/s。非直连情况下,播放全屏视频(1920x1080屏幕)实测近两分钟,带宽平均占用1.3Mbps左右。
RustDesk 服务部署
在Docker部署和常规部署之间选择一个即可
Docker部署
docker-compose.ymal
yaml
services:
hbbs:
container_name: hbbs
image: rustdesk/rustdesk-server:latest
command: hbbs
volumes:
- ./data:/root
network_mode: "host"
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: hbbr
image: rustdesk/rustdesk-server:latest
command: hbbr
volumes:
- ./data:/root
network_mode: "host"
restart: unless-stopped
Linux/arm64v8 架构则使用 rustdesk/rustdesk-server:latest-arm64v8
--net=host 桥接网络非 nat, 仅适用于 Linux,它让 hbbs/hbbr 可以看到对方真实的ip 和 port 。 如果 --net=host 不能正常运行,则使用 port 增加端口映射。
markdown
hbbs
port:
- 21115:21115
- 21116:21116
- 21116:21116/udp
- 21118:21118
hbbr
port:
- 21117:21117
- 21119:21119
启动服务
sudo docker-compose up -d
常规部署 直接运行
在服务器上运行 hbbs/hbbr (Centos 或 Ubuntu)。 ./hbbs -r <hbbr运行所在主机的地址[:port]> ./hbbr
systemd 服务运行
使用 systemd 配置服务运行,方便系统自启动服务,以及守护进程。
hbbs
解压出来的hbbs文件先通过chmod +x hbbs
赋予可执行权限,先运行一次./hbbs
,生成用于客户端认证使用的公钥id_ed25519.pub
,随后用cat id_ed25519.pub
命令查看公钥并记下。然后通过喜欢的编辑器编辑/etc/systemd/system/hbbs.service
,将用于参考的以下配置根据需要进行修改并保存,这时也要将强制校验密钥以-k _
参数写入启动命令中。
ini
# 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用于指定网卡IP(适用多网卡),-k参数用于强制校验客户端公钥,用于避免未授权的使用
ExecStart=/*程序路径*/rustdesk/hbbs -r 0.0.0.0 -p 21116 -k _
[Install]
WantedBy=multi-user.target
hbbr
解压出来的hbbr文件先通过chmod +x hbbr
赋予可执行权限,然后通过喜欢的编辑器编辑/etc/systemd/system/hbbr.service
,将用于参考的以下配置根据需要进行修改并保存,同样将密钥校验以-k _
参数写入启动命令中。
ini
# 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
允许它们开机自启。
rustdesk
在我们远程控制主机时,可能不得不完成重启的操作,远控软件不自启可不行,那么接下来我们一起来配置一下自启。
编辑文本文档 rustdesk.service
ini
[Unit]
Description=RustDesk
Requires=network.target
After=systemd-user-sessions.service
[Service]
Type=simple
ExecStart=/usr/bin/rustdesk --service
PIDFile=/var/run/rustdesk.pid
KillMode=mixed
TimeoutStopSec=30
User=root
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
移动到 /usr/lib/systemd/system 文件夹下,执行:
bash
sudo systemctl enable rustdesk
查看服务运行状态
lua
systemctl status rustdesk
端口放行
确保下面端口未被防火墙拦截
- TCP(21115, 21116, 21117, 21118, 21119)
- UDP(21116)
端口号 | 协议 | 程序 | 用途 | 锚点 |
---|---|---|---|---|
21115 | tcp | HBBS | NAT类型测试 | |
21116 | tcp/udp | HBBS | TCP 打洞与连接服务/UDP ID注册与心跳服务 | HBBS锚点 |
21117 | tcp | HBBR | 中继服务 | HBBR锚点 |
21118 | tcp | HBBS | WebSocket服务 | |
21119 | tcp | HBBR | WebSocket转发 |
-
hbbs
:21114
(TCP): used for web console, only available inPro
version.21115
(TCP): used for the NAT type test. 21115是hbbs用作NAT类型测试21116
(TCP/UDP): Please note that21116
should be enabled both for TCP and UDP.21116/UDP
is used for the ID registration and heartbeat service. 21116/UDP是hbbs用作ID注册与心跳服务21116/TCP
is used for TCP hole punching and connection service.21116/TCP是hbbs用作TCP打洞与连接服务21118
(TCP): used to support web clients.21118 是为了支持网页客户端
-
hbbr
:21117
(TCP): used for the Relay services.21117是hbbr用作中继服务21119
(TCP): used to support web clients. 21119是为了支持网页客户端
手动设置防火墙规则,iptables
、firewalld
、ufw
的命令分别如下,其中的端口请按照你的设置的进行放行(默认21115-21117),这里需要注意hbbs锚点端口必须同时放行tcp和udp。
csharp
# 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:21119/tcp
ufw allow 21116/udp # 请注意21116同时要开启TCP和UDP
sudo ufw enable
# 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 //保存(解决重启失效)
Rustdesk 客户端
客户端安装
可以从这里下载客户端 GitHub.
目前支持的客户端平台:
- Microsoft Windows
- macOS
- Debian Derivatives (Ubuntu ≥ 16, Linux Mint, etc.)
- Red Hat Derivatives (CentOS, Fedora ≥ 18, Rocky Linux, etc.)
- Arch Linux/Manjaro
- openSUSE
- NixOS
- AppImage / Flatpak
- Android
- iOS (not support being controlled)
- Web
客户端配置
- ID Server: RustDesk 服务部署设备的 IP
- Relay Server: 不填,则使用 ID server
- Key: 在 RustDesk 服务启动后,在 data 目录下可以找到
id_ed25519.pub
文件,其中的内容则是 key
Lock screen
Login screen using Wayland is not supported yet. If you wanna access login screen after reboot or logout with RustDesk, you need to change login screen to X11, please modify below line to WaylandEnable=false
in /etc/gdm/custom.conf
or /etc/gdm3/custom.conf
:
shell
#WaylandEnable=false
Note
Please reboot to make above changes taking effect.