---
date: 2026-04-28
type: project-reference
tags: [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 установка

## Домен

- Внешний: **`remot.dttb.ru`** (Cloudflare → роутер dttb.ru → NPM 10.0.0.195 → 10.0.0.244)
- Web-админка: https://remot.dttb.ru/_admin/
- Swagger: https://remot.dttb.ru/swagger/index.html
- Login: см. [[credentials#RustDesk Server (LXC 116)]]

## Сервисы (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.pub` — `R0lA4r77hAGw6YRL1qG3JioVqQ0Q0fJfzkwlAGqR6jU=`

**Не перегенерировать!** Иначе все ~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:

```toml
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)

```bash
# Сменить пароль 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
