Skip to content

Repository files navigation

awgram

🇷🇺 Русский · 🇬🇧 English

CI Release License: MIT

Telegram-бот на Rust для управления клиентами AmneziaWG прямо с телефона: добавить/удалить клиента, посмотреть список и трафик — без SSH.

awgram в Telegram

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.

Быстрый старт

  1. Получите токен бота у @BotFather (/newbot) и свой числовой ID у @userinfobot.

  2. На VPS с установленным AmneziaWG-инсталлером выполните:

    curl -fsSL https://github.com/ekuraev/awgram/releases/latest/download/install.sh | bash
  3. Ответьте на вопросы установщика (язык, режим 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 rc

Как это работает

awgram — один статический бинарник (Rust, teloxide, long polling, без webhook), который живёт на том же VPS, что и VPN. Конфигурацию AmneziaWG он не трогает — вызывает штатный скрипт manage_amneziawg.sh (без shell, с флагом --json) и рендерит результат в inline-меню Telegram. Доступ ограничен владельцами из admin_ids и назначенными ими групповыми админами; токен и содержимое .conf/QR никогда не попадают в логи.

Совместимость с инсталлером AmneziaWG

Бот — надстройка над 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-суммами автоматически.

Лицензия

MIT

About

Telegram bot for managing AmneziaWG VPN clients

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

16 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages