Skip to content

KleoPadre/PrivateAWGTgBot

Repository files navigation

AmneziaWG Config Bot

Telegram бот для автоматической выдачи конфигурационных файлов AmneziaWG пользователям.

SCR-20251111-ires

Описание

Бот позволяет авторизованным пользователям получать конфигурационные файлы AmneziaWG для различных типов устройств:

  • 📱 Телефон
  • 💻 Ноутбук
  • 🌐 Роутер

Для каждого типа устройства создается отдельная конфигурация. Если конфигурация уже была создана ранее, пользователь получит существующую.

Особенности

  • ✅ Асинхронная архитектура (asyncio)
  • ✅ Модульная структура проекта
  • ✅ SQLite база данных для хранения истории
  • ✅ Автоматическая генерация ключей WireGuard
  • ✅ Интеграция с Docker контейнером AmneziaWG
  • ✅ Админ-панель со статистикой
  • ✅ Полное логирование всех операций
  • ✅ Проверка авторизации пользователей

Структура проекта

/opt/AmneziaBot/
├── main.py                      # Точка входа
├── requirements.txt             # Зависимости
├── .env                         # Переменные окружения (создать вручную)
├── .env.example                 # Шаблон .env
├── README.md                    # Документация
├── changelogs/                  # Changelog файлы
├── logs/                        # Логи приложения
├── data/                        # Данные
│   ├── database.db             # SQLite база
│   └── configs/                # Временные конфиги
├── src/                         # Исходный код
│   ├── config/                  # Конфигурация
│   │   └── settings.py         # Настройки из .env
│   ├── database/                # Работа с БД
│   │   ├── models.py           # Схема БД
│   │   └── repository.py       # CRUD операции
│   ├── services/                # Бизнес-логика
│   │   ├── awg_manager.py      # Управление AmneziaWG
│   │   └── config_generator.py # Генерация конфигов
│   ├── bot/                     # Telegram бот
│   │   ├── handlers/           # Обработчики команд
│   │   │   ├── start.py        # /start команда
│   │   │   ├── config.py       # Получение конфигов
│   │   │   └── admin.py        # Админ команды
│   │   ├── keyboards.py        # Клавиатуры бота
│   │   └── filters.py          # Фильтры доступа
│   ├── tools/                   # Утилиты и инструменты
│   │   ├── sync_peers.py       # Автосинхронизация peer'ов
│   │   └── cleanup_configs.py  # Управление конфигурациями
│   └── utils/                   # Общие утилиты
│       ├── logger.py           # Настройка логирования
│       └── decorators.py       # Декораторы
└── venv/                        # Виртуальное окружение

Требования

  • Python 3.12+
  • Docker с контейнером AmneziaWG
  • Telegram Bot Token

Установка

1. Клонирование и подготовка

Проект уже находится в /opt/AmneziaBot

2. Создание виртуального окружения

cd /opt/AmneziaBot
python3 -m venv venv
source venv/bin/activate

3. Установка зависимостей

pip install -r requirements.txt

4. Автоматическая настройка (рекомендуется)

Используйте скрипт setup.py для автоматического получения всех параметров из AmneziaWG!

cd /opt/AmneziaBot
source venv/bin/activate
python3 setup.py

Что делает скрипт автоматически:

1. Проверяет систему:

  • Наличие Docker
  • Запущен ли контейнер amnezia-awg
  • Доступность конфигурационных файлов

2. Извлекает параметры из /opt/amnezia/awg/wg0.conf:

# Скрипт автоматически читает конфигурацию и получает:
docker exec amnezia-awg cat /opt/amnezia/awg/wg0.conf

# Из конфига извлекаются:
SERVER_PUBLIC_KEY  - генерируется из приватного ключа сервера
PRESHARED_KEY      - из секции [Peer]
PORT               - из ListenPort (обычно 443)
CLIENT_NETWORK     - из Address (например, 10.8.1.0/24)
CLIENT_IP_START    - следующий свободный IP после занятых
Jc, Jmin, Jmax     - параметры обфускации AmneziaWG
S1, S2             - параметры обфускации
H1, H2, H3, H4     - заголовки обфускации

3. Определяет внешний IP сервера:

# Автоматически через:
curl -s ifconfig.me
# Или запрашивает вручную, если не удалось определить

4. Создает .env файл со всеми параметрами

Что нужно от вас:

Скрипт попросит указать только 3 параметра, которые невозможно получить автоматически:

  1. BOT_TOKEN - токен вашего Telegram бота:

    1. Найдите @BotFather в Telegram
    2. Отправьте команду /newbot
    3. Следуйте инструкциям
    4. Скопируйте полученный токен
    
  2. ADMIN_ID - ваш Telegram ID:

    1. Найдите @userinfobot в Telegram
    2. Отправьте команду /start
    3. Скопируйте ваш ID (число)
    
  3. USERS - список пользователей (опционально):

    Можно просто нажать Enter - добавится только ваш ID
    Или ввести ID других пользователей через запятую
    

Пример работы скрипта:

🚀 AmneziaWG Config Bot - Автоматическая настройка

🔍 Проверка Docker...
✅ Docker version 24.0.5

🔍 Проверка контейнера AmneziaWG...
✅ Контейнер найден: amnezia-awg

📋 Чтение конфигурации сервера...
✅ Конфигурация получена:
   - Публичный ключ: +7hhM68rGzs... (автоматически)
   - Порт: 443 (автоматически)
   - Сеть: 10.8.1.0/24 (автоматически)
   - Следующий IP: 10.8.1.17 (автоматически)

🌐 Определение IP...
✅ Внешний IP: YOUR_SERVER_IP (автоматически)

❓ Введите токен бота: [ЗДЕСЬ ВЫ ВВОДИТЕ]
❓ Введите ваш Telegram ID: [ЗДЕСЬ ВЫ ВВОДИТЕ]
❓ ID других пользователей: [ОПЦИОНАЛЬНО]

✅ Файл .env создан со всеми параметрами!

Итого: Скрипт автоматически заполняет ~20 параметров, вы вводите только 2-3! ⚡

4.1. Ручная настройка (альтернатива)

Если автоматическая настройка не сработала:

cp .env.example .env
nano .env

Заполните все поля вручную, используя команду для получения параметров:

docker exec amnezia-awg cat /opt/amnezia/awg/wg0.conf

5. Проверка AmneziaWG

Убедитесь, что AmneziaWG запущен:

docker ps | grep amnezia-awg

Запуск

Запуск в режиме разработки

cd /opt/AmneziaBot
source venv/bin/activate
python main.py

Запуск как системный сервис

Создайте файл /etc/systemd/system/amneziabot.service:

[Unit]
Description=AmneziaWG Telegram Bot
After=network.target docker.service

[Service]
Type=simple
User=root
WorkingDirectory=/opt/AmneziaBot
Environment="PATH=/opt/AmneziaBot/venv/bin"
ExecStart=/opt/AmneziaBot/venv/bin/python /opt/AmneziaBot/main.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Запустите сервис:

sudo systemctl daemon-reload
sudo systemctl enable amneziabot
sudo systemctl start amneziabot
sudo systemctl status amneziabot

Просмотр логов:

sudo journalctl -u amneziabot -f

Использование

Команды бота

Для всех пользователей:

  • /start - Запуск бота и отображение клавиатуры с кнопками

Для администратора:

  • /start - Запуск бота с админской клавиатурой
  • /stats или кнопка "📊 Статистика" - общая статистика использования
  • /users или кнопка "👥 Пользователи" - список всех пользователей
  • /reboot или кнопка "🔄 Перезагрузить сервер" - перезагрузка Ubuntu сервера (требует подтверждения)

Использование

  1. Запустите бота командой /start
  2. Выберите тип устройства (Телефон, Ноутбук или Роутер)
  3. Получите конфигурационный файл
  4. Импортируйте файл в приложение AmneziaWG

⚠️ Внимание:

  • Кнопка "🔄 Перезагрузить сервер" выполняет полную перезагрузку Ubuntu
  • Перед перезагрузкой обязательно запрашивается подтверждение через inline кнопки
  • Бот автоматически запустится после перезагрузки (автозапуск включен)

База данных

Бот использует SQLite для хранения:

  • users - информация о пользователях
  • configs - созданные конфигурации
  • requests - история запросов

База данных автоматически создается при первом запуске.

Управление конфигурациями

Как работает система

┌──────────────────┐
│  База данных бота│ ← Конфигурации пользователей
└────────┬─────────┘
         │
         ↓ Каждые 30 сек
┌──────────────────┐
│   Скрипт sync    │ ← 🧠 Умная синхронизация
│   peers.py       │    
└────────┬─────────┘
         │
         ├──→ Проверяет WireGuard сервер
         └──→ Проверяет clientsTable (приложение)

🧠 Умная логика синхронизации:

Сценарий 1: Удаление через приложение AmneziaVPN

Вы удаляете конфиг в приложении
  ↓
Peer удален с сервера + удален из clientsTable
  ↓
Через 30 сек: sync_peers видит "нет НИ там НИ там"
  ↓
Вывод: НАМЕРЕННОЕ УДАЛЕНИЕ → 🗑️ удаляет из базы бота
  ↓
Результат: Конфиг удален везде, НЕ восстанавливается ✅

Сценарий 2: Случайный сбой (перезапись конфига)

Приложение перезаписало конфигурацию сервера
  ↓
Peer удален с сервера, НО остался в clientsTable
  ↓
Через 30 сек: sync_peers видит "нет на сервере, но есть в таблице"
  ↓
Вывод: СЛУЧАЙНЫЙ СБОЙ → 🔄 восстанавливает на сервере
  ↓
Результат: Peer восстановлен, всё работает ✅

Важно:

  • Удаляйте через приложение AmneziaVPN → конфиг удалится автоматически
  • Пользователи без конфигов → автоматически удаляются из базы
  • Или используйте cleanup_configs.py для ручного удаления

🧹 Автоматическая очистка базы:

  • При каждой синхронизации (каждые 30 сек) проверяются пользователи
  • Если у пользователя нет ни одной конфигурации → удаляется из базы
  • Удаляется также история запросов пользователя
  • База всегда остается чистой ✅

Инструмент sync_database.py - Двусторонняя синхронизация

Проблема: Если создать клиентов через приложение AmneziaVPN, они не попадут в базу бота.

Решение: Используйте sync_database.py для синхронизации:

cd /opt/AmneziaBot
source venv/bin/activate

# Показать статус синхронизации
python3 src/tools/sync_database.py --status

# Очистить "мертвые" записи из clientsTable
python3 src/tools/sync_database.py --cleanup

# Импортировать существующие peer'ы в базу бота
python3 src/tools/sync_database.py --import

# Полная синхронизация (cleanup + import)
python3 src/tools/sync_database.py --full-sync

Что делает:

  • 🧹 Удаляет "призраков" из clientsTable (записи без peer'ов на сервере)
  • 📥 Импортирует существующие peer'ы с сервера в базу бота
  • ✅ Приложение AmneziaVPN показывает только реальных клиентов

Инструмент cleanup_configs.py - Удаление конфигураций

cd /opt/AmneziaBot
source venv/bin/activate

# Показать все конфигурации
python3 src/tools/cleanup_configs.py --list

# Удалить конфигурацию по ID
python3 src/tools/cleanup_configs.py --delete 5

# Удалить все конфигурации пользователя
python3 src/tools/cleanup_configs.py --delete-user 3

# Удалить ВСЕ конфигурации (потребует подтверждения 'YES')
python3 src/tools/cleanup_configs.py --delete-all

После удаления через cleanup_configs.py:

  • ✅ Конфиг удален с сервера WireGuard
  • ✅ Конфиг удален из clientsTable
  • ✅ Конфиг удален из базы бота
  • ✅ Больше не восстановится автоматически

Логирование

Логи сохраняются в:

  • Файл: logs/bot.log
  • Консоль: stdout

Уровень логирования настраивается в .env через параметр LOG_LEVEL.

Безопасность

  • ⚠️ Никогда не коммитьте файл .env в git
  • ⚠️ Храните токен бота в секрете
  • ⚠️ Регулярно проверяйте список разрешенных пользователей
  • ⚠️ Конфигурационные файлы содержат приватные ключи - храните их в безопасности

Технологии

  • Python 3.12 - основной язык
  • python-telegram-bot 22.5 - библиотека для Telegram Bot API
  • aiosqlite - асинхронная работа с SQLite
  • aiofiles - асинхронная работа с файлами
  • python-dotenv - управление переменными окружения
  • Docker - контейнеризация AmneziaWG

Troubleshooting

Бот не отвечает

  1. Проверьте, что бот запущен: systemctl status amneziabot
  2. Проверьте логи: tail -f logs/bot.log
  3. Проверьте правильность токена в .env

Ошибка "RuntimeError: threads can only be started once"

Эта проблема уже исправлена в текущей версии. Если вы столкнулись с ней:

  1. Убедитесь, что используете последнюю версию кода
  2. Перезапустите бота: sudo systemctl restart amneziabot

Ошибка "docker: not found"

Если в логах видите эту ошибку:

  1. Проверьте, что в /etc/systemd/system/amneziabot.service указан полный PATH:
    Environment="PATH=/opt/AmneziaBot/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    
  2. Перезагрузите systemd: sudo systemctl daemon-reload
  3. Перезапустите бота: sudo systemctl restart amneziabot

Ошибка при генерации конфига

  1. Проверьте, что AmneziaWG контейнер запущен: docker ps | grep amnezia-awg
  2. Проверьте права доступа к файлам конфигурации
  3. Проверьте логи контейнера: docker logs amnezia-awg
  4. Проверьте, что все параметры AmneziaWG заполнены в .env

Пользователь не может получить конфиг

  1. Убедитесь, что Telegram ID пользователя добавлен в переменную USERS в .env
  2. Перезапустите бота после изменения .env: sudo systemctl restart amneziabot

Бот не запускается - "Отсутствуют обязательные переменные окружения"

Проверьте, что в .env файле заполнены все обязательные поля:

  • BOT_TOKEN - токен от @BotFather
  • ADMIN_ID - ваш Telegram ID
  • SERVER_ENDPOINT - IP:порт вашего сервера (например: your_server_ip:443)
  • SERVER_PUBLIC_KEY - публичный ключ сервера AmneziaWG
  • PRESHARED_KEY - preshared key из конфигурации сервера

Эти параметры можно получить из конфигурации сервера:

docker exec amnezia-awg cat /opt/amnezia/awg/wg0.conf

Разработка

Добавление новых функций

  1. Создайте новый handler в src/bot/handlers/
  2. Зарегистрируйте handler в main.py
  3. Обновите документацию

Тестирование

# Активируйте виртуальное окружение
source venv/bin/activate

# Запустите бота в режиме разработки
python main.py

Changelog

Все изменения документируются в директории changelogs/.

🎉 Итоги проекта

Полный жизненный цикл (полностью автоматический):

1️⃣ Пользователь запрашивает конфиг → создается в базе
2️⃣ Конфигурация работает → peer на сервере
3️⃣ Удаление через приложение → автоматически удаляется из базы
4️⃣ Очистка пустых пользователей → база всегда чистая
5️⃣ Защита от сбоев → автовосстановление peer'ов

Что полностью автоматизировано:

  • Создание конфигураций для 3 типов устройств
  • Удаление при намеренном удалении через приложение
  • Восстановление при случайных сбоях
  • Очистка базы от неиспользуемых записей
  • Синхронизация с AmneziaVPN приложением
  • Мониторинг каждые 30 секунд

Безопасность:

  • 🔒 Все конфиденциальные данные в .env (не коммитятся)
  • 🔒 База данных и логи исключены из Git
  • 🔒 Авторизация пользователей по Telegram ID
  • 🔒 Админ-панель с отдельными правами
  • 🔒 Подтверждение критических операций (перезагрузка сервера)

Статистика проекта:

  • 📁 20+ модулей в модульной архитектуре (bot, services, database, tools, utils)
  • 🛠️ 3 инструмента управления (sync_peers, sync_database, cleanup_configs)
  • 📝 Полная документация (README, QUICKSTART, INSTALL, Changelogs)
  • 100% асинхронный код на Python 3.12
  • 🔄 Автоматическая синхронизация каждые 30 секунд

🤝 Вклад

Проект открыт для предложений и улучшений. Создавайте Issues и Pull Requests в репозитории!

📄 Лицензия

MIT License with Non-Commercial Clause

Разрешено свободное использование, модификация и распространение исключительно в некоммерческих целях.

Коммерческое использование запрещено без явного письменного разрешения автора.

Подробнее см. файл LICENSE.


Создано с ❤️ для удобного управления AmneziaWG

About

Telegram bot for Amnezia

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages