Telegram бот для автоматической выдачи конфигурационных файлов AmneziaWG пользователям.
Бот позволяет авторизованным пользователям получать конфигурационные файлы 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
Проект уже находится в /opt/AmneziaBot
cd /opt/AmneziaBot
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txtИспользуйте скрипт setup.py для автоматического получения всех параметров из AmneziaWG!
cd /opt/AmneziaBot
source venv/bin/activate
python3 setup.py1. Проверяет систему:
- Наличие 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 параметра, которые невозможно получить автоматически:
-
BOT_TOKEN - токен вашего Telegram бота:
1. Найдите @BotFather в Telegram 2. Отправьте команду /newbot 3. Следуйте инструкциям 4. Скопируйте полученный токен -
ADMIN_ID - ваш Telegram ID:
1. Найдите @userinfobot в Telegram 2. Отправьте команду /start 3. Скопируйте ваш ID (число) -
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! ⚡
Если автоматическая настройка не сработала:
cp .env.example .env
nano .envЗаполните все поля вручную, используя команду для получения параметров:
docker exec amnezia-awg cat /opt/amnezia/awg/wg0.confУбедитесь, что AmneziaWG запущен:
docker ps | grep amnezia-awgcd /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 сервера (требует подтверждения)
- Запустите бота командой
/start - Выберите тип устройства (Телефон, Ноутбук или Роутер)
- Получите конфигурационный файл
- Импортируйте файл в приложение 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 сек) проверяются пользователи
- Если у пользователя нет ни одной конфигурации → удаляется из базы
- Удаляется также история запросов пользователя
- База всегда остается чистой ✅
Проблема: Если создать клиентов через приложение 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 показывает только реальных клиентов
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
- Проверьте, что бот запущен:
systemctl status amneziabot - Проверьте логи:
tail -f logs/bot.log - Проверьте правильность токена в
.env
Эта проблема уже исправлена в текущей версии. Если вы столкнулись с ней:
- Убедитесь, что используете последнюю версию кода
- Перезапустите бота:
sudo systemctl restart amneziabot
Если в логах видите эту ошибку:
- Проверьте, что в
/etc/systemd/system/amneziabot.serviceуказан полный PATH:Environment="PATH=/opt/AmneziaBot/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - Перезагрузите systemd:
sudo systemctl daemon-reload - Перезапустите бота:
sudo systemctl restart amneziabot
- Проверьте, что AmneziaWG контейнер запущен:
docker ps | grep amnezia-awg - Проверьте права доступа к файлам конфигурации
- Проверьте логи контейнера:
docker logs amnezia-awg - Проверьте, что все параметры AmneziaWG заполнены в
.env
- Убедитесь, что Telegram ID пользователя добавлен в переменную
USERSв.env - Перезапустите бота после изменения
.env:sudo systemctl restart amneziabot
Проверьте, что в .env файле заполнены все обязательные поля:
BOT_TOKEN- токен от @BotFatherADMIN_ID- ваш Telegram IDSERVER_ENDPOINT- IP:порт вашего сервера (например:your_server_ip:443)SERVER_PUBLIC_KEY- публичный ключ сервера AmneziaWGPRESHARED_KEY- preshared key из конфигурации сервера
Эти параметры можно получить из конфигурации сервера:
docker exec amnezia-awg cat /opt/amnezia/awg/wg0.conf- Создайте новый handler в
src/bot/handlers/ - Зарегистрируйте handler в
main.py - Обновите документацию
# Активируйте виртуальное окружение
source venv/bin/activate
# Запустите бота в режиме разработки
python main.pyВсе изменения документируются в директории 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