Профессиональный Telegram бот для управления AmneziaWG VPN сервером с полным функционалом администрирования, мониторинга и автоматизации.
- Возможности
- Демонстрация
- Требования
- Архитектура
- Быстрый старт
- Установка
- Настройка AmneziaWG
- Использование
- Производительность
- Безопасность
- Решение проблем
- FAQ
- Roadmap
- Вклад в проект
- Лицензия
- ➕ Создание клиентов с автоматической генерацией ключей и IP-адресов
- 🗑️ Удаление клиентов с полной очисткой конфигураций
- 🔒 Блокировка/разблокировка без потери данных
- ✏️ Редактирование параметров существующих клиентов
- ⏰ Временные ограничения: 1 час, 1 день, 1 неделя, 1 месяц, произвольный срок, постоянный доступ
- 📊 Лимиты трафика: 5GB, 10GB, 30GB, 100GB, без ограничений
- 🔄 Автоматическая блокировка при превышении лимитов
- ⏱️ Фоновый мониторинг с проверкой каждые 5 минут
- 📈 Статистика сервера: нагрузка, количество активных клиентов, общий трафик
- 📊 Индивидуальная статистика: трафик, время подключения, история IP
- 🌍 Геолокация IP: определение примерного местоположения подключений через ip-api.com
- 📝 История подключений: отслеживание IP-адресов
- 📱 QR-коды для мгновенного подключения
- 🔗 Ключи vpn:// для быстрого импорта в AmneziaVPN
- 📄 Экспорт конфигураций в формате AmneziaWG (WireGuard)
- 🌐 Поддержка IPv6 для всех клиентов
- 💾 Полные резервные копии: база данных + конфигурации AWG
- ♻️ Восстановление из любой точки сохранения
- 🗂️ Управление бэкапами через интерфейс бота
- ⏰ Автоматическое создание при критических операциях
| Главное меню | Детали клиента | Редактирование | Статистика | Бэкапы |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
- ОС: Ubuntu 20.04+ / Debian 11+ (рекомендуется Ubuntu 22.04 LTS)
- Архитектура: x86_64 / ARM64
- RAM: минимум 512MB (рекомендуется 1GB)
- Диск: минимум 1GB свободного места
- Python: 3.12 или выше
- AmneziaWG: последняя стабильная версия
- Root-доступ: требуется для управления сетевым интерфейсом
- Telegram Bot Token: получить у @BotFather
- Открытый UDP порт для AmneziaWG (по умолчанию 51820)
- Доступ к Telegram API (api.telegram.org)
- Доступ к ip-api.com для геолокации (опционально)
AWG_Bot2.0/
├── main.py # Точка входа приложения
├── config.py # Конфигурация проекта
├── requirements.txt # Python зависимости
└── handlers/ # Обработчики событий Telegram
├── init.py
├── admin_handlers.py # Обработчики команд администратора
├── middlewares/ # Промежуточное ПО
├── init.py
├── auth.py # Аутентификация администраторов
├── keyboards/ # Telegram клавиатуры
├── init.py
├── main_keyboards.py # Основные inline клавиатуры
├── database/ # Работа с базой данных
├── init.py
├── database.py # ORM, модели, пул соединений
├── services/ # Бизнес-логика
├── init.py
├── awg_manager.py # Управление AmneziaWG
├── ip_service.py # Работа с IP-адресами и геолокацией
├── backup_service.py # Резервное копирование
├── settings_service.py # Управление настройками
└── utils/ # Вспомогательные утилиты
├── init.py
├── qr_generator.py # Генерация QR-кодов
├── formatters.py # Форматирование данных
└── vpn_converter.py # Конвертация в vpn:// формат
- DatabaseConnectionPool - пул из 5 постоянных соединений
- Database - основной класс для работы с БД
- Модели:
Client,BotSettings,ClientIPConnection - Оптимизации: индексы, PRAGMA настройки, кэширование
- Пакетные операции для высокой производительности
- Управление интерфейсом AmneziaWG
- Генерация ключей и конфигураций
- Добавление/удаление пиров
- Получение статистики трафика
- Проверка доступности AWG
- FSM (Finite State Machine) для многошаговых операций
- Обработка callback-запросов
- Валидация пользовательского ввода
- Интерактивные меню
Для опытных пользователей с уже установленным Python 3.12+ и AmneziaWG:
Клонирование репозитория
git clone https://github.com/JB-SelfCompany/AWG_Bot2.0.git
cd AWG_Bot2.0Создание виртуального окружения
python3.12 -m venv venv
source venv/bin/activateУстановка зависимостей
pip install -r requirements.txtНастройка конфигурации
nano config.pyУкажите: BOT_TOKEN, ADMIN_IDS, SERVER_IP, AWG_INTERFACE Запуск бота
python main.pyДля детальной установки с настройкой всех компонентов см. раздел Полная установка.
Обновление системы
sudo apt update && sudo apt upgrade -yУстановка необходимых зависимостей
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncurses-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl gitЗагрузка и установка pyenv
curl https://pyenv.run | bashДобавление в .bashrc (или .zshrc для zsh)
cat >> ~/.bashrc << 'EOF'
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
EOFПрименение изменений
source ~/.bashrcПроверка установки
pyenv --versionУстановка Python 3.12.11
pyenv install 3.12.11Создание виртуального окружения
pyenv virtualenv 3.12.11 awg_bot_envАктивация окружения в текущей директории
pyenv local awg_bot_envУстановите AmneziaWG согласно официальной документации.
Клонирование репозитория
git clone https://github.com/JB-SelfCompany/AWG_Bot2.0.git
cd AWG_Bot2.0Активация окружения (если не активировано)
pyenv local awg_bot_envУстановка зависимостей Python
pip install --upgrade pip
pip install -r requirements.txtBOT_TOKEN- Токен Telegram бота от @BotFatherADMIN_IDS- ID администраторов через запятуюSERVER_IP- Внутренний IP адрес сервера (на интерфейсе)AWG_INTERFACE- Имя интерфейса AmneziaWG (по умолчанию: awg0)SERVER_PORT- Порт сервера (по умолчанию: 51820)SERVER_SUBNET- Подсеть сервера (по умолчанию: 10.10.0.0/24)AWG_CONFIG_DIR- Директория конфигураций AWGDATABASE_PATH- Путь к файлу базы данныхBACKUP_DIR- Директория для резервных копий
- Откройте @BotFather в Telegram
- Отправьте команду
/newbot - Следуйте инструкциям и получите токен
- Вставьте токен в
config.py
- Откройте @userinfobot в Telegram
- Бот автоматически отправит ваш ID
- Добавьте ID в список
admin_idsвconfig.py
Создание systemd-юнита для автоматического запуска бота:
Создание файла сервиса
sudo nano /etc/systemd/system/awg_bot.serviceСодержимое файла:
[Unit]
Description=AmneziaWG Telegram Management Bot
[Service]
Type=simple
User=root
WorkingDirectory=/path/to/AWG_Bot2.0
ExecStart=/root/.pyenv/versions/awg_bot_env/bin/python main.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
⚠️ Важно: Замените/path/to/AWG_Bot2.0на реальный путь к директории проекта.
Активация сервиса:
Перезагрузка конфигурации systemd
sudo systemctl daemon-reloadЗапуск бота
sudo systemctl start awg_bot.serviceДобавление в автозагрузку
sudo systemctl enable awg_bot.serviceПроверка статуса
sudo systemctl status awg_bot.serviceПросмотр логов
sudo journalctl -u awg_bot.service -fСоздайте конфигурационный файл /etc/amnezia/amneziawg/awg0.conf:
sudo mkdir -p /etc/amnezia/amneziawg
sudo nano /etc/amnezia/amneziawg/awg0.confМинимальная конфигурация:
[Interface]
PrivateKey = <your_server_private_key>
Address = 10.10.0.1/24
ListenPort = 51820
PostUp = iptables -t nat -A POSTROUTING -o `ip route | awk '/default/ {print $5; exit}'` -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o `ip route | awk '/default/ {print $5; exit}'` -j MASQUERADEВременное включение
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1 # для IPv6Постоянное включение
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -pЗапуск интерфейса
sudo awg-quick up awg0Проверка статуса
sudo awg show awg0Добавление в автозагрузку
sudo systemctl enable awg-quick@awg0/start- Запуск бота и отображение главного меню
- В главном меню выберите "👥 Управление клиентами"
- Нажмите "➕ Добавить клиента"
- Введите уникальное имя клиента (например:
user1,client-mobile) - Укажите endpoint (если не задан глобально в конфигурации)
- Выберите срок действия:
- 1 час - для тестовых подключений
- 1 день - краткосрочный доступ
- 1 неделя - средний срок
- 1 месяц - стандартный период
- Свой срок - произвольная дата и время
- Постоянная - без ограничений по времени
- Установите лимит трафика:
- 5 GB, 10 GB, 30 GB, 100 GB
- Без ограничений - неограниченный трафик
После создания клиент автоматически добавляется в AWG, и генерируется:
- Конфигурационный файл
- QR-код для быстрого подключения
- VPN-ссылка для AmneziaVPN
- "👥 Управление клиентами" → "📋 Список клиентов"
- Выберите клиента из списка
- Доступные действия:
- ✏️ Редактировать - изменение параметров
- 🔒 Заблокировать/Разблокировать - управление доступом
- 📊 Статистика - просмотр использования трафика
- 📱 QR-код - для сканирования в мобильном приложении
- 📄 Конфигурация - скачивание .conf файла
- 🔗 IP-соединения - Просмотр IP-адресов подключения
- 🗑️ Удалить - полное удаление клиента
При редактировании можно изменить:
- Имя клиента
- Endpoint
- Срок действия
- Лимит трафика
- Перегенерация ключей
"📊 Статистика сервера" показывает:
- Общее количество клиентов
- Активные клиенты
- Заблокированные клиенты
- Суммарный трафик
Для каждого клиента доступна:
- Использованный трафик (RX/TX)
- Последнее подключение
- История IP-адресов
- Геолокация подключений
- Количество подключений за день
- "💾 Резервные копии" → "➕ Создать бэкап"
- Бот автоматически сохраняет:
- База данных SQLite
- Конфигурации AWG
- Файл конфигурации бота
- Бэкап сохраняется в директорию
backups/с временной меткой
- "💾 Резервные копии" → "📋 Список бэкапов"
- Выберите нужный бэкап
- Подтвердите восстановление
- Бот автоматически:
- Остановит AWG интерфейс
- Восстановит базу данных
- Восстановит конфигурации
- Перезапустит AWG
⚠️ Внимание: При восстановлении текущие данные будут перезаписаны.
Старые бэкапы можно удалить через интерфейс бота для освобождения места.
Реализованы следующие оптимизации SQLite:
- Пул из 5 переиспользуемых соединений
- Устраняет overhead на открытие/закрытие
- Поддерживает "горячий" кэш SQLite
PRAGMA journal_mode = WAL; -- Write-Ahead Logging
PRAGMA synchronous = NORMAL; -- Баланс скорости/безопасности
PRAGMA cache_size = 10000; -- 40MB кэш
PRAGMA temp_store = MEMORY; -- Временные данные в RAM
PRAGMA mmap_size = 268435456; -- 256MB memory-mapped I/O
PRAGMA page_size = 4096; -- Оптимальный размер страницы
Созданы индексы на всех часто используемых колонках:
idx_clients_name,idx_clients_public_keyidx_clients_ip_address,idx_clients_is_activeidx_ip_client_dateдля быстрой выборки истории
- TTL кэш для часто запрашиваемых данных
- Автоматическая инвалидация при изменениях
- Снижение нагрузки на диск
update_clients_batch()для массовых обновлений- Единая транзакция для группы операций
Фоновая задача check_client_limits():
- Проверяет лимиты каждые 5 минут
- Обновляет статистику трафика
- Блокирует клиентов при превышении
- Минимальная нагрузка на систему
- Проверка ID пользователя перед каждым действием
- Middleware для фильтрации несанкционированного доступа
- Только администраторы из
ADMIN_IDSимеют доступ
- Проверка всех пользовательских вводов
- Санитизация имен файлов и путей
- Защита от SQL-инъекций через параметризованные запросы
- Валидация IP-адресов и сетевых параметров
- Приватные ключи не логируются
- Конфигурации AWG защищены правами доступа
- База данных доступна только root
- Резервные копии сжимаются и защищаются
- Детальные логи всех операций
- Не логируются конфиденциальные данные (токены, ключи)
- Логи ошибок с traceback для отладки
- Ротация логов для предотвращения переполнения
- Используйте сильные токены - не используйте тестовые токены в production
- Ограничьте доступ к серверу - используйте firewall
- Регулярные обновления - обновляйте систему и зависимости
- Резервное копирование - делайте регулярные бэкапы
- Мониторинг логов - регулярно проверяйте логи на подозрительную активность
Проблема: BOT_TOKEN не найден в конфигурации
Решение: Проверьте config.py
nano config.pyУбедитесь что bot_token заполнен корректным токеном
Проблема: AmneziaWG недоступен
Решение: Проверьте установку AWG
awg --versionПроверьте статус интерфейса
sudo awg show awg0Если интерфейс не работает, запустите его
sudo awg-quick up awg0Проблема: database is locked
Решение: Остановите бота
sudo systemctl stop awg_bot.serviceПроверьте процессы, использующие БД
sudo lsof clients.dbПерезапустите бота
sudo systemctl start awg_bot.serviceПроблема: Клиенты не могут подключиться к VPN
Решение: Проверьте IP forwarding
sysctl net.ipv4.ip_forward # должно быть 1Проверьте правила iptables
sudo iptables -t nat -L -n -v | grep MASQUERADEПроверьте открытость порта
sudo ss -ulnp | grep 51820Проверьте firewall
sudo ufw status
sudo ufw allow 51820/udpПроблема: Геолокация не работает
Решение: Проверьте доступность ip-api.com
curl -s "http://ip-api.com/json/8.8.8.8"Если API недоступно, бот продолжит работу без геолокации
Проблема: Permission denied при доступе к AWG
Решение: Убедитесь что бот запущен от root
sudo systemctl status awg_bot.service | grep UserПроверьте права на конфигурационную директорию
ls -la /etc/amnezia/amneziawg/Исправьте права если необходимо
sudo chown -R root:root /etc/amnezia/amneziawg/
sudo chmod 700 /etc/amnezia/amneziawg/Логи systemd
sudo journalctl -u awg_bot.service -fФайл логов бота
tail -f bot.logЛоги с ошибками
grep ERROR bot.logНет, для управления сетевым интерфейсом AmneziaWG требуются root права.
Да, IPv6 поддерживается. Включите параметр ipv6_enabled: bool = True в конфигурации и настройте IPv6 подсеть в AWG.
В текущей версии отслеживается история IP, но ограничение одновременных подключений не реализовано.
В текущей версии - нет. Один бот управляет одним сервером AWG на одном интерфейсе.
- Создайте резервную копию через бота
- Скачайте файл бэкапа из директории
backups/ - Установите бота на новом сервере
- Восстановите бэкап через интерфейс бота
Да, все конфигурации защищены на уровне файловой системы. Приватные ключи не передаются через Telegram без шифрования.
- Многопользовательский режим - раздельное управление для нескольких администраторов
- Уведомления - оповещения о превышении лимитов, истечении срока
- Webhook режим - альтернатива long polling для больших нагрузок
- API интеграция - REST API для внешних систем
- Множественные серверы - управление несколькими AWG серверами
Мы приветствуем вклад в развитие проекта! Вот как можно помочь:
Если обнаружили баг, пожалуйста:
- Проверьте, что он еще не был reported в Issues
- Создайте новый Issue с подробным описанием:
- Шаги для воспроизведения
- Ожидаемое поведение
- Фактическое поведение
- Версия Python, ОС
- Логи ошибок
Для предложения новых функций:
- Создайте Issue с тегом
enhancement - Опишите функционал и его преимущества
- Если возможно, приложите примеры использования
- Fork репозитория
- Создайте feature-ветку (
git checkout -b feature/AmazingFeature) - Commit изменения (
git commit -m 'Add some AmazingFeature') - Push в ветку (
git push origin feature/AmazingFeature) - Откройте Pull Request
- Следуйте PEP 8
- Используйте type hints где возможно
- Документируйте функции и классы docstrings
- Пишите понятные комментарии на русском языке
Этот проект распространяется под лицензией GNU General Public License v3.0.
Основные положения:
- ✅ Свободное использование
- ✅ Изменение и распространение
- ✅ Коммерческое использование
⚠️ Обязательно открытие исходного кода при распространении⚠️ Указание оригинального автора
Полный текст лицензии: LICENSE
JB-SelfCompany
- GitHub: @JB-SelfCompany
- Project: AWG_Bot2.0
- AmneziaVPN - за разработку AmneziaWG
- aiogram - за отличный фреймворк для Telegram ботов
- WireGuard - за революционный VPN протокол
- Все контрибьюторы проекта
При возникновении вопросов:
- Документация - проверьте README и Wiki
- FAQ - найдите ответ в разделе FAQ
- Issues - создайте Issue
- Discussions - задайте вопрос в Discussions




