Files
knowledge-base/projects/dttb/rustdesk.md
dttb da0b57e26c RustDesk LXC 116: миграция OSS → lejianwen-pro 1.1.14 (MUST_LOGIN=Y)
- Подмена hbbs/hbbr на pro-бинари из docker lejianwen/rustdesk-server-s6, apt-mark hold
- Systemd overrides: hbbs --must-login Y -k _ -r remot.dttb.ru:21117; hbbr -k _
- config.yaml: lang ru, домен remot.dttb.ru, ключ + jwt прописаны, swagger on
- NPM Proxy Host 14: forward 10.0.0.244, SSL force, http2, /ws/id /ws/relay locations
- NPM streams 21115-21119 пересозданы (id 38-43), Stream 30 удалён
- Admin pw сменён, бэкап + rollback-скрипт в /root/rustdesk-* на LXC 116
- Ключ id_ed25519 идентичен до/после, 13 peers продолжают работать

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 12:20:17 +03:00

6.4 KiB
Raw Blame History

date, type, tags
date type tags
2026-04-28 project-reference
rustdesk
lxc116
lejianwen
dttb

RustDesk Server — справочник

Что это

Self-hosted Remote Desktop сервер для парка ~30-50 машин (НИИКН + клиенты). Стек lejianwen/rustdesk-server-pro 1.1.14 (hbbs/hbbr) + lejianwen/rustdesk-api 2.7 на нативной Debian-установке (без Docker), с MUST_LOGIN=Y.

История миграции: ../../decisions/2026-04-28-rustdesk-lejianwen-pro-migration

Где живёт

  • LXC 116 rustdeskserver на Proxmox 10.0.0.250
  • IP: 10.0.0.244 (LAN) / 100.70.191.161 (NetBird)
  • Debian 12, 1 vCPU / 512M / 2G — community-script установка

Домен

Сервисы (systemd)

rustdesk-hbbs.service   — ID/Rendezvous server (hbbs --must-login Y -k _ -r remot.dttb.ru:21117)
rustdesk-hbbr.service   — Relay server (hbbr -k _)
rustdesk-api.service    — Web admin + REST API (на 21114)

Бинари:

  • /usr/bin/hbbs — pro 1.1.14 (с патчем --must-login Y)
  • /usr/bin/hbbr — pro 1.1.14
  • /usr/bin/rustdesk-api — 2.7
  • /usr/bin/{hbbs,hbbr}.oss-1.1.14 — rollback-копии

apt-mark hold rustdesk-server-hbbs rustdesk-server-hbbr — apt не перезапишет.

Override-конфиги:

  • /etc/systemd/system/rustdesk-hbbs.service.d/override.conf
  • /etc/systemd/system/rustdesk-hbbr.service.d/override.conf

Порты

Порт Протокол Назначение
21114 TCP rustdesk-api HTTP (только через NPM HTTPS!)
21115 TCP hbbs NAT-test
21116 TCP+UDP hbbs ID/rendezvous (UDP — основной)
21117 TCP hbbr relay
21118 TCP hbbs WebSocket (для All-In-HTTPS клиентов через /ws/id)
21119 TCP hbbr WebSocket (через /ws/relay)

NPM Proxy Host id=14: https://remot.dttb.ru → 10.0.0.244:21114 + custom nginx с /ws/id и /ws/relay. NPM Streams: id 38-43 (21115/TCP, 21116/UDP, 21116/TCP, 21117/TCP, 21118/TCP, 21119/TCP) → 10.0.0.244.

Ключи

  • /var/lib/rustdesk-server/id_ed25519 — приватный (88 байт)
  • /var/lib/rustdesk-server/id_ed25519.pubR0lA4r77hAGw6YRL1qG3JioVqQ0Q0fJfzkwlAGqR6jU=

Не перегенерировать! Иначе все ~30-50 клиентов перестанут подключаться.

БД

  • /var/lib/rustdesk-server/db_v2.sqlite3 — БД hbbs (peers state)
  • /var/lib/rustdesk-api/data/rustdeskapi.db — БД api (users, groups, address_books, audit_logs)

Пока SQLite. План: MySQL когда дойдём до HA.

Конфиг api

/var/lib/rustdesk-api/conf/config.yaml — основные параметры:

  • lang: ru
  • app.register: false (регистрация выключена — юзеров создаёт админ)
  • app.show-swagger: 1
  • app.ban-threshold: 5
  • app.captcha-threshold: 3
  • rustdesk.id-server: remot.dttb.ru:21116
  • rustdesk.relay-server: remot.dttb.ru:21117
  • rustdesk.api-server: https://remot.dttb.ru
  • rustdesk.key: <id_ed25519.pub>
  • jwt.key: <см. credentials>
  • ldap.enable: false

Шаблон RustDesk2.toml для клиентов

/root/RustDesk2.toml на LXC 116:

rendezvous_server = "remot.dttb.ru:21116"
nat_type = 1
serial = 1

[options]
custom-rendezvous-server = "remot.dttb.ru"
relay-server = "remot.dttb.ru"
api-server = "https://remot.dttb.ru"
key = "R0lA4r77hAGw6YRL1qG3JioVqQ0Q0fJfzkwlAGqR6jU="
allow-websocket = "Y"
verification-method = "use-permanent-password"
approve-mode = "password"

CLI-команды (на LXC 116)

# Сменить пароль admin
cd /var/lib/rustdesk-api && /usr/bin/rustdesk-api reset-admin-pwd <new-pw>

# Сменить пароль обычного юзера
cd /var/lib/rustdesk-api && /usr/bin/rustdesk-api reset-pwd <username> <new-pw>

# Список peers через sqlite
sqlite3 /var/lib/rustdesk-api/data/rustdeskapi.db \
  "select id, last_online_ip, datetime(last_online_time,'unixepoch') from peers order by last_online_time desc limit 10;"

# Список юзеров
sqlite3 /var/lib/rustdesk-api/data/rustdeskapi.db \
  "select id, username, group_id, status, is_admin from users;"

# Логи
tail -f /var/log/rustdesk-server/hbbs.log
tail -f /var/log/rustdesk-server/hbbr.log
tail -f /var/log/rustdesk-api/rustdesk-api.log

Бэкап и rollback

  • /root/rustdesk-backup-20260428-1134/ — бэкап от 2026-04-28 миграции (ключи, БД, config.yaml.orig)
  • /root/rustdesk-rollback.sh — откат к OSS bin'ам за 30 сек

Известные нюансы

  • MUST_LOGIN работает только в pro-бинаре hbbs. OSS hbbs (как был до 2026-04-28) этот флаг игнорирует. См. ../../decisions/2026-04-28-rustdesk-lejianwen-pro-migration.
  • Admin REST API через curl без web-сессии не пускает. Юзеров/группы создавать через https://remot.dttb.ru/_admin/.
  • NPM streams API — PUT не работает (валидатор additional properties). Только DELETE + POST.
  • community-script может пытаться обновить пакетыapt-mark hold защищает hbbs/hbbr, но если запустить полный re-run скрипта community-scripts, могут быть сюрпризы. Не запускать без необходимости.
  • /proc/loadavg в LXC = нагрузка хоста, не контейнера (../../../knowledge-base/feedback_lxc_loadavg в memory).

TODO

  • Раскатать RustDesk2.toml на парк через GPO/скрипт
  • Заполнить группы клиентских организаций
  • Бэкап на ArtLeon через cron + rsync (NetBird)
  • Через 2-4 недели — миграция в Docker lejianwen/rustdesk-server-s6 (Вариант A3 из decision-файла)
  • MCP-обёртка поверх Swagger API для управления из Claude Code
  • HA-схема на втором экземпляре (НИИКН Proxmox) с общей MySQL