rustdesk笔记

Ubuntu安装

版本说明

文件名架构适用设备类型具体设备示例适用性说明
rustdesk-server-hbbr_1.1.15_amd64.debamd64 (x86_64)现代64位PC/服务器• 2010年后所有Intel/AMD PC • 云服务器(AWS EC2, 阿里云ECS, 腾讯云CVM) • 普通台式机、笔记本电脑Ubuntu 24.04推荐,99%的现代服务器和PC
rustdesk-server-hbbr_1.1.15_arm64.debarm64 (aarch64)ARM64架构设备• Raspberry Pi 4/5 (64位系统) • Apple M1/M2/M3 Mac (通过Linux) • ARM服务器(华为鲲鹏、AWS Graviton)适用于64位ARM架构设备,如Raspberry Pi 4/5
rustdesk-server-hbbr_1.1.15_armhf.debarmhf (armv7l)32位ARM设备• Raspberry Pi 3B/3B+ (32位系统) • Raspberry Pi Zero • 旧款安卓设备适用于32位ARM架构设备,如Raspberry Pi 3
rustdesk-server-hbbr_1.1.15_i386.debi386 (x86)32位x86老旧设备• 2005-2010年PC • 旧版嵌入式设备仅适用于老旧32位PC,不推荐用于现代系统
rustdesk-server-hbbs_1.1.15_amd64.debamd64 (x86_64)现代64位PC/服务器• 2010年后所有Intel/AMD PC • 云服务器 • 普通台式机、笔记本电脑Ubuntu 24.04推荐,99%的现代服务器和PC
rustdesk-server-hbbs_1.1.15_arm64.debarm64 (aarch64)ARM64架构设备• Raspberry Pi 4/5 (64位系统) • Apple M1/M2/M3 Mac • ARM服务器适用于64位ARM架构设备,如Raspberry Pi 4/5
rustdesk-server-hbbs_1.1.15_armhf.debarmhf (armv7l)32位ARM设备• Raspberry Pi 3B/3B+ (32位系统) • Raspberry Pi Zero适用于32位ARM架构设备,如Raspberry Pi 3
rustdesk-server-hbbs_1.1.15_i386.debi386 (x86)32位x86老旧设备• 2005-2010年PC • 旧版嵌入式设备仅适用于老旧32位PC,不推荐用于现代系统
rustdesk-server-linux-amd64.zipamd64 (x86_64)现代64位PC/服务器• 2010年后所有Intel/AMD PC • 云服务器 • 普通台式机、笔记本电脑适用于所有64位系统,适合手动安装或Docker部署
rustdesk-server-linux-arm64v8.ziparm64 (aarch64)ARM64架构设备• Raspberry Pi 4/5 (64位系统) • Apple M1/M2/M3 Mac • ARM服务器适用于64位ARM架构设备,如Raspberry Pi 4/5

安装依赖(可以先不安装)

1
sudo apt install -y libssl3

文档地址:https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/install/

软件下载地址:https://github.com/rustdesk/rustdesk-server/releases

如果不想手动安装,可以直接安装这两个,只需要修改一下版本号

1
2
3
4
5
6
7
8
9
rustdesk-server-hbbs_1.1.15_amd64.deb (4.11 MB)
rustdesk-server-hbbr_1.1.15_amd64.deb (1.34 MB)

# 2. 安装必需依赖(仅需一个!)
sudo apt install -y libssl3

# 3. 安装服务器端
sudo dpkg -i rustdesk-server-hbbs_1.1.15_amd64.deb
sudo dpkg -i rustdesk-server-hbbr_1.1.15_amd64.deb

点击

1
2
3
1) IP
2) DNS/Domain
Choose your preferred connection method: auto-resolve current WAN IP or enter your DNS/Domain:

按任意按键结束

1
2
3
4
Install Rustdesk on your machines and change your public key and IP/DNS name to the above
You can get a free API with Addressbook etc via https://github.com/infiniteremote/installer
Press any key to finish install
waiting for the keypress

必须开放的端口(TCP+UDP)

RustDesk 默认端口如下,服务器防火墙 / 云服务商安全组必须放行:

端口号协议对应程序用途是否必需
21115TCPhbbs心跳 / ID 服务器通信(如果不开启,无法知道设备是否在线)可选
21116TCP/UDPhbbsTCP 用于 RPC,UDP 用于 P2P(这个端口后期可以配置到其他端口)必需
21117TCPhbbrWebSocket 通信(备用)必需
中继数据转发。所有的屏幕画面、键盘鼠标操作数据在无法直连时,都通过此端口传输。
必需,否则无法在 P2P 失败时连接
21118TCPhbbs中继服务器 TCP 通信必需
21119UDPhbbr中继服务器 UDP 通信必需

添加独立用户运行

设置这个用户不能通过ssh登录

1
adduser RD

添加RD用户sudo权限

1
2
%sudo  ALL=(ALL:ALL) ALL
RD ALL=(ALL:ALL) ALL

修改rustdesk的systemd 服务文件

备份 /etc/systemd/system/rustdeskrelay.service /etc/systemd/system/rustdesksignal.service

1
2
3
4
cp rustdeskrelay.service rustdeskrelay.service.bak-&(date +%y%m%d)
cp rustdesksignal.service rustdesksignal.service.bak-&(date +%y%m%d)
rm rustdeskrelay.service
rm rustdesksignal.service

如果后续需要恢复,可以通过备份文件恢复;

重新加载配置文件

1
2
# 重新加载配置
sudo systemctl daemon-reload

添加自定义

/etc/systemd/system/rustdesk-hbbs.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[Unit]
# 服务的描述,便于识别(systemctl status时会显示)
Description=RustDesk ID Server (hbbs)
# 服务的文档链接,可快速查阅官方文档
Documentation=https://rustdesk.com/docs/
# 定义服务启动依赖:必须等网络目标(network.target)和网络完全在线目标(network-online.target)启动后,才启动本服务
After=network.target network-online.target
# 建议启动的依赖:希望network-online.target也启动(增强网络就绪性)
Wants=network-online.target

[Service]
# 服务类型:simple表示ExecStart指定的进程就是主进程,退出则服务退出(最常用)
Type=simple
LimitNOFILE=1000000
# 指定运行服务的用户/用户组(普通用户,最小权限原则)
User=RD
Group=RD
# 工作目录:程序运行时的当前目录,需和安装路径一致,确保程序能找到公钥等文件
WorkingDirectory=/opt/rustdesk-server
# 核心执行命令:启动hbbs程序,-r参数指定中继服务器地址(填自己的IP/域名)
# 示例 -r 设置中继服务器,-R设置会面服务器(这个不知道干啥的)
#ExecStart=/bin/bash -c '/opt/rustdesk/hbbs -r 192.169.233.154 \
# -R 192.169.233.155,192.169.233.156 \
# --mask 172.16.0.0/16 \
# -k "$(cat /opt/rustdesk/id_ed25519.pub)"'
ExecStart=/bin/bash -c '/opt/rustdesk-server/hbbs -r 你的服务器公网IP \
-R 192.169.233.155,192.169.233.156 \
--mask 172.16.0.0/16 \
-k "$(cat /opt/rustdesk-server/id_ed25519.pub)"'
# 标准输出重定向:将程序日志追加写入指定文件(便于排查问题)
StandardOutput=append:/var/log/rustdesk-hbbs.log
# 标准错误重定向:错误日志也写入同一个文件
StandardError=append:/var/log/rustdesk-hbbs.log
# 重启策略:仅当进程异常失败时重启(正常退出不重启)
Restart=on-failure
# 重启间隔:失败后等待5秒再重启(避免频繁重启)
RestartSec=5s
# 安全加固:禁止进程获取新的权限(防止提权)
NoNewPrivileges=true
# 安全加固:为服务创建独立的临时目录(避免和其他程序冲突)
PrivateTmp=true
# 安全加固:严格保护系统文件(仅允许读,禁止修改系统目录)
ProtectSystem=strict
# 安全加固:禁止访问用户家目录(/home、/root等)
ProtectHome=true
# 显式指定可读写的路径:仅允许修改RustDesk安装目录和日志文件
ReadWritePaths=/opt/rustdesk-server /var/log/rustdesk-hbbs.log /etc/resolv.conf /etc/hosts

[Install]
# 安装目标:当系统进入多用户模式(正常运行模式)时,自动启动该服务
WantedBy=multi-user.target

/etc/systemd/system/rustdesk-hbbr.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
[Unit]
# 服务的描述,便于识别(systemctl status时会显示)# 描述改为中继服务器
Description=RustDesk Relay Server (hbbr)
# 服务的文档链接,可快速查阅官方文档
Documentation=https://rustdesk.com/docs/
# 定义服务启动依赖:必须等网络目标(network.target)和网络完全在线目标(network-online.target)启动后,才启动本服务
# 新增:网络就绪 + hbbs先启动
After=network.target network-online.target rustdesk-hbbs.service
# 建议启动的依赖:希望network-online.target也启动(增强网络就绪性)
Wants=network-online.target

[Service]
# 服务类型:simple表示ExecStart指定的进程就是主进程,退出则服务退出(最常用)
Type=simple
LimitNOFILE=1000000
# 指定运行服务的用户/用户组(普通用户,最小权限原则)
User=RD
Group=RD
# 工作目录:程序运行时的当前目录,需和安装路径一致,确保程序能找到公钥等文件
WorkingDirectory=/opt/rustdesk-server
# 核心修正:删除无效的--log参数(1.1.14不支持),添加-k参数(与hbbs共用公钥)
# hbbr无需-r参数,仅需-k参数做认证(可选但推荐)
ExecStart=/bin/bash -c '/opt/rustdesk-server/hbbr -k "$(cat /opt/rustdesk-server/id_ed25519.pub)"'
# 标准输出重定向:将程序日志追加写入指定文件(便于排查问题)
# 日志文件改为hbbr专属
StandardOutput=append:/var/log/rustdesk-hbbr.log
# 标准错误重定向:错误日志也写入同一个文件
StandardError=append:/var/log/rustdesk-hbbr.log
# 重启策略:仅当进程异常失败时重启(正常退出不重启)
Restart=on-failure
# 重启间隔:失败后等待5秒再重启(避免频繁重启)
RestartSec=5s
# 安全加固:禁止进程获取新的权限(防止提权)
NoNewPrivileges=true
# 安全加固:为服务创建独立的临时目录(避免和其他程序冲突)
PrivateTmp=true
# 安全加固:严格保护系统文件(仅允许读,禁止修改系统目录)
ProtectSystem=strict
# 安全加固:禁止访问用户家目录(/home、/root等)
ProtectHome=true
# 可读写路径改为hbbr的日志文件 # 显式指定可读写的路径:仅允许修改RustDesk安装目录和日志文件
# 安全加固修正:
# 1. 包含程序目录+日志目录(而非仅日志文件,更兼容)
# 2. 补充系统必要文件(DNS/hosts),确保网络正常
ReadWritePaths=/opt/rustdesk-server /var/log/rustdesk-hbbr.log /etc/resolv.conf /etc/hosts


[Install]
# 安装目标:当系统进入多用户模式(正常运行模式)时,自动启动该服务
WantedBy=multi-user.target

启动错误,清理启动次数

步骤 1:停止并禁用错误的服务(清除运行状态)

首先终止可能残留的错误进程,禁用服务避免开机自启,彻底解除错误状态:

1
2
3
4
5
6
7
8
9
10
11
# 停止hbbr服务(即使加载失败也要执行,清理残留进程)
sudo systemctl stop rustdesk-hbbr.service
sudo systemctl stop rustdesk-hbbs.service

# 禁用服务(防止开机自动加载错误配置)
sudo systemctl disable rustdesk-hbbr.service
sudo systemctl disable rustdesk-hbbs.service

# 重置服务失败状态(清除systemd记录的错误标记)
sudo systemctl reset-failed rustdesk-hbbr.service
sudo systemctl reset-failed rustdesk-hbbs.service

步骤 2:修复服务文件(解决加载错误的根源)

加载错误的核心原因是服务文件语法 / 配置错误,先备份错误文件,再写入正确配置:

步骤 3:重新加载并验证(关键)

1
2
3
4
5
6
7
8
9
10
11
12
# 重新加载所有systemd配置(使新的hbbr配置生效)
sudo systemctl daemon-reload

# 检查服务文件语法(无输出=语法完全正确)
sudo systemd-analyze verify /etc/systemd/system/rustdesk-hbbr.service

# 启动服务并查看状态
sudo systemctl start rustdesk-hbbr.service
sudo systemctl status rustdesk-hbbr.service

sudo systemctl start rustdesk-hbbs.service
sudo systemctl status rustdesk-hbbs.service

验证是否真正加载成功

除了 systemctl status 显示 active (running),还需验证端口监听:

1
2
3
4
5
# 检查hbbr是否监听21118(TCP)和21119(UDP)端口
sudo ss -tulpn | grep hbbr
# 正常输出示例:
# tcp LISTEN 0 128 0.0.0.0:21118 0.0.0.0:* users:(("hbbr",pid=xxxx,fd=3))
# udp UNCONN 0 0 0.0.0.0:21119 0.0.0.0:* users:(("hbbr",pid=xxxx,fd=4))

ufw启动的端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1. 先删除原有规则(可选,确保规则干净)
ufw delete allow 21116/udp
ufw delete allow 21116/tcp
ufw delete allow 21117/tcp



# 2. 添加统一格式的规则(注释、优先级一致)
ufw allow 21115/tcp comment 'RustDesk NAT test 辅助端口(可选)'
ufw allow 21116/udp comment 'RustDesk - P2P/UDP 通信(统一监听 *:21116)'
ufw allow 21116/tcp comment 'RustDesk - ID/TCP 通信(统一监听 *:21116)'
ufw allow 21117/tcp comment 'RustDesk - 中继/TCP 通信(统一监听 *:21117)'
ufw allow 21118/tcp comment 'RustDesk - 中继/备用 TCP 通信(统一监听 *:21118'
ufw allow 21119/udp comment 'RustDesk - 中继/备用 UDP 打洞(统一监听 *:21119'


# 3. 重载 UFW 并验证
ufw reload
ufw status numbered

更换密钥和公钥

生成ed25519密钥

然后复制生成的密钥和公钥,替换掉原有的公钥和密钥,客户端key换成现在新生成公钥,公钥文件中所有的数据都要复制下来放到客户端的key中
或者直接删除密钥与公钥,会自动重新生成公钥与密钥

编写make

1
2
3
4
5
6
7

DEFINE: ##默认目标
@echo "默认程序"

TARGET: #生成目标


关键验证:区分 UDP P2P 和 TCP 兜底

  1. 客户端查看
    连接成功后,若状态栏显示Direct,默认就是 UDP P2P;若显示Direct(TCP),则是 TCP P2P 兜底。

  2. 服务器抓包验证

这是最直接的验证方式,抓包能看到新端口的 P2P 数据交互:

1
2
3
4
5
# 抓 UDP 21116 端口流量(P2P 主力)
tcpdump -i any udp port 21116 -nn
# 抓 tcp 21116 端口流量(P2P 主力)
tcpdump -i any tcp port 21116 -nn
# 若有客户端之间的 UDP 包交互 → UDP P2P 生效

​ P2P 打洞成功的日志特征(和原 21116 端口逻辑一致):

1
2
3
4
# 外部客户端 → 服务器新端口的 UDP 包(打洞请求)
00:20:10.123456 eth0 In IP 113.8.23.225.xxxx > 172.16.0.4.21116: UDP, length 15
# 服务器 → 外部客户端的 UDP 包(打洞响应,双向通信建立)
00:20:10.123678 eth0 Out IP 172.16.0.4.21116 > 113.8.23.225.xxxx: UDP, length 2

fail2ban防御

点击这里跳转rustdesk的fail2ban配置
1
2
3
4
5
6
7
8
9
10
# 允许 80/TCP(HTTP 跳转)
ufw allow 80/tcp comment 'HTTP 跳转 HTTPS'
# 允许 443/TCP(HTTPS 主入口)
ufw allow 443/tcp comment 'HTTPS 核心入口'
# 允许 21116/UDP(ID 心跳检测)
ufw allow 21116/udp comment 'RustDesk UDP 心跳'
# 允许本机访问 21115-21119(仅本机,拒绝外部访问)
ufw allow from 127.0.0.1 to any port 21115:21119 comment '本机访问 RustDesk 后端'
# 拒绝外部访问 21115-21119(兜底)
ufw deny 21115:21119/tcp comment '拒绝外部访问 RustDesk 后端 TCP'
1
2
3
4
5
6
7
8
9
10
11
# 1. 创建 RD 用户的家目录
mkdir -p /home/RD/.config/rustdesk

# 2. 赋权给 RD 用户
chown -R RD:RD /home/rustdesk

# 3. 重启 hbbs 消除警告
systemctl restart rustdesk-hbbs.service

# 4. 验证日志(警告消失)
tail -f /var/log/rustdesk-hbbs.log

Windowns

安装

rustdesk 下载地址:https://github.com/rustdesk/rustdesk-server/releases
下载这个文件:rustdesk-server-windows-x86_64-unsigned.zip

nssm下载地址:https://nssm.cc/download
下载这个文件https://nssm.cc/release/nssm-2.24.zip

官网安装文章:https://rustdesk.com/docs/zh-cn/self-host/rustdesk-server-oss/windows/

上面这种方式是我选的,也可以选外的

开启的端口和上面相同

目录配置

选择一个地方创建一个目录 RustDesk_Server如下

其中id_ed25519 id_ed25519.pub 是自动生成的,不用管;如果想要更换这两个文件,先卸载暗转,然后再安装文件就可以了。

安装文件install_rustdesk_service.bat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
@echo off
chcp 65001 >nul
echo ====================== 开始注册 RustDesk 服务 ======================
:: 定义路径(需修改为你的实际路径)
set "BASE_ADDRESS = 这里填写你要安装的目录"
set "RUSTDESK_SERVER_DIR=%BASE_ADDRESS%\RustDesk_Server\x86_64"
set "NSSM_PATH=%BASE_ADDRESS%\RustDesk_Server\nssm-2.24\win64\nssm.exe"
set "SERVER_IP=temp1ali.goupos.cn" :: 替换为服务端本机IP
set "RustDesk_HBBS = RustDesk hbbs service"
set "RustDesk_HBBR = RustDesk hbbr Service"
set "PUB_KEY_FILE=%BASE_ADDRESS%\RustDesk_Server\x86_64\id_ed25519.pub" :: 公钥文件路径

:: 检查路径是否存在
if not exist "%RUSTDESK_SERVER_DIR%\hbbs.exe" (
echo 错误:hbbs.exe 不存在,请检查路径!
pause
exit /b 1
)
if not exist "%RUSTDESK_SERVER_DIR%\hbbr.exe" (
echo 错误:hbbr.exe 不存在,请检查路径!
pause
exit /b 1
)
if not exist "%NSSM_PATH%" (
echo 错误:nssm.exe 不存在,请将 nssm.exe 放到 %RUSTDESK_SERVER_DIR% 目录!
pause
exit /b 1
)

:: 注册 hbbs 服务 -k "%PUBLIC_KEY%"
echo 正在注册 RustDesk_HBBS 服务...
"%NSSM_PATH%" install RustDesk_HBBS "%RUSTDESK_SERVER_DIR%\hbbs.exe" -r %SERVER_IP%
"%NSSM_PATH%" set RustDesk_HBBS Start SERVICE_AUTO_START
"%NSSM_PATH%" set RustDesk_HBBS AppRestartDelay 10000
"%NSSM_PATH%" set RustDesk_HBBS AppRestartCount 3

:: 注册 hbbr 服务
echo 正在注册 RustDesk_HBBR 服务...
"%NSSM_PATH%" install RustDesk_HBBR "%RUSTDESK_SERVER_DIR%\hbbr.exe"
"%NSSM_PATH%" set RustDesk_HBBR Start SERVICE_AUTO_START
"%NSSM_PATH%" set RustDesk_HBBR AppRestartDelay 10000
"%NSSM_PATH%" set RustDesk_HBBR AppRestartCount 3

:: 启动服务
echo 正在启动 RustDesk 服务...
"%NSSM_PATH%" start RustDesk_HBBS
"%NSSM_PATH%" start RustDesk_HBBR

:: 验证服务状态
echo ====================== 服务状态检查 ======================
"%NSSM_PATH%" status RustDesk_HBBS
"%NSSM_PATH%" status RustDesk_HBBR

echo ====================== 操作完成 ======================
echo 若服务状态为 Running 则注册启动成功!
pause

卸载安装uninstall_rustdesk_service.bat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@echo off
chcp 65001 >nul
echo ====================== 开始卸载 RustDesk 服务 ======================
:: 定义 NSSM 路径(需修改为实际路径)
set "BASE_ADDRESS = 这里填写你要安装的目录"
set "NSSM_PATH=%BASE_ADDRESS%\RustDesk_Server\nssm-2.24\win64\nssm.exe"
set "RustDesk_HBBS = RustDesk hbbs service"
set "RustDesk_HBBR = RustDesk hbbr Service"

:: 检查 nssm.exe 是否存在
if not exist "%NSSM_PATH%" (
echo 错误:nssm.exe 不存在,请检查路径!
pause
exit /b 1
)

:: 停止服务
echo 正在停止 RustDesk 服务...
"%NSSM_PATH%" stop RustDesk_HBBS
"%NSSM_PATH%" stop RustDesk_HBBR

:: 删除服务
echo 正在删除 RustDesk 服务...
"%NSSM_PATH%" remove RustDesk_HBBS confirm
"%NSSM_PATH%" remove RustDesk_HBBR confirm

echo ====================== 卸载完成 ======================
echo RustDesk 服务已停止并删除!
pause

重启安装restart_rustdesk_service.bat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 @echo off
chcp 65001 >nul
echo ====================== 开始重启 RustDesk 服务 ======================
set "BASE_ADDRESS = 这里填写你要安装的目录"
set "NSSM_PATH=%BASE_ADDRESS%\RustDesk_Server\nssm-2.24\win64\nssm.exe"
set "RustDesk_HBBS = RustDesk hbbs service"
set "RustDesk_HBBR = RustDesk hbbr Service"

if not exist "%NSSM_PATH%" (
echo 错误:nssm.exe 不存在!
pause
exit /b 1
)

"%NSSM_PATH%" restart RustDesk_HBBS
"%NSSM_PATH%" restart RustDesk_HBBR

echo 服务重启完成,当前状态:
"%NSSM_PATH%" status RustDesk_HBBS
"%NSSM_PATH%" status RustDesk_HBBR

pause

这些地方只需要配置 BASE_ADDRESS 这个值

.env文件配置

1
2
3
4
5
6
7
# https://github.com/rustdesk/rustdesk-server#env-variables
RUST_LOG=info
relay-servers=填写域名
Key = 添加你自己的公钥,复制公钥内容填写
#这是配置的多节点服务器
rendezvous-servers=192.168.25.48,192.168.52.3,192.168.100.2
port = 30000