feat(migrations): Add WARP auto-integration with redsocks and iptables

- Implemented migration 067 to set up Cloudflare WARP with automatic routing for VPN client TCP traffic through a redsocks proxy.
- Included installation scripts for WARP and redsocks, along with iptables rules for traffic redirection.
- Added detection for X-Ray and patching of its outbound configuration.
- Created uninstall scripts to clean up configurations and remove installed packages.

fix(migrations): Enhance WARP install script for heredoc compatibility

- Implemented migration 068 to fix nested heredoc conflicts and streamline the WARP installation script for panel compatibility.
- Removed duplicate `set -eo pipefail` and adjusted formatting for better readability.

feat(migrations): Auto-detect AIVPN subnet for routing in WARP setup

- Implemented migration 069 to enhance the WARP installation script by adding detection for AIVPN subnets alongside existing AWG container detection.
- Updated routing logic to handle both container IPs and host-level VPN subnets.
- Ensured proper configuration of iptables for seamless traffic routing through the WARP proxy.
This commit is contained in:
infosave2007
2026-04-25 10:40:21 +03:00
parent f04f9dd1cb
commit 809b0ca63d
11 changed files with 3178 additions and 113 deletions
+409
View File
@@ -0,0 +1,409 @@
# Amnezia VPN Web Panel
Веб-панель управления для VPN-серверов Amnezia AWG (WireGuard).
## Возможности
- Развертывание VPN-серверов через SSH (пароль или **SSH-ключ**)
- **Импорт из существующих VPN-панелей** (wg-easy, 3x-ui)
- **Расширенное управление протоколами** (WireGuard, AmneziaWG, OpenVPN, Shadowsocks и др.)
- **AI-настройка протоколов** через OpenRouter (опционально)
- Управление клиентскими конфигурациями с **датами истечения**
- **Лимиты трафика** для клиентов с автоматическим применением
- **Резервное копирование и восстановление** серверов
- **Тестирование сценариев**: определение и проверка различных сценариев подключения VPN across протоколов
- **Расширенное управление логами**: просмотр, поиск и управление системными и контейнерными логами
- Мониторинг статистики трафика
- Генерация QR-кодов для мобильных приложений
- Многоязычный интерфейс (английский, русский, испанский, немецкий, французский, китайский)
- REST API с JWT-аутентификацией
- Аутентификация пользователей и контроль доступа
- **Автоматическая проверка истечения срока действия клиентов и лимитов трафика** через cron
## Доступные протоколы
- AmneziaWG Advanced (`amnezia-wg-advanced`)
- AmneziaWG 2.0 (`awg2`)
- WireGuard Standard (`wireguard-standard`)
- OpenVPN (`openvpn`)
- Shadowsocks (`shadowsocks`)
- XRay VLESS (`xray-vless`)
- MTProxy (Telegram) (`mtproxy`)
- SMB Server (`smb`)
- AIVPN (`aivpn`) - https://github.com/infosave2007/aivpn
- Cloudflare WARP Proxy (`cf-warp`) — прозрачное проксирование трафика через Cloudflare
## Требования
- Docker
- Docker Compose
## Установка
```bash
git clone https://github.com/infosave2007/amneziavpnphp.git
cd amneziavpnphp
cp .env.example .env
# Для Docker Compose V2 (рекомендуется)
docker compose up -d
docker compose exec web composer install
# Дождитесь готовности БД (начальные SQL-файлы миграции применяются автоматически через MySQL entrypoint)
until [ "$(docker inspect -f '{{.State.Health.Status}}' amnezia-panel-db 2>/dev/null)" = "healthy" ]; do
sleep 2
done
# Или для старой Docker Compose V1
docker-compose up -d
docker-compose exec web composer install
until [ "$(docker inspect -f '{{.State.Health.Status}}' amnezia-panel-db 2>/dev/null)" = "healthy" ]; do
sleep 2
done
# Ручной режим миграции (для существующих установок / обновлений)
set -a; source .env; set +a
for f in migrations/*.sql; do
docker compose exec -T db mysql -u"$DB_USERNAME" -p"$DB_PASSWORD" "$DB_DATABASE" < "$f" || true
done
# Для Docker Compose V1 ручной режим миграции:
# for f in migrations/*.sql; do
# docker-compose exec -T db mysql -u"$DB_USERNAME" -p"$DB_PASSWORD" "$DB_DATABASE" < "$f" || true
# done
```
Доступ: http://localhost:8082
Данные для входа по умолчанию: admin@amnez.ia / admin123
### Предварительные требования для удаленного сервера
Для развертывания протоколов на чистом удаленном хосте, Docker Engine должен быть доступен на этом хосте.
Если Docker отсутствует, установите его сначала (пример для Ubuntu):
```bash
apt-get update -y
apt-get install -y ca-certificates curl gnupg lsb-release
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --batch --yes --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
. /etc/os-release
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu ${VERSION_CODENAME} stable" > /etc/apt/sources.list.d/docker.list
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
```
## Настройка
Отредактируйте `.env`:
```
DB_HOST=db
DB_PORT=3306
DB_DATABASE=amnezia_panel
DB_USERNAME=amnezia
DB_PASSWORD=amnezia
ADMIN_EMAIL=admin@amnez.ia
ADMIN_PASSWORD=admin123
JWT_SECRET=your-secret-key-change-this
```
## Использование
### Добавление VPN-сервера
1. Серверы → Добавить сервер
2. Введите: имя, IP хоста, SSH-порт, имя пользователя
3. Выберите метод аутентификации: **Пароль** или **SSH-ключ**
- Для SSH-ключа: вставьте ваш приватный ключ (формат PEM/OpenSSH)
3. **(Опционально) Включите импорт из существующей панели:**
- Отметьте "Импортировать из существующей панели"
- Выберите тип панели (wg-easy или 3x-ui)
- Загрузите файл резервной копии (JSON)
4. Нажмите "Создать сервер"
5. Дождитесь развертывания
6. Клиенты будут импортированы автоматически, если импорт был включен
### Создание клиента
1. Откройте детали сервера
2. Введите имя клиента
3. **Выберите период истечения** (опционально, по умолчанию: бессрочно)
4. **Выберите лимит трафика** (опционально, по умолчанию: безлимитно)
5. Нажмите "Создать клиента"
6. Скачайте конфигурацию или отсканируйте QR-код
### Управление истечением срока действия клиента
Установите истечение через UI или API:
```bash
# Установить конкретную дату
curl -X POST http://localhost:8082/api/clients/123/set-expiration \
-H "Authorization: Bearer <token>" \
-d '{"expires_at": "2025-12-31 23:59:59"}'
# Продлить на 30 дней
curl -X POST http://localhost:8082/api/clients/123/extend \
-H "Authorization: Bearer <token>" \
-d '{"days": 30}'
# Получить клиентов, у которых скоро истекает срок (в течение 7 дней)
curl http://localhost:8082/api/clients/expiring?days=7 \
-H "Authorization: Bearer <token>"
```
### Управление лимитами трафика
Установите и отслеживайте лимиты трафика через UI или API:
```bash
# Установить лимит трафика (10 ГБ = 10737418240 байт)
curl -X POST http://localhost:8082/api/clients/123/set-traffic-limit \
-H "Authorization: Bearer <token>" \
-d '{"limit_bytes": 10737418240}'
# Удалить лимит трафика (установить безлимитный)
curl -X POST http://localhost:8082/api/clients/123/set-traffic-limit \
-H "Authorization: Bearer <token>" \
-d '{"limit_bytes": null}'
# Проверить статус лимита трафика
curl http://localhost:8082/api/clients/123/traffic-limit-status \
-H "Authorization: Bearer <token>"
# Получить клиентов, превысивших лимит трафика
curl http://localhost:8082/api/clients/overlimit \
-H "Authorization: Bearer <token>"
```
### Резервное копирование серверов
Создавайте и восстанавливайте резервные копии через UI или API:
```bash
# Создать резервную копию
curl -X POST http://localhost:8082/api/servers/1/backup \
-H "Authorization: Bearer <token>"
# Список резервных копий
curl http://localhost:8082/api/servers/1/backups \
-H "Authorization: Bearer <token>"
# Восстановить из резервной копии
curl -X POST http://localhost:8082/api/servers/1/restore \
-H "Authorization: Bearer <token>" \
-d '{"backup_id": 123}'
```
### Управление протоколами
Управляйте VPN-протоколами через **Настройки → Протоколы**:
- Установка/удаление протоколов (WireGuard, AmneziaWG, OpenVPN и др.)
- Настройка параметров протокола (порты, транспорт, маскировка)
- **AI-ассистент**: используйте "Спросить AI" для генерации сложных конфигураций протоколов, адаптированных к вашим потребностям (требуется API-ключ OpenRouter).
### Cloudflare WARP Proxy
WARP прозрачно проксирует **весь TCP-трафик** от VPN-клиентов через сеть Cloudflare, скрывая реальный IP-адрес сервера.
> **⚠️ Устанавливайте WARP последним** — после всех других протоколов (AWG, X-Ray, AIVPN и др.). Во время установки WARP автоматически обнаруживает активные VPN-контейнеры и интерфейсы и настраивает маршрутизацию для каждого из них.
**Поддерживаемые протоколы:**
- **AWG / AWG2** — маршрутизация через IP контейнера + хост redsocks
- **X-Ray VLESS** — исходящий `warp-out` через SOCKS5 в конфигурации X-Ray
- **AIVPN / WireGuard** — маршрутизация через iptables + redsocks на уровне хоста
**Проверка:** подключитесь к VPN и откройте `https://1.1.1.1/cdn-cgi/trace` — поле `warp=on` подтверждает работоспособность.
### Тестирование сценариев и логи
**Тестирование сценариев**:
- Создавайте тестовые сценарии для проверки подключения через различные протоколы и сетевые условия.
- Запускайте автоматические тесты для обеспечения надежности вашей VPN-инфраструктуры.
**Управление логами**:
- Централизованный просмотр всех системных, контейнерных и прикладных логов.
- Возможности поиска и фильтрации для быстрой диагностики проблем.
### AI-ассистент
Настройте API-ключ OpenRouter in **Настройки** для включения:
- Автоматический перевод интерфейса
- AI-помощник для настройки протоколов
- Интеллектуальные предложения по устранению неполадок
### Автоматический мониторинг и сбор метрик
**Сборщик метрик запускается автоматически** при старте контейнера и отслеживается cron каждые 3 минуты. Если процесс падает, он автоматически перезапускается.
Проверить логи сборщика метрик:
```bash
docker compose exec web tail -f /var/log/metrics_collector.log
```
Проверить логи скрипта мониторинга:
```bash
docker compose exec web tail -f /var/log/metrics_monitor.log
```
Перезапустить сборщик метрик вручную:
```bash
docker compose exec web pkill -f collect_metrics.php
# Он будет автоматически перезапущен в течение 3 минут скриптом мониторинга
```
### Автоматическая проверка истечения срока действия клиентов
**Запускается автоматически в Docker-контейнере** каждый час для отключения истекших клиентов.
Проверить логи cron:
```bash
docker compose exec web tail -f /var/log/cron.log
```
Запустить вручную:
```bash
docker compose exec web php /var/www/html/bin/check_expired_clients.php
```
### Автоматическая проверка лимитов трафика
**Запускается автоматически в Docker-контейнере** каждый час для отключения клиентов, превысивших лимит трафика.
Проверить логи cron:
```bash
docker compose exec web tail -f /var/log/cron.log
```
Запустить вручную:
```bash
docker compose exec web php /var/www/html/bin/check_traffic_limits.php
```
### API-аутентификация
Получить JWT-токен:
```bash
curl -X POST http://localhost:8082/api/auth/token \
-d "email=admin@amnez.ia&password=admin123"
```
Использовать токен:
```bash
curl -H "Authorization: Bearer <token>" \
http://localhost:8082/api/servers
```
## API Endpoints
### Аутентификация
```
POST /api/auth/token - Получить JWT-токен
POST /api/tokens - Создать постоянный API-токен
GET /api/tokens - Список API-токенов
DELETE /api/tokens/{id} - Отозвать токен
```
### Серверы
```
GET /api/servers - Список всех серверов
POST /api/servers/create - Создать новый сервер
Параметры: name, host, port, username, password
DELETE /api/servers/{id}/delete - Удалить сервер по ID
GET /api/servers/{id}/clients - Список клиентов на сервере
```
### Протоколы
```
GET /api/protocols/active - Список всех доступных протоколов (JWT-дружественный, включает ID протоколов)
GET /api/protocols - Управление протоколами (требует session admin auth, не JWT)
GET /api/servers/{id}/protocols - Список установленных протоколов на сервере
POST /api/servers/{id}/protocols/install - Установить протокол
```
### Клиенты
```
GET /api/clients - Список всех клиентов
GET /api/clients/{id}/details - Получить детали клиента со статистикой, конфигурацией и QR-кодом
GET /api/clients/{id}/qr - Получить QR-код клиента
POST /api/clients/create - Создать нового клиента (возвращает конфигурацию и QR-код)
Параметры: server_id, name, protocol_id (опционально, по умолчанию: установлен), expires_in_days (опционально)
POST /api/clients/{id}/revoke - Отозвать доступ клиента
POST /api/clients/{id}/restore - Восстановить доступ клиента
DELETE /api/clients/{id}/delete - Удалить клиента по ID (удаляет из БД и сервера)
POST /api/clients/{id}/set-expiration - Установить дату истечения клиента
Параметры: expires_at (Y-m-d H:i:s или null)
POST /api/clients/{id}/extend - Продлить истечение клиента
Параметры: days (int)
GET /api/clients/expiring - Получить клиентов, у которых скоро истекает срок
Параметры: days (по умолчанию: 7)
POST /api/clients/{id}/set-traffic-limit - Установить лимит трафика клиента
Параметры: limit_bytes (int или null для безлимитного)
GET /api/clients/{id}/traffic-limit-status - Получить статус лимита трафика
GET /api/clients/overlimit - Получить клиентов, превысивших лимит трафика
```
### Резервные копии
```
POST /api/servers/{id}/backup - Создать резервную копию сервера
GET /api/servers/{id}/backups - Список резервных копий сервера
POST /api/servers/{id}/restore - Восстановить из резервной копии
Параметры: backup_id
DELETE /api/backups/{id} - Удалить резервную копию
```
### Импорт панели
```
POST /api/servers/{id}/import - Импортировать клиентов из существующей панели
Параметры: panel_type (wg-easy|3x-ui), backup_file (multipart/form-data)
GET /api/servers/{id}/imports - Получить историю импорта для сервера
```
## Перевод
Добавьте API-ключ OpenRouter в настройках, затем запустите:
```bash
docker compose exec web php bin/translate_all.php
```
Или переведите через веб-интерфейс: Настройки → Автоперевод
## Структура
```
public/index.php - Маршруты
inc/ - Основные классы
Auth.php - Аутентификация
DB.php - Подключение к базе данных
Router.php - Маршрутизация URL
View.php - Twig-шаблоны
VpnServer.php - Управление серверами
VpnClient.php - Управление клиентами
Translator.php - Многоязычность
JWT.php - Токен-аутентификация
QrUtil.php - Генерация QR-кодов
PanelImporter.php - Импорт из wg-easy/3x-ui
InstallProtocolManager.php - Ядро управления протоколами
OpenRouterService.php - AI-интеграция
templates/ - Twig-шаблоны
migrations/ - SQL-миграции (выполняются в алфавитном порядке)
```
## Технологический стек
- PHP 8.2
- MySQL 8.0
- Twig 3
- Tailwind CSS
- Docker
## Лицензия
MIT
## Поддержать проект
Если вы находите этот проект полезным, вы можете поддержать его разработку через пожертвование через Tribute: https://t.me/tribute/app?startapp=dzX1