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>
This commit is contained in:
@@ -48,6 +48,26 @@ tags: [dttb]
|
||||
| Email | `it5870@yandex.ru` |
|
||||
| Пароль | `1qaz!QAZ` |
|
||||
|
||||
## RustDesk Server (LXC 116 — 10.0.0.244)
|
||||
|
||||
| Параметр | Значение |
|
||||
|----------|----------|
|
||||
| Web admin URL | https://remot.dttb.ru/_admin/ |
|
||||
| Swagger | https://remot.dttb.ru/swagger/index.html |
|
||||
| Логин | `admin` |
|
||||
| Пароль | `rhJpxDDDurHfpEyCQjyi` |
|
||||
| Public key (для RustDesk2.toml) | `R0lA4r77hAGw6YRL1qG3JioVqQ0Q0fJfzkwlAGqR6jU=` |
|
||||
| JWT key (config.yaml `jwt.key`) | `mrQPMJh6QBGp93aVqv14IG4R5g4zjxNRs3gLHtjJr4rqgGm164ciMVrQJDP2GIQh` |
|
||||
| Бэкап ключей и БД | `/root/rustdesk-backup-20260428-1134/` (на LXC 116) |
|
||||
| Rollback к OSS | `bash /root/rustdesk-rollback.sh` (на LXC 116) |
|
||||
|
||||
Сервер — `lejianwen-pro` 1.1.14 (`hbbs`/`hbbr` с `MUST_LOGIN=Y`) + `rustdesk-api` 2.7. Подробности: [[rustdesk]] и [[../../decisions/2026-04-28-rustdesk-lejianwen-pro-migration]].
|
||||
|
||||
CLI смены пароля admin (на LXC 116):
|
||||
```bash
|
||||
cd /var/lib/rustdesk-api && /usr/bin/rustdesk-api reset-admin-pwd <new-pw>
|
||||
```
|
||||
|
||||
## Nextcloud AIO (VM 250 — 10.0.0.230:11001)
|
||||
|
||||
| Параметр | Значение |
|
||||
@@ -96,6 +116,37 @@ tags: [dttb]
|
||||
| 10.0.0.250 (Proxmox) | 22 | root / `1qaz!QAZ` |
|
||||
| VPS swtest.ru (`89.111.140.86` / `100.70.93.36`) | 22 | root / ключ `~/.ssh/vps_znam_key` (RSA). Алиас SSH: `ssh vps-znam` (через Netbird) или `ssh vps-znam-public`. Ключ развёрнут на Mac и openclaw LXC 137. Подробности: [vps-swtest.md](vps-swtest.md) |
|
||||
|
||||
## Apple ID (США)
|
||||
|
||||
| Параметр | Значение |
|
||||
|----------|----------|
|
||||
| Apple ID | `hbuggle819@icloud.com` |
|
||||
| Пароль | `App5870w` |
|
||||
| Регион | United States |
|
||||
| 2FA trusted phone | номер Олега, заканчивается на `...70` (при входе выбирать его, код приходит к Олегу по SMS) |
|
||||
| Назначение | скачивание приложений из US App Store (AmneziaVPN, Happ, Instagram и т.п.) для себя и клиентов |
|
||||
| Инструкция для клиента | [snippets/apple-id-us-on-russia.md](../../snippets/apple-id-us-on-russia.md) |
|
||||
|
||||
⚠️ Входить **только в App Store → Медиа и покупки**, НЕ в iCloud (иначе риск смешения данных).
|
||||
|
||||
## Telegra.ph (для инструкций клиентам)
|
||||
|
||||
| Параметр | Значение |
|
||||
|----------|----------|
|
||||
| Account short_name | `dttb` |
|
||||
| Author | `Oleg Batlaev` |
|
||||
| Access token | `c38dcadb86e6edd7efc76496d9171d38beef6dc0f6a7ef2cd79bbae70e46` |
|
||||
| Auth URL (вход в редактор) | https://edit.telegra.ph/auth/f1tfgzYpPpGlAr7cYHRzSeH59fYuNVB2V3fbCdypDc |
|
||||
|
||||
Назначение: публиковать подробные инструкции (VPN, онбординг) как Telegra.ph-страницы — Telegram рендерит их через Instant View, markdown не ломается. Создание страницы: `POST https://api.telegra.ph/createPage` с этим access_token. Редактирование: `POST https://api.telegra.ph/editPage` или через Auth URL в браузере.
|
||||
|
||||
**Скрипты в vault:**
|
||||
- [snippets/telegraph-publish-client-instruction.py](../../snippets/telegraph-publish-client-instruction.py) — создаёт новую страницу из Python-кода (содержимое прописано в самом скрипте)
|
||||
- [snippets/telegraph-md-to-page.py](../../snippets/telegraph-md-to-page.py) — **конвертер markdown → Telegraph Node**, редактирует `Nastrojka-VPN-04-24-2`. Поддерживает вложенные списки, inline code/links/bold/italic, защищает code-spans от italic-парсинга. Чтобы опубликовать новый md: поменять PATH/TITLE/источник файла в `main()`.
|
||||
|
||||
**Созданные страницы:**
|
||||
- https://telegra.ph/Nastrojka-VPN-04-24-2 — VPN + US Apple ID для Ярослава (без ключа — ключ отдаётся отдельным сообщением)
|
||||
|
||||
## Netbird (netbird.io cloud)
|
||||
|
||||
| Параметр | Значение |
|
||||
|
||||
@@ -133,8 +133,9 @@ tags: [dttb, proxmox]
|
||||
|----------|----------|
|
||||
| Статус | 🟢 running |
|
||||
| IP | 10.0.0.244 (LAN) / 100.70.191.161 (NetBird) |
|
||||
| NPM домен | remot.dttb.ru *(в NPM записан 10.0.0.43 — устарело, проверить)* |
|
||||
| Назначение | RustDesk Server |
|
||||
| NPM домен | remot.dttb.ru → 10.0.0.244:21114 (Proxy Host id 14) + streams 21115-21119 (id 38-43) |
|
||||
| Назначение | RustDesk Server (`lejianwen-pro` hbbs/hbbr 1.1.14 + `rustdesk-api` 2.7, MUST_LOGIN=Y, нативно через systemd) |
|
||||
| Справочник | [[rustdesk]] · миграция: [[../../decisions/2026-04-28-rustdesk-lejianwen-pro-migration]] |
|
||||
|
||||
### LXC 132 — code-server
|
||||
| Параметр | Значение |
|
||||
|
||||
154
projects/dttb/rustdesk.md
Normal file
154
projects/dttb/rustdesk.md
Normal file
@@ -0,0 +1,154 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user