4.9 KiB
Forgetting
Панель управления и API для VPN на базе AmneziaWG
Warning
Данный проект предназначен только для использования в законных целях.
Архитектура
Три компонента, устанавливаются в /opt/awg-control/:
| Компонент | Роль |
|---|---|
| awg-ctrl | Привилегированный REST-бэкенд. Управляет пирами через awg/awg-quick, ведёт SQLite-базу, генерирует vpn:// ключи. Слушает только loopback. |
| awg-ui | Express + React. Веб-панель, аутентификация (JWT), интеграция с API MA7, прокси к awg-ctrl. Единственный сервис, доступный по сети. |
| cli | Менеджер процессов: start/stop/restart/status, смена логина/пароля панели, интерактивное TUI-меню. |
Внутренняя связь awg-ui → awg-ctrl подписывается асимметрично (Ed25519): приватный ключ только у awg-ui, awg-ctrl проверяет подпись публичным.
Требования
- ОС: Ubuntu 24.04+ (Тесты проходили на Ubuntu 24.04.4 LTS)
- Права: root.
- Ядро: kvm (не OpenVZ/LXC/Docker/WSL — нужен загружаемый kernel-модуль AmneziaWG).
- Заголовки ядра под текущее ядро (для сборки DKMS-модуля).
- Node.js 20.x (ставится установщиком автоматически).
Совместимость установщик проверяет сам перед любыми изменениями.
Установка
На сервере, от root:
bash <(curl -Ls https://raw.githubusercontent.com/maeneko/forgetting/main/install.sh)
Управление
awg-ctrl
Через systemd (автозапуск на загрузке):
systemctl start|stop|restart awg-control
Интеграция с MA7
Этот сервер персональный — принадлежит одному абоненту MA7 (сервиса
VPN-подписки). Панель ничем не управляет в MA7 и не отдаёт наружу свой API:
вкладка «Профиль» только читает баланс своего владельца. Секрет MA7 живёт
только в awg-ui (cli.env) и в браузер не попадает — фронт ходит на свой
бэкенд, тот читает MA7.
Нужные переменные (задаются при установке или руками в cli.env):
| Переменная | Назначение |
|---|---|
MA7_API_BASE_URL |
адрес API MA7, например https://amnesia.ma7neko.ru |
MA7_JWT_SECRET |
секрет, которым панель сама подписывает X-Bot-Token (эндпоинта, выдающего токен, в MA7 нет) |
MA7_LOGIN |
логин владельца этого сервера в MA7 (ma7_xxxxxx) |
Вкладка «Профиль» просто показывает текущий баланс MA7_LOGIN. При установке
MA7_LOGIN заодно предлагается как логин панели (UI_USER) — сервер
персональный, и заказчик входит тем же именем, что знает по MA7; при желании
логин панели можно задать свой. Это разные переменные: UI_USER решает, кого
пускать в панель, MA7_LOGIN — чей баланс показывать.
MA7_LOGIN задаётся один раз при установке и не редактируется из панели: у панели
один общий пароль (UI_USER/UI_PASS) без отдельного клиентского входа, а
MA7_JWT_SECRET умеет искать в MA7 любого абонента — редактируемый в браузере
логин превратил бы личный баланс в инструмент подглядывания за чужими.
Warning
MA7_JWT_SECRET— мастер-ключ ко всему MA7: с ним можно читать данные любых пользователей MA7, не только этого сервера. Токены MA7 без срока действия, отзыва нет — «отобрать доступ» значит одновременно сменитьMA7_JWT_SECRETво всех сервисах MA7 и здесь, вcli.env.
Лицензия
MIT © 2026 Ivan Vasilev