目标:在 Debian 上自建 RustDesk OSS ID/中继服务。下面以 Linux amd64、服务端 1.1.16 为固定示例;2026-10-15 已核对官方 ZIP 可下载、SHA-256 和目录结构,未在本轮启动真实 Linux 服务。
准备环境
- Debian、root 或 sudo 权限;以下安装与服务管理命令按 root 编写。
- 一台有公网 IP 的服务器,域名可选。
- Linux amd64 架构;其他架构从服务端 Release 选择对应文件,不能沿用本例校验值。
端口与防火墙
| 端口 | 协议 | 服务与用途 |
|---|---|---|
21115 |
TCP | hbbs:NAT 类型测试 |
21116 |
TCP | hbbs:TCP 打洞与连接服务 |
21116 |
UDP | hbbs:ID 注册与心跳 |
21117 |
TCP | hbbr:中继服务 |
21118 |
TCP | hbbs:WebSocket,仅 Web 客户端需要 |
21119 |
TCP | hbbr:WebSocket,仅 Web 客户端需要 |
21114/TCP 是 Pro 版 Web 控制台端口,本篇 OSS 部署无需开放;它不是客户端心跳端口。
使用 UFW 时,为原生客户端放行:
ufw allow 21115/tcp
ufw allow 21116/tcp
ufw allow 21116/udp
ufw allow 21117/tcp
ufw status
云厂商安全组也要放行相同协议与端口。不要为了测试关闭整个防火墙;启用 UFW 前应先确保 SSH 管理规则已配置。
不使用 Web 客户端时保持 21118/21119 关闭。需要时通过配置正确的反向代理开放 WebSocket,并将后端端口限制为只有反代可访问;不要直接向公网开放后再信任客户端提供的 IP 头。
下载并核对服务端
服务端仓库是 rustdesk/rustdesk-server,与客户端仓库 rustdesk/rustdesk 不同。
apt update
apt install -y ca-certificates curl unzip
mkdir -p /opt/rustdesk-download
cd /opt/rustdesk-download
curl -fL --proto '=https' --tlsv1.2 -o rustdesk-server-linux-amd64.zip https://github.com/rustdesk/rustdesk-server/releases/download/1.1.16/rustdesk-server-linux-amd64.zip
printf '%s\n' '0565c41affe6c3f409b0bddfaf5a24ccbf3f64f5f8e3fec250b69a0d5f6bdbcf rustdesk-server-linux-amd64.zip' | sha256sum -c -
只有校验成功后再继续。升级到其他版本时,先独立核对该版本官方 Release 的文件和摘要,再一起更新 URL 与校验值。
该 ZIP 内的程序位于 amd64/:
unzip rustdesk-server-linux-amd64.zip
install -d -m 755 /opt/rustdesk-server
install -m 755 amd64/hbbs amd64/hbbr /opt/rustdesk-server/
服务用户与持久化目录
程序和服务数据分开存放。创建独立系统用户,让两个服务使用同一数据目录:
id -u rustdesk >/dev/null 2>&1 || useradd --system --user-group --home-dir /var/lib/rustdesk --shell /usr/sbin/nologin rustdesk
install -d -o rustdesk -g rustdesk -m 700 /var/lib/rustdesk
如果是迁移旧服务,先停止旧进程并备份原工作目录,再把已有密钥与数据库迁入该数据目录并修正属主。不要在迁移时意外重新生成密钥。
systemd 开机自启
将下面的 YOUR_PUBLIC_HOST 替换成服务器公网域名或 IP。
创建 /etc/systemd/system/hbbs.service:
[Unit]
Description=RustDesk ID Server (hbbs)
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/opt/rustdesk-server/hbbs -r YOUR_PUBLIC_HOST:21117
WorkingDirectory=/var/lib/rustdesk
User=rustdesk
Group=rustdesk
UMask=0077
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
创建 /etc/systemd/system/hbbr.service:
[Unit]
Description=RustDesk Relay Server (hbbr)
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/opt/rustdesk-server/hbbr
WorkingDirectory=/var/lib/rustdesk
User=rustdesk
Group=rustdesk
UMask=0077
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
检查配置并启动:
systemd-analyze verify /etc/systemd/system/hbbs.service /etc/systemd/system/hbbr.service
systemctl daemon-reload
systemctl enable --now hbbr hbbs
systemctl status hbbs hbbr
journalctl -u hbbs -u hbbr -n 50 --no-pager
旧的前台/后台测试进程必须先退出,避免端口占用。检查监听端口:
ss -lntup | grep -E '21115|21116|21117'
密钥与客户端
hbbs 首次启动时会在工作目录生成密钥,不使用 hbbs -g:
/var/lib/rustdesk/id_ed25519:私钥,只留在服务端并备份。/var/lib/rustdesk/id_ed25519.pub:公钥,提供给客户端。
确认文件存在,再读取公钥:
test -s /var/lib/rustdesk/id_ed25519
test -s /var/lib/rustdesk/id_ed25519.pub
cat /var/lib/rustdesk/id_ed25519.pub
客户端设置 → 网络:
ID Server填服务器域名或 IP。- 如需显式指定中继,
Relay Server填同一服务器地址(默认中继端口21117)。 Key填上面公钥文件的内容,不能填私钥。
将主机密钥纳入备份;升级或迁移时保留它,否则原客户端的公钥配置会失效。
验证与排错
- 客户端能获取 ID:核对 hbbs、
21116/TCP+UDP和服务日志。 - 在不同网络间测试直连;再测试强制中继,确认 hbbr 与
21117/TCP正常。一次直连成功不能证明中继可用。 - Key 错误:检查客户端公钥与服务端当前工作目录是否对应。
- 服务启动失败:检查二进制架构、
WorkingDirectory权限和端口是否被旧进程占用。