rustdesk笔记

Ubuntu安装

版本说明

文件名 架构 适用设备类型 具体设备示例 适用性说明
rustdesk-server-hbbr_1.1.15_amd64.deb amd64 (x86_64) 现代64位PC/服务器 • 2010年后所有Intel/AMD PC • 云服务器(AWS EC2, 阿里云ECS, 腾讯云CVM) • 普通台式机、笔记本电脑 Ubuntu 24.04推荐,99%的现代服务器和PC
rustdesk-server-hbbr_1.1.15_arm64.deb arm64 (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.deb armhf (armv7l) 32位ARM设备 • Raspberry Pi 3B/3B+ (32位系统) • Raspberry Pi Zero • 旧款安卓设备 适用于32位ARM架构设备,如Raspberry Pi 3
rustdesk-server-hbbr_1.1.15_i386.deb i386 (x86) 32位x86老旧设备 • 2005-2010年PC • 旧版嵌入式设备 仅适用于老旧32位PC,不推荐用于现代系统
rustdesk-server-hbbs_1.1.15_amd64.deb amd64 (x86_64) 现代64位PC/服务器 • 2010年后所有Intel/AMD PC • 云服务器 • 普通台式机、笔记本电脑 Ubuntu 24.04推荐,99%的现代服务器和PC
rustdesk-server-hbbs_1.1.15_arm64.deb arm64 (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.deb armhf (armv7l) 32位ARM设备 • Raspberry Pi 3B/3B+ (32位系统) • Raspberry Pi Zero 适用于32位ARM架构设备,如Raspberry Pi 3
rustdesk-server-hbbs_1.1.15_i386.deb i386 (x86) 32位x86老旧设备 • 2005-2010年PC • 旧版嵌入式设备 仅适用于老旧32位PC,不推荐用于现代系统
rustdesk-server-linux-amd64.zip amd64 (x86_64) 现代64位PC/服务器 • 2010年后所有Intel/AMD PC • 云服务器 • 普通台式机、笔记本电脑 适用于所有64位系统,适合手动安装或Docker部署
rustdesk-server-linux-arm64v8.zip arm64 (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:

github代理

按任意按键结束

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 默认端口如下,服务器防火墙 / 云服务商安全组必须放行

端口号 协议 对应程序 用途 是否必需
21115 TCP hbbs 心跳 / ID 服务器通信(如果不开启,无法知道设备是否在线) 可选
21116 TCP/UDP hbbs TCP 用于 RPC,UDP 用于 P2P(这个端口后期可以配置到其他端口) 必需
21117 TCP hbbr WebSocket 通信(备用)必需
中继数据转发。所有的屏幕画面、键盘鼠标操作数据在无法直连时,都通过此端口传输。
必需,否则无法在 P2P 失败时连接
21118 TCP hbbs 中继服务器 TCP 通信 必需
21119 UDP hbbr 中继服务器 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
[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/域名)
ExecStart=/bin/bash -c '/opt/rustdesk-server/hbbs -r 你的服务器公网IP或域名 -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

更换密钥和公钥

直接使用git生成id_ed25519

1
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "email@域名.后缀"

然后复制生成的密钥和公钥,替换掉原有的公钥和密钥,客户端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防御

filter.d

/etc/fail2ban/filter.d/目录下新建rustdesk.conf文件,用于匹配 RustDesk 的攻击 / 扫描日志特征:

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
[INCLUDES]
before = common.conf

[Definition]
# 先定义端口变量(也可在jail中定义,这里更集中)
# rustdesk_ports = 21115|21116|21117|21118|21119
# 规则1:匹配RustDesk的无效连接/认证失败(hbbs/hbbr日志中的关键字)
failregex = ^%(__prefix_line)s.*(RustDesk|hbbs|hbbr).*Failed to authenticate from <HOST>.*$
^%(__prefix_line)s.*(RustDesk|hbbs|hbbr).*Invalid connection from <HOST>.*$
^%(__prefix_line)s.*(RustDesk|hbbs|hbbr).*Rejected connection from <HOST>.*$
^%(__prefix_line)s.*(RustDesk|hbbs|hbbr).*Too many attempts from <HOST>.*$
# 规则2:匹配端口扫描特征(syslog中的RustDesk端口高频连接失败)
# ^%(__prefix_line)s.*sshd.*Connection refused by <HOST>.*:(21115|21116|21117|21118|21119).*$
# ^%(__prefix_line)s.*sshd.*Connection refused by <HOST>.*:(%(rustdesk_ports)s).*$
^%(__prefix_line)s.*sshd.*Connection refused by <HOST>.*:(%(ports)s).*$
# ^%(__prefix_line)s.*tcp.*Connection from <HOST> to .*:(21115|21116|21117|21118|21119) .* flags=SYN.*$
# ^%(__prefix_line)s.*tcp.*Connection from <HOST> to .*:(%(rustdesk_ports)s) .* flags=SYN.*$
^%(__prefix_line)s.*tcp.*Connection from <HOST> to .*:(%(ports)s) .* flags=SYN.*$

# 忽略本地IP和信任IP
ignoreregex = ^.*from 127.0.0.1.*$
^.*from ::1.*$
# ^.*from 192.168\..*$
# ^.*from 172.16\..*$
# ^.*from 10\..*$

批量替换脚本(适合运维自动化)

若需频繁切换端口,可写一个简单脚本批量替换过滤规则中的端口:

1
2
3
4
5
6
7
#!/bin/bash
# 用法:./update_rustdesk_ports.sh "21115|21116|21120"
NEW_PORTS=$1
# 替换过滤规则中的端口(备份原文件)
sudo sed -i.bak "s/(21115|21116|21117|21118|21119)/($NEW_PORTS)/g" /etc/fail2ban/filter.d/rustdesk.conf
# 重启fail2ban生效
sudo systemctl restart fail2ban

Jail

Jail 配置文件 (/etc/fail2ban/jail.d/rustdesk.conf)

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
[rustdesk]
enabled = true
filter = rustdesk
# 监控的日志文件(全覆盖攻击行为)
logpath = /var/log/rustdesk-hbbs.log
/var/log/rustdesk-hbbr.log
/var/log/syslog
/var/log/auth.log
# ===================== 端口核心配置 =====================
# 定义 RustDesk 标准端口(多端口用 | 分隔,适配正则)
ports = 21115|21116|21117|21118|21119
# 对应防火墙封禁的端口(用 , 分隔,适配 fail2ban 动作)
port = 21115,21116,21117,21118,21119

# ===================== 封禁策略 =====================
# 检测窗口:10分钟内(短窗口适配高频扫描)
findtime = 600
# 触发阈值:3次失败即封禁
maxretry = 3
# 首次封禁时长:1小时(3600秒)
bantime = 3600
action = iptables-allports
# 灵活配置忽略的IP段(CIDR格式,精准可控)
# 仅忽略回环IP
ignoreip = 127.0.0.1 ::1 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8

# 可选:阶梯式封禁
# 阶梯式封禁(强化防御换IP攻击)
bantime.increment = true
# 每次封禁时长翻倍
bantime.factor = 1.5
# 随机增加0~1小时封禁时间
bantime.rndtime = 3600
# 最大封禁7天(可设为 permanent 永久封禁)
bantime.maxtime = 604800
# 可选:永久封禁(慎用!误封后需手动解封)
# bantime.maxtime = permanent
# 历史记录保留时间(7天)
bantime.multipliers = 1 5 10 24



# ===================== 忽略IP配置 =====================
# 忽略回环IP+内网IP段(CIDR格式,精准可控)
ignoreip = 127.0.0.1 ::1 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8

# ===================== 封禁动作 =====================
# 封禁IP的所有端口(若仅封禁指定端口,改为 iptables-multiport) iptables-allports
#action = iptables-allports

若设 bantime.maxtime = permanent(永久封禁),误封合法 IP 后需手动解封

1
2
# 手动解封永久封禁的IP
sudo fail2ban-client set rustdesk unbanip 192.168.1.100

长越长,防御效果越好,但需确保 maxretry(触发封禁的失败次数)不要设太低(比如至少 3 次),避免误封(比如合法 IP 输错密码 / 端口)。

重新加载 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

注意

只要修改了端口,那么所有的端口都会跟随变化

21115 21116(默认端口) 21117 21118 21119
29999 30000(修改后的端口) 30001 30002 30003

客户端:ID/中继服务器,如果修改的端口是:30000

ID服务器格式 你服务器IP:修改后的端口
你服务器IP:30000
中继服务器格式 你服务器IP:修改后的端口
你服务器IP:30000

修改端口号,好像无法通讯,有能力的测试或者实验一下