4.9 KiB
4.9 KiB
date, type, tags
| date | type | tags | ||||||
|---|---|---|---|---|---|---|---|---|
| 2026-06-23 | decision |
|
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 (FastAPI/Python, paramiko-SSH; рулит AmneziaWG/WG/Xray-Reality/MTProxy на удалённых Ubuntu).
Решение: панель — ДОМА, не на VPS
Панель = control-plane с SSH-ключами ко всем нодам сразу. Держим её на home lab (LXC 143), VPS оставляем чистым data-plane.
Почему не на VPS:
- Безопасность. Финский VPS уже ломали через RCE в amnezia-panel (XorDDoS, чистили 2026-04-24). Панель на публичной коробке = ключи ко всему контуру под ударом.
- Никакого публичного
:5000+ дефолтadmin/admin+ открытый Swagger/docs. - Переживает пересборку VPS —
data.json(вся клиентская база) живёт дома. - Один пульт на все ноды (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+ NetBird100.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).
Финский VPS заведён в панель (2026-06-23)
Олег сам поднял сервер через официальное приложение AmneziaVPN (он = владелец/первый админ), затем сервер добавлен в панель — она адаптировала существующую установку:
- Протокол AmneziaWG 2.0 → контейнер
amnezia-awg2, UDP 41624, subnet10.8.1.0/24. /api/servers/0/check→awg2 running,clients_count: 1.- Клиент Олега
Admin [macOS Tahoe (26.5.1)]виден в панели (читается из/opt/amnezia/awg/clientsTable). - Вывод подтверждён в коде + вживую:
get_clients()читаетclientsTableс сервера и доп. парсит[Peer](«pick up peers created via native Amnezia app»). Панель = центральное управление поверх app-установки, не конфликтует. - ⚠️ root-пароль VPS хранится в
data.jsonпанели в открытом виде (так устроен SSH-доступ панели). При смене пароля VPS — обновить в карточке сервера (Servers → edit).
Дальше (TODO)
- VPS: SSH key-only, fw только VPN-порты, fail2ban (не повторить 2026-04-24).
- Резервный финский VPS: переустановить ОС начисто перед использованием, подцепить к панели.
- Решить failover (AWG сам не переключается): второй endpoint в конфигах клиентов либо переключение через панель/DNS.
- Проверить лимит трафика HOSTKEY (3 TB/мес) — под «все проекты» может быть тесно.
- Бэкап
/opt/amnezia-panel/data.json(вся клиентская база).