Amnezia Web Panel: LXC 143 — control-plane VPN-нод (NetBird-only), HOSTKEY Finland хаб; persistence data.json через bind-mount
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
39
decisions/2026-06-23-amnezia-web-panel-lxc143.md
Normal file
39
decisions/2026-06-23-amnezia-web-panel-lxc143.md
Normal file
@@ -0,0 +1,39 @@
|
||||
---
|
||||
date: 2026-06-23
|
||||
type: decision
|
||||
tags: [dttb, vpn, amnezia, awg, netbird, control-plane]
|
||||
---
|
||||
|
||||
# Amnezia Web Panel — control-plane VPN-нод на home lab (LXC 143)
|
||||
|
||||
## Контекст
|
||||
Олег арендует HOSTKEY Finland (`151.241.234.241`, Ubuntu 22.04, 2 vCPU/3.9 GB) как **основной VPN-хаб для всех проектов**, старый финский VPS — горячий резерв. Управлять нодами решено через [Amnezia-Web-Panel](https://github.com/PRVTPRO/Amnezia-Web-Panel) (FastAPI/Python, paramiko-SSH; рулит AmneziaWG/WG/Xray-Reality/MTProxy на удалённых Ubuntu).
|
||||
|
||||
## Решение: панель — ДОМА, не на VPS
|
||||
Панель = control-plane с SSH-ключами **ко всем** нодам сразу. Держим её на home lab (LXC 143), VPS оставляем чистым data-plane.
|
||||
|
||||
**Почему не на VPS:**
|
||||
1. **Безопасность.** Финский VPS уже ломали через **RCE в amnezia-panel** (XorDDoS, чистили 2026-04-24). Панель на публичной коробке = ключи ко всему контуру под ударом.
|
||||
2. Никакого публичного `:5000` + дефолт `admin/admin` + открытый Swagger `/docs`.
|
||||
3. Переживает пересборку VPS — `data.json` (вся клиентская база) живёт дома.
|
||||
4. Один пульт на все ноды (Finland + Paris/Singapore + будущие).
|
||||
|
||||
## Что развёрнуто (LXC 143, 10.0.0.143)
|
||||
- Debian 12, unprivileged + nesting/keyctl, rootfs на `work` (local-lvm забит на 94%), ns 1.1.1.1.
|
||||
- Docker 29.6 + compose, контейнер `prvtpro/amnezia-panel:1.4.4`, `-p 5000:5000`, restart=unless-stopped, onboot=1.
|
||||
- NetBird `100.70.9.163` / `amnezia-panel.netbird.cloud` (группа Claude-Diag, ключ `1558712D-…`, `--disable-dns`).
|
||||
- Доступ: LAN `10.0.0.143:5000` + NetBird `100.70.9.163:5000`. **Без NPM, без проброса портов — не публично.**
|
||||
- Логин `admin` / `AmnPanel!2026-fi` (дефолт сменён; проверено: old→401, new→200).
|
||||
|
||||
## Грабли
|
||||
- **Персистентность (важно).** Upstream `docker-compose.yml` монтирует `amnezia_data:/app/data`, но приложение пишет в **`/app/data.json`** и **`/app/tunnels_state.json`** (в WORKDIR `/app`). Т.е. дефолтный volume — пустышка, при пересоздании контейнера терялась бы вся база. Починено **bind-mount'ом конкретных файлов** в `/opt/amnezia-panel/`.
|
||||
- Базовый Debian-шаблон без `curl` — ставить перед get.docker.com.
|
||||
- Хеш пароля: `pbkdf2_hmac('sha256', pwd, salt_hex16, 100000)` → формат `salt$hex`. Смена пароля скриптом — воспроизвести этот алгоритм (`/opt/amnezia-panel/setpw.py`).
|
||||
|
||||
## Дальше (TODO)
|
||||
- [ ] Завести финский VPS в панель (Servers → SSH-креды) и поднять AmneziaWG.
|
||||
- [ ] VPS: SSH key-only, fw только VPN-порты, fail2ban (не повторить 2026-04-24).
|
||||
- [ ] Резервный финский VPS: **переустановить ОС начисто** перед использованием, подцепить к панели.
|
||||
- [ ] Решить failover (AWG сам не переключается): второй endpoint в конфигах клиентов либо переключение через панель/DNS.
|
||||
- [ ] Проверить лимит трафика HOSTKEY (3 TB/мес) — под «все проекты» может быть тесно.
|
||||
- [ ] Бэкап `/opt/amnezia-panel/data.json` (вся клиентская база).
|
||||
@@ -21,6 +21,30 @@ tags: [dttb]
|
||||
| Пароль | `1qaz!QAZ` |
|
||||
| Realm | PAM |
|
||||
|
||||
## Amnezia Web Panel (LXC 143)
|
||||
|
||||
| Параметр | Значение |
|
||||
|----------|----------|
|
||||
| Веб (LAN) | http://10.0.0.143:5000 |
|
||||
| Веб (NetBird) | http://100.70.9.163:5000 (`amnezia-panel.netbird.cloud`) |
|
||||
| Логин | `admin` |
|
||||
| Пароль | `AmnPanel!2026-fi` (дефолт admin/admin сменён; pbkdf2_hmac-sha256) |
|
||||
| Root LXC 143 | `root` / `1qaz!QAZ` (консоль/SSH через pve) |
|
||||
| Данные | bind-mount `/opt/amnezia-panel/{data.json,tunnels_state.json}` |
|
||||
| Назначение | Control-plane VPN-нод (AWG/WG/Xray/MTProxy), управляет серверами по SSH. Приватно, без NPM/публичного доступа. См. [[../../decisions/2026-06-23-amnezia-web-panel-lxc143]] |
|
||||
|
||||
## VPN-ноды (управляются панелью)
|
||||
|
||||
### HOSTKEY Finland — основной хаб (заказан 2026-06-23)
|
||||
| Параметр | Значение |
|
||||
|----------|----------|
|
||||
| IP | `151.241.234.241` |
|
||||
| Логин | `root` |
|
||||
| Пароль | `v_6hH9JuH_` ⚠️ сменить на key-only при настройке |
|
||||
| ОС | Ubuntu 22.04.5 LTS · 2 vCPU / 3.9 GB / 60 GB NVMe · 3 TB трафик @1Gbps |
|
||||
| Hostname | `fi-vmv2-nano` |
|
||||
| Роль | Основной AmneziaWG-выход (WG kernel-модуль грузится). Резерв — старый финский VPS (переустановить ОС перед использованием: был XorDDoS/RCE, см. [[../../claude-memory/finland-vps]] / memory) |
|
||||
|
||||
## MikroTik Router (НИИКН — 192.168.1.1)
|
||||
|
||||
| Параметр | Значение |
|
||||
@@ -81,6 +105,18 @@ cd /var/lib/rustdesk-api && /usr/bin/rustdesk-api reset-admin-pwd <new-pw>
|
||||
|
||||
Подробности sync-схемы: [[../../decisions/2026-04-17-nextcloud-sync-schema|decision 2026-04-17]].
|
||||
|
||||
## ZimaOS NAS (VM 130 — 10.0.0.221)
|
||||
|
||||
| Параметр | Значение |
|
||||
|----------|----------|
|
||||
| Веб | http://10.0.0.221 (Caddy/ZimaOS-Gateway) |
|
||||
| Логин | `dttb` |
|
||||
| Пароль | `1qaz!QAZ` (восстановлен 2026-06-19 из md5-хеша в `user.db`) |
|
||||
| SSH | ❌ выключен; Linux root **locked** (без пароля) |
|
||||
| Shell | ttyd `http://10.0.0.221:7681` (просит login, нужен Linux-юзер) или offline-mount диска на Proxmox |
|
||||
|
||||
**Сброс веб-пароля offline** (если снова потеряется): `qm stop 130` → `losetup -fP /dev/pve/vm-130-disk-0` → смонтировать раздел p8 `casaos-data` → в `.casaos/db/user.db` (sqlite, табл. `o_users`) `UPDATE o_users SET password='<md5 нового>' WHERE username='dttb'` (хеш = **md5 без соли**) → umount + `losetup -d` + `lvchange -an pve/vm-130-disk-0` → `qm start 130`. ZimaOS immutable A/B: system = squashfs (RO), изменения в overlay (p7), данные/конфиги в casaos-data (p8).
|
||||
|
||||
## Spaceweb (DNS-хостинг: niikn.com, dttb.ru, itilegent.ru)
|
||||
|
||||
| Параметр | Значение |
|
||||
|
||||
@@ -9,7 +9,7 @@ tags: [dttb, proxmox]
|
||||
> **Основная нода:** pve (10.0.0.250) — описана ниже
|
||||
> **Вторая нода (standalone):** pve (10.0.0.147) — отдельный хост i3-2100/15GB/SSD+1.8TB HDD, см. [[proxmox-pve-147]] (VM 100 ZimaOS, LXC 101 второй NPM)
|
||||
>
|
||||
> Последнее обновление: 2026-06-22 (добавлен LXC 142 open-webui — Open WebUI на chat.dttb.ru поверх OmniRoute)
|
||||
> Последнее обновление: 2026-06-23 (добавлен LXC 143 amnezia-panel — Amnezia Web Panel, control-plane VPN-нод)
|
||||
|
||||
---
|
||||
|
||||
@@ -18,8 +18,8 @@ tags: [dttb, proxmox]
|
||||
| Тип | Всего | Запущено | Остановлено |
|
||||
|-----|-------|----------|-------------|
|
||||
| QEMU VM | 15 | 5 | 10 |
|
||||
| LXC | 24 | 14 | 10 |
|
||||
| **Итого** | **39** | **19** | **20** |
|
||||
| LXC | 25 | 15 | 10 |
|
||||
| **Итого** | **40** | **20** | **20** |
|
||||
|
||||
---
|
||||
|
||||
@@ -246,6 +246,21 @@ tags: [dttb, proxmox]
|
||||
|
||||
---
|
||||
|
||||
### LXC 143 — amnezia-panel (Amnezia Web Panel)
|
||||
| Параметр | Значение |
|
||||
|----------|----------|
|
||||
| Статус | 🟢 running |
|
||||
| IP | 10.0.0.143 (LAN, статика) / **100.70.9.163** (NetBird, `amnezia-panel.netbird.cloud`, группа Claude-Diag, `--disable-dns`) |
|
||||
| ОС/рантайм | Debian 12, unprivileged + nesting/keyctl, Docker 29.6 + compose; контейнер `prvtpro/amnezia-panel:1.4.4` (`-p 5000:5000`, restart=unless-stopped, onboot=1) |
|
||||
| Ресурсы | 2 vCPU / 2 GB / 12 GB (rootfs на `work`) |
|
||||
| Веб | http://10.0.0.143:5000 (LAN) · http://100.70.9.163:5000 (NetBird) — **приватно, БЕЗ NPM/публичного доступа** (панель = ключи ко всем VPN-нодам; на публичном VPS уже ловили RCE) |
|
||||
| Авторизация | `admin` / `AmnPanel!2026-fi` (дефолт admin/admin сменён; pbkdf2_hmac-sha256, см. credentials). Смена пароля — раздел Users |
|
||||
| Данные | ⚠️ upstream-compose монтирует `amnezia_data:/app/data` — **пустышка** (app пишет в `/app/data.json` и `/app/tunnels_state.json`). Починено bind-mount'ом этих двух файлов в `/opt/amnezia-panel/` |
|
||||
| Tags | vpn, control-plane |
|
||||
| Назначение | **Control-plane для VPN-нод** (AmneziaWG/WG/Xray-Reality/MTProxy) — управляет серверами по SSH (paramiko). Первая нода — HOSTKEY Finland `151.241.234.241` (основной хаб). См. [[../../decisions/2026-06-23-amnezia-web-panel-lxc143]] |
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Остановленные LXC
|
||||
|
||||
| VMID | Имя | Назначение |
|
||||
|
||||
Reference in New Issue
Block a user