Files
knowledge-base/decisions/2026-06-23-amnezia-web-panel-lxc143.md

40 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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` (вся клиентская база).