🇷🇺 Русский · 🇬🇧 English
Telegram-бот на Rust для управления клиентами AmneziaWG прямо с телефона: добавить/удалить клиента, посмотреть список и трафик — без SSH.
awgram управляет нативным AmneziaWG — kernel-модулем для Linux (ставится инсталлером) — целиком из Telegram: после установки не нужны ни консоль, ни терминал. Нативный AWG заметно быстрее и экономнее контейнерных решений — особенно это ощутимо на недорогих VPS.
- ➕ Добавление: срок (пресеты 1д–365д или свой), PSK, защита от
дубликатов с пересозданием; в ответ —
.conf, QR и ссылка импорта. - 👥 Список: трёхцветный статус (🟢 онлайн / 🟡 без handshake / 🔴 оффлайн) и время последнего handshake прямо в кнопке, трафик ↓/↑, метка ⏳ срока; фильтр по статусу и сортировка «онлайн вперёд»; карточка клиента, удаление с подтверждением; навигация по меню и страницам и кнопка 🔄 «Обновить» редактируют сообщение на месте — без дублей.
- ⚙️ Изменение параметров клиента: Keepalive, DNS, AllowedIPs, Endpoint.
- 🔄 Перевыпуск конфигов: одного или всех сразу (опционально — со сбросом маршрутов).
- 📊 Детальная статистика трафика: сегодня / 7 дней / 30 дней, тренды, топ клиентов — собственное SQLite-хранилище, данные переживают ребуты.
- 📜 История подключений и операций по каждому клиенту.
- 🟢 Честный онлайн-статус: онлайн только при handshake младше 5 минут.
- 📦 Массовая генерация — создание до 10 клиентов за раз по префиксу
(
user-01 … user-10) одним действием, с выдачей конфигов альбомом. - 🎛️ Фильтр выдачи — настройка, какие артефакты (
.conf/ QR / ссылка) автоматически выдаются после создания. - 🧩 Поартефактная выдача — из карточки клиента можно запросить конфиг, QR, ссылку или всё сразу по отдельности.
- 🗂️ Группы клиентов: создание, переименование, удаление; перенос клиентов между группами и массовый перевыпуск конфигов группы.
- 🤝 Делегирование: групповые админы видят и управляют только своей группой; назначение — одноразовой инвайт-ссылкой (TTL 24 ч) или по user ID.
- 📏 Квоты: лимит числа клиентов на группу — действует на групповых админов (владелец без ограничений).
- 🩺 Проверка: карточка со статусом сервиса, интерфейса, порта, модуля,
клиентов и фаервола (✅/
⚠️ /❌). - 🔬 Диагностика окружения.
- 🔁 Перезапуск сервиса и 🛠 починка модуля ядра (DKMS rebuild).
- 💾 Бэкап/восстановление состояния AmneziaWG, скачивание архива в чат.
- ⚙️ Настройки: язык RU/EN (у каждого админа свой), PSK по умолчанию, ID-префикс имён клиентов; всё переживает рестарт (персистентный state).
- 🔒 Безопасность: доступ только для владельцев из
admin_idsи назначенных ими групповых админов, вызов manage-скрипта без shell, секреты не попадают в логи, hardened-режим (отдельный пользователь + sudoers). - 🧦 Прокси до Telegram: приоритетный список
socks5/socks5h/http/httpsвtelegram_proxiesс автофейловером — для серверов, где Bot API напрямую недоступен; подробности и альтернатива через маршрутизацию — в docs/proxy.md.
-
Получите токен бота у @BotFather (
/newbot) и свой числовой ID у @userinfobot. -
На VPS с установленным AmneziaWG-инсталлером выполните:
curl -fsSL https://github.com/ekuraev/awgram/releases/latest/download/install.sh | bash -
Ответьте на вопросы установщика (язык, режим root/hardened, токен, ID админов) — готово: откройте бота в Telegram и нажмите
/start.
Полностью автоматическая установка — флагами:
curl -fsSL https://github.com/ekuraev/awgram/releases/latest/download/install.sh \
| bash -s -- install --lang ru --mode root --token 'ТОКЕН' --admins 111111111 --yesТокен можно не передавать флагом (тогда он не попадёт ни в argv, ни в
историю шелла) — вместо этого export AWGRAM_TOKEN='ТОКЕН' перед той же
командой без --token.
Управление после установки: awgram-setup update | config | status | uninstall.
Предрелизные сборки — доступны начиная с v0.7.0: awgram-setup update --channel rc (выбор запоминается, канал rc видит и стабильные релизы;
вернуться — awgram-setup update --channel stable). Если на сервере
awgram-setup старше v0.7.0, флага --channel у него ещё нет — либо
выполните обычный awgram-setup update (он обновит и сам скрипт), либо
поставьте rc сразу однострочником из нужного релиза:
curl -fsSL https://github.com/ekuraev/awgram/releases/download/vX.Y.Z-rc.N/install.sh \
| bash -s -- update --channel rcawgram — один статический бинарник (Rust, teloxide, long polling, без
webhook), который живёт на том же VPS, что и VPN. Конфигурацию AmneziaWG он
не трогает — вызывает штатный скрипт manage_amneziawg.sh (без shell, с
флагом --json) и рендерит результат в inline-меню Telegram. Доступ
ограничен владельцами из admin_ids и назначенными ими групповыми
админами; токен и содержимое .conf/QR никогда не попадают в логи.
Бот — надстройка над manage_amneziawg.sh из
bivlked/amneziawg-installer
и напрямую зависит от его интерфейса.
- Поддерживаемая версия инсталлера:
v5.27.1
(сверен
--json-контракт). Минимальная — v5.21.0; более старые v5.20.x не поддерживаются — бот использует расширенный--json-интерфейс команд управления, появившийся в v5.21.0. v5.21.1–v5.27.1 JSON-контракт не ломали: v5.21.1/v5.21.2 — багфиксы валидации, v5.22.0 добавил вregen/checkпредупреждение о рассинхронеawgsetup_cfg.init(уходит в stderr, stdout-JSON не затронут), v5.23.0 — изменения только в установщике (модуль ядра на старых ядрах), v5.24.0 добавил аддитивное полеmodule.versionвcheck --json, v5.25.0 — только новые предупреждения, и все они уходят в stderr, v5.26.0 — только каскадный скрипт маршрутизации и диагностический отчёт, v5.27.0 — только установщик (согласие на удаление пакетов), v5.27.1 поменялmanage_amneziawg.sh:modify/regenнормализуют спискиAllowedIPs/DNSк виду «a, b, c»,regenбольше не схлопывает их; конверты не тронуты —valueв ответеmodifyостаётся присланным значением, новые сообщения уходят в stderr, а бот и так шлёт списки в каноническом виде. - Используемые подкоманды:
add,remove,list,stats,regen,modify,backup,restore,check,restart,repair-module— все с--json.
Нужен стабильный Rust не ниже 1.95 и cargo; TLS — на rustls, системный
libssl не нужен.
cargo build --release # target/release/awgram
./scripts/build-musl.sh [arm64|all] # статические Linux-бинарники в dist/ (нужен Docker)Релизы на тег v* собирают бинарники amd64+arm64 c sha256-суммами
автоматически.
