diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..94828cc
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,119 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [2.1.1] - 2026-04-24
+
+### Added
+- ✨ **Полная реализация функций установки всех панелей**
+ - `install_wireguard()` - автоматическая установка и настройка WireGuard
+ - `install_3xui()` - установка 3x-ui через официальный скрипт
+ - `install_remnawave()` - установка Remnawave с Docker и генерацией паролей
+ - `install_hysteria2()` - установка Hysteria2 с сертификатами и systemd
+ - Улучшенная `install_mtproxy()` с сохранением конфигурации
+- 📱 **QR-код для MTProxy** - автоматическая генерация при установке
+- 💾 **Сохранение конфигурации MTProxy** в `/opt/MTProxy/.config`
+- 🔄 **Опция "Установить всё"** - последовательная установка всех панелей
+- 🔁 **Цикл меню в wg-manager.sh** - меню больше не закрывается после действия
+- 📚 **Общая библиотека функций** `lib/common.sh`:
+ - Функции валидации (порты, имена, IP)
+ - Сетевые утилиты (получение IP, генерация портов)
+ - Системные проверки (root, OS detection)
+ - Утилиты (spinner, confirm, генерация паролей)
+- 📚 **Библиотека WireGuard** `lib/wireguard.sh` - общие функции для управления клиентами
+- 📚 **Библиотека логирования** `lib/logging.sh` - централизованное логирование
+- ⚙️ **Конфигурационный файл** `config/defaults.conf` - настройки по умолчанию
+- 🔧 **Reverse Proxy Manager** `reverse-proxy-manager.sh`:
+ - Установка и настройка Nginx, Caddy, HAProxy
+ - Автоматическая настройка для 3x-ui
+ - Балансировка нагрузки с HAProxy
+ - Гибридные конфигурации (Nginx + Caddy)
+ - Подсказки и рекомендации по выбору
+- 📁 **Структура проекта** - добавлены директории `lib/`, `config/`, `tests/`
+
+### Fixed
+- 🐛 **Критический баг**: функции установки панелей не были реализованы (только комментарии)
+- 🐛 **Критический баг**: MTProxy конфигурация (SECRET и PORT) не сохранялась
+- 🐛 **Критический баг**: Selfsteal падал с ошибкой если Remnawave не установлен
+- 🐛 **Баг**: wg-manager.sh закрывался после каждого действия (отсутствовал цикл)
+- 🐛 **Баг**: устаревшая команда `docker-compose` (заменена на `docker compose`)
+
+### Changed
+- 🔄 **Обновлено на Docker Compose v2** - использование `docker compose` вместо `docker-compose`
+- 🔍 **Улучшена проверка зависимостей** в Selfsteal - автоопределение reverse proxy
+- 🎨 **Улучшен UX** - добавлены подтверждения для критических операций
+- 📝 **Улучшены сообщения об ошибках** - более информативные и понятные
+
+### Security
+- 🔒 **Валидация пользовательского ввода** - проверка портов, имён, IP адресов
+- 🔒 **Безопасная генерация паролей** - использование `openssl rand`
+- 🔒 **Проверка доступности портов** перед использованием
+
+## [2.1.0] - 2026-04-22
+
+### Added
+- 📱 Поддержка MTProxy для Telegram
+- 🔄 Выбор Reverse Proxy (Nginx/Caddy)
+- 🎭 Selfsteal - маскировка под обычный сайт
+- 📱 QR-коды для MTProxy
+- 🎮 Менеджер MTProxy
+
+### Changed
+- Интерактивный выбор компонентов
+- Улучшенная система меню
+- Больше опций конфигурации
+
+### Fixed
+- Исправлена ошибка создания директории логов
+
+## [2.0.0] - 2026-04-20
+
+### Added
+- Поддержка WireGuard VPN
+- Поддержка 3x-ui Panel
+- Поддержка Remnawave Panel
+- Поддержка Hysteria2 Proxy
+- Автоматическая установка Docker
+- Настройка firewall (UFW/firewalld)
+- BBR оптимизация TCP
+- Автоматическое создание swap
+- SSL/TLS сертификаты (Let's Encrypt, Cloudflare DNS, Gcore DNS)
+- Мониторинг сервисов и ресурсов
+- Резервное копирование и восстановление
+- Управление клиентами WireGuard
+- Генерация QR-кодов
+- Многоязычность (EN/RU)
+
+### Changed
+- Полностью переписан установщик
+- Улучшен интерфейс
+- Добавлена модульность
+
+## [1.0.0] - 2026-04-15
+
+### Added
+- Первый релиз
+- Базовая установка VPN панелей
+- Простое меню управления
+
+---
+
+## Типы изменений
+
+- `Added` - новые функции
+- `Changed` - изменения в существующем функционале
+- `Deprecated` - функции, которые скоро будут удалены
+- `Removed` - удалённые функции
+- `Fixed` - исправления багов
+- `Security` - исправления уязвимостей
+
+---
+
+## Ссылки
+
+- [GitHub Repository](https://github.com/houseassassin/proxy-core)
+- [Issues](https://github.com/houseassassin/proxy-core/issues)
+- [Pull Requests](https://github.com/houseassassin/proxy-core/pulls)
diff --git a/README.md b/README.md
index d0813c4..c0db062 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@
```
[](https://opensource.org/licenses/MIT)
-[](https://github.com/houseassassin/proxy-core)
+[](https://github.com/houseassassin/proxy-core)
[](https://www.gnu.org/software/bash/)
[](https://www.docker.com/)
@@ -329,6 +329,9 @@ sudo ./wg-manager.sh
# Управление MTProxy
sudo ./mtproxy-manager.sh
+# Управление Reverse Proxy (NEW!)
+sudo ./reverse-proxy-manager.sh
+
# Общее управление панелями
sudo ./manage.sh
@@ -336,22 +339,44 @@ sudo ./manage.sh
sudo ./update.sh
```
+### 🆕 Новое в версии 2.1.1
+
+**Reverse Proxy Manager** - мощный инструмент для настройки:
+- ✅ Nginx - высокая производительность и кэширование
+- ✅ Caddy - автоматический SSL из коробки
+- ✅ HAProxy - балансировка нагрузки
+- ✅ Гибридные конфигурации (Nginx + Caddy)
+- ✅ Подсказки и рекомендации по выбору
+
+```bash
+sudo ./reverse-proxy-manager.sh
+```
+
---
## 📊 Структура проекта
```
proxy-core/
-├── 📄 install.sh # Главный установщик v2.1.0
-├── 🎮 manage.sh # Менеджер панелей
-├── 🔧 wg-manager.sh # WireGuard менеджер
-├── 📱 mtproxy-manager.sh # MTProxy менеджер
-├── 🔄 update.sh # Обновление компонентов
-├── 🎨 banner.sh # ASCII баннер
-├── 📖 README.md # Документация
-├── 📖 CONTRIBUTING.md # Руководство для участников
-├── 📖 PUBLISH.md # Инструкция по публикации
-└── 📜 LICENSE # MIT License
+├── 📄 install.sh # Главный установщик v2.1.1
+├── 🎮 manage.sh # Менеджер панелей
+├── 🔧 wg-manager.sh # WireGuard менеджер
+├── 📱 mtproxy-manager.sh # MTProxy менеджер
+├── 🔄 update.sh # Обновление компонентов
+├── 🌐 reverse-proxy-manager.sh # Reverse Proxy менеджер (NEW!)
+├── 🎨 banner.sh # ASCII баннер
+├── 📚 lib/ # Библиотеки (NEW!)
+│ ├── common.sh # Общие функции
+│ ├── wireguard.sh # WireGuard функции
+│ └── logging.sh # Логирование
+├── ⚙️ config/ # Конфигурация (NEW!)
+│ └── defaults.conf # Настройки по умолчанию
+├── 🧪 tests/ # Тесты (NEW!)
+├── 📖 README.md # Документация
+├── 📖 CHANGELOG.md # История изменений (NEW!)
+├── 📖 CONTRIBUTING.md # Руководство для участников
+├── 📖 PUBLISH.md # Инструкция по публикации
+└── 📜 LICENSE # MIT License
```
---
@@ -377,29 +402,53 @@ proxy-core/
## 🔄 Changelog
-### Version 2.1.0 (2026-04-22)
+### Version 2.1.1 (2026-04-24)
✨ Новое
-- 📱 Поддержка MTProxy для Telegram
-- 🔄 Выбор Reverse Proxy (Nginx/Caddy)
-- 🎭 Selfsteal - маскировка под обычный сайт
-- 📱 QR-коды для MTProxy
-- 🎮 Менеджер MTProxy
+- 🚀 Полная реализация функций установки всех панелей
+- 📚 Общая библиотека функций (lib/common.sh)
+- 📚 Библиотека WireGuard (lib/wireguard.sh)
+- 📚 Библиотека логирования (lib/logging.sh)
+- ⚙️ Конфигурационный файл (config/defaults.conf)
+- 🌐 Reverse Proxy Manager с поддержкой Nginx, Caddy, HAProxy
+- 🔁 Цикл меню в wg-manager.sh
+- 💾 Сохранение конфигурации MTProxy
+- 📱 QR-код для MTProxy
+- ✅ Валидация пользовательского ввода
+
+
+
+
+🐛 Исправления
+
+- Критический баг: функции установки не были реализованы
+- Критический баг: MTProxy конфигурация не сохранялась
+- Критический баг: Selfsteal падал без Remnawave
+- Баг: wg-manager.sh закрывался после действия
+- Баг: устаревшая команда docker-compose
🔧 Улучшения
-- Интерактивный выбор компонентов
-- Улучшенная система меню
-- Больше опций конфигурации
-- Исправлена ошибка создания директории логов
+- Обновлено на Docker Compose v2
+- Улучшена проверка зависимостей
+- Улучшен UX с подтверждениями
+- Более информативные сообщения об ошибках
+Полный список изменений: [CHANGELOG.md](CHANGELOG.md)
+
+### Version 2.1.0 (2026-04-22)
+
+- 📱 Поддержка MTProxy для Telegram
+- 🔄 Выбор Reverse Proxy (Nginx/Caddy)
+- 🎭 Selfsteal - маскировка под обычный сайт
+
---
## 💬 Поддержка
diff --git a/config/defaults.conf b/config/defaults.conf
new file mode 100644
index 0000000..bc1a3ae
--- /dev/null
+++ b/config/defaults.conf
@@ -0,0 +1,61 @@
+# Proxy-Core Configuration
+# Version: 2.1.1
+# Author: houseassassin
+
+# Directories
+PROJECT_DIR="/opt/proxy-core"
+WG_DIR="/etc/wireguard"
+MTPROXY_DIR="/opt/MTProxy"
+HYSTERIA_DIR="/etc/hysteria"
+REMNAWAVE_DIR="/opt/remnawave"
+NGINX_DIR="/etc/nginx"
+CADDY_DIR="/etc/caddy"
+HAPROXY_DIR="/etc/haproxy"
+
+# Network Configuration
+WG_SUBNET="10.0.0.0/24"
+WG_SERVER_IP="10.0.0.1"
+DNS_SERVERS="8.8.8.8,1.1.1.1"
+
+# Port Ranges
+WG_PORT_MIN=51820
+WG_PORT_MAX=51900
+MTPROXY_PORT_DEFAULT=8443
+HYSTERIA_PORT_MIN=36712
+HYSTERIA_PORT_MAX=36800
+XRAY_PORT_MIN=10000
+XRAY_PORT_MAX=10999
+
+# SSL/TLS
+SSL_CERT_DIR="/etc/ssl/proxy-core"
+ACME_EMAIL=""
+ACME_PROVIDER="letsencrypt"
+
+# Logging
+LOG_LEVEL="INFO"
+LOG_RETENTION_DAYS=30
+DEBUG=0
+
+# Backup
+BACKUP_DIR="/root/proxy-core-backups"
+BACKUP_RETENTION_DAYS=7
+
+# Docker
+DOCKER_COMPOSE_VERSION="v2"
+
+# Reverse Proxy Defaults
+DEFAULT_REVERSE_PROXY="nginx"
+ENABLE_HTTP2=true
+ENABLE_HTTP3=false
+ENABLE_BROTLI=true
+ENABLE_GZIP=true
+
+# Security
+ENABLE_FAIL2BAN=true
+ENABLE_UFW=true
+SSH_PORT=22
+
+# Performance
+ENABLE_BBR=true
+ENABLE_SWAP=true
+SWAP_SIZE="2G"
diff --git a/install.sh b/install.sh
index d5e284e..ce91e05 100755
--- a/install.sh
+++ b/install.sh
@@ -223,11 +223,164 @@ install_packages() {
success "Системные пакеты установлены"
}
+# WireGuard installation
+install_wireguard() {
+ log "Установка WireGuard..."
+
+ case $OS in
+ ubuntu|debian)
+ apt-get install -y wireguard wireguard-tools qrencode
+ ;;
+ centos|rhel|fedora)
+ yum install -y wireguard-tools qrencode
+ ;;
+ esac
+
+ mkdir -p /etc/wireguard
+ cd /etc/wireguard
+ wg genkey | tee server_private.key | wg pubkey > server_public.key
+ chmod 600 server_private.key
+
+ SERVER_PRIVATE_KEY=$(cat server_private.key)
+ SERVER_PUBLIC_KEY=$(cat server_public.key)
+ SERVER_IP=$(get_server_ip)
+ WG_PORT=$(get_random_port 51820 51900)
+
+ cat > /etc/wireguard/wg0.conf <> /etc/sysctl.conf
+ sysctl -p >/dev/null 2>&1
+
+ systemctl enable wg-quick@wg0
+ systemctl start wg-quick@wg0
+
+ ufw allow $WG_PORT/udp 2>/dev/null || firewall-cmd --permanent --add-port=$WG_PORT/udp 2>/dev/null
+
+ success "WireGuard установлен на порту $WG_PORT"
+
+ read -p "Создать первого клиента? (Y/n): " create_client
+ if [[ "$create_client" != "n" && "$create_client" != "N" ]]; then
+ bash "$PROJECT_DIR/wg-manager.sh" 2>/dev/null || log "Запустите wg-manager.sh для создания клиентов"
+ fi
+}
+
+# 3x-ui installation
+install_3xui() {
+ log "Установка 3x-ui..."
+ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
+ success "3x-ui установлен"
+}
+
+# Remnawave installation
+install_remnawave() {
+ log "Установка Remnawave..."
+
+ install_docker
+
+ cd /opt
+ if [ -d "remnawave" ]; then
+ warn "Remnawave уже установлен, обновляем..."
+ cd remnawave
+ docker compose down
+ cd /opt
+ rm -rf remnawave
+ fi
+
+ git clone https://github.com/remnawave/backend.git remnawave
+ cd remnawave
+
+ DB_PASSWORD=$(openssl rand -base64 32)
+ ADMIN_PASSWORD=$(openssl rand -base64 16)
+
+ cat > .env < /etc/hysteria/config.yaml </dev/null
+
+ cat > /etc/systemd/system/hysteria-server.service </dev/null || firewall-cmd --permanent --add-port=$HYSTERIA_PORT/udp 2>/dev/null
+
+ success "Hysteria2 установлен"
+ echo ""
+ log "Порт: $HYSTERIA_PORT"
+ log "Пароль: $HYSTERIA_PASSWORD"
+ warn "Сохраните эти данные!"
+}
+
# MTProxy installation
install_mtproxy() {
log "Установка MTProxy для Telegram..."
- # Установка зависимостей
case $OS in
ubuntu|debian)
apt-get install -y git build-essential libssl-dev zlib1g-dev
@@ -237,7 +390,6 @@ install_mtproxy() {
;;
esac
- # Клонирование репозитория
cd /opt
if [ -d "MTProxy" ]; then
rm -rf MTProxy
@@ -245,21 +397,16 @@ install_mtproxy() {
git clone https://github.com/TelegramMessenger/MTProxy.git
cd MTProxy
- # Компиляция
make
- # Получение секрета
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
- # Генерация секрета для клиентов
SECRET=$(head -c 16 /dev/urandom | xxd -ps)
- # Выбор порта
read -p "Введите порт для MTProxy (по умолчанию 8443): " MTPROXY_PORT
MTPROXY_PORT=${MTPROXY_PORT:-8443}
- # Создание systemd сервиса
cat > /etc/systemd/system/mtproxy.service </dev/null || firewall-cmd --permanent --add-port=$MTPROXY_PORT/tcp 2>/dev/null
+ cat > /opt/MTProxy/.config < /dev/null; then
+ echo ""
+ log "QR-код для быстрого подключения:"
+ qrencode -t ansiutf8 "tg://proxy?server=${SERVER_IP}&port=${MTPROXY_PORT}&secret=${SECRET}"
+ fi
}
# Reverse Proxy selection
@@ -380,15 +538,29 @@ install_caddy() {
install_selfsteal() {
log "Установка Selfsteal шаблона..."
- if [ ! -d "/opt/remnawave" ] && [ ! -d "/opt/remnanode" ]; then
- error "Remnawave или Remnanode должны быть установлены для selfsteal"
- fi
-
# Определяем директорию
if [ -d "/opt/remnawave" ]; then
INSTALL_DIR="/opt/remnawave"
- else
+ elif [ -d "/opt/remnanode" ]; then
INSTALL_DIR="/opt/remnanode"
+ else
+ error "Remnawave или Remnanode должны быть установлены для selfsteal"
+ return 1
+ fi
+
+ # Устанавливаем REVERSE_PROXY если не задан
+ if [ -z "${REVERSE_PROXY:-}" ]; then
+ if command -v nginx >/dev/null 2>&1; then
+ REVERSE_PROXY="nginx"
+ log "Используется установленный Nginx"
+ elif command -v caddy >/dev/null 2>&1; then
+ REVERSE_PROXY="caddy"
+ log "Используется установленный Caddy"
+ else
+ warn "Reverse proxy не найден, устанавливаем Nginx..."
+ install_nginx
+ REVERSE_PROXY="nginx"
+ fi
fi
echo ""
@@ -509,20 +681,20 @@ main() {
case $install_choice in
1)
install_packages
- # WireGuard установка из оригинального скрипта
+ install_wireguard
;;
2)
install_packages
- # 3x-ui установка
+ install_3xui
;;
3)
install_packages
select_reverse_proxy
- # Remnawave установка
+ install_remnawave
;;
4)
install_packages
- # Hysteria2 установка
+ install_hysteria2
;;
5)
install_packages
@@ -531,7 +703,11 @@ main() {
6)
install_packages
select_reverse_proxy
- # Установка всех компонентов
+ install_wireguard
+ install_3xui
+ install_remnawave
+ install_hysteria2
+ install_mtproxy
;;
0) continue ;;
*) warn "Неверный выбор / Invalid choice" ;;
@@ -539,8 +715,14 @@ main() {
read -p "Нажмите Enter / Press Enter..."
;;
6)
- install_selfsteal
- read -p "Нажмите Enter / Press Enter..."
+ # Проверка перед вызовом
+ if [ ! -d "/opt/remnawave" ] && [ ! -d "/opt/remnanode" ]; then
+ error "Сначала установите Remnawave (опция 1 -> 3)"
+ read -p "Нажмите Enter / Press Enter..."
+ else
+ install_selfsteal
+ read -p "Нажмите Enter / Press Enter..."
+ fi
;;
9)
if [ "$MENU_LANG" = "en" ]; then
diff --git a/lib/common.sh b/lib/common.sh
new file mode 100755
index 0000000..c16d605
--- /dev/null
+++ b/lib/common.sh
@@ -0,0 +1,182 @@
+#!/bin/bash
+
+# Common functions library for Proxy-Core
+# Version: 2.1.1
+# Author: houseassassin
+
+# Colors
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+BLUE='\033[0;34m'
+MAGENTA='\033[0;35m'
+CYAN='\033[0;36m'
+GRAY='\033[0;90m'
+NC='\033[0m'
+
+# Logging functions
+log() {
+ echo -e "${GREEN}[INFO]${NC} $1"
+}
+
+warn() {
+ echo -e "${YELLOW}[WARN]${NC} $1"
+}
+
+error() {
+ echo -e "${RED}[ERROR]${NC} $1"
+}
+
+success() {
+ echo -e "${GREEN}[SUCCESS]${NC} $1"
+}
+
+# Validation functions
+validate_port() {
+ local port=$1
+ if ! [[ "$port" =~ ^[0-9]+$ ]] || [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then
+ error "Неверный порт: $port (должен быть 1-65535)"
+ return 1
+ fi
+ return 0
+}
+
+validate_name() {
+ local name=$1
+ if [ -z "$name" ]; then
+ error "Имя не может быть пустым"
+ return 1
+ fi
+ if ! [[ "$name" =~ ^[a-zA-Z0-9_-]+$ ]]; then
+ error "Неверное имя: $name (только буквы, цифры, _ и -)"
+ return 1
+ fi
+ return 0
+}
+
+check_port_available() {
+ local port=$1
+ if ss -ltun | awk '{print $4}' | grep -q ":$port\$"; then
+ error "Порт $port уже используется"
+ return 1
+ fi
+ return 0
+}
+
+validate_ip() {
+ local ip=$1
+ if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
+ return 0
+ else
+ error "Неверный IP адрес: $ip"
+ return 1
+ fi
+}
+
+# Network utilities
+get_server_ip() {
+ curl -s -4 ifconfig.me || curl -s -4 api.ipify.org || curl -s -4 ipinfo.io/ip
+}
+
+get_random_port() {
+ local MIN=${1:-3000}
+ local MAX=${2:-6999}
+
+ while :; do
+ PORT=$(shuf -i "$MIN-$MAX" -n 1)
+ if check_port_available "$PORT"; then
+ echo "$PORT"
+ return
+ fi
+ done
+}
+
+# System checks
+check_root() {
+ if [[ $EUID -ne 0 ]]; then
+ error "Этот скрипт должен быть запущен с правами root"
+ exit 1
+ fi
+}
+
+detect_os() {
+ if [ -f /etc/os-release ]; then
+ . /etc/os-release
+ OS=$ID
+ VER=$VERSION_ID
+ else
+ error "Не удалось определить операционную систему"
+ exit 1
+ fi
+}
+
+# Spinner animation
+spinner() {
+ local pid=$1
+ local text=$2
+ local spinstr='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
+
+ while kill -0 "$pid" 2>/dev/null; do
+ for (( i=0; i<${#spinstr}; i++ )); do
+ printf "\r${GREEN}[%s]${NC} %s" "${spinstr:$i:1}" "$text"
+ sleep 0.1
+ done
+ done
+ printf "\r\033[K"
+}
+
+# Confirmation prompt
+confirm() {
+ local prompt="${1:-Продолжить?}"
+ local default="${2:-n}"
+
+ if [ "$default" = "y" ]; then
+ read -p "$prompt (Y/n): " response
+ response=${response:-y}
+ else
+ read -p "$prompt (y/N): " response
+ response=${response:-n}
+ fi
+
+ [[ "$response" =~ ^[Yy]$ ]]
+}
+
+# Generate random password
+generate_password() {
+ local length=${1:-16}
+ openssl rand -base64 $length | tr -d "=+/" | cut -c1-$length
+}
+
+# Check if command exists
+command_exists() {
+ command -v "$1" >/dev/null 2>&1
+}
+
+# Check if service is running
+service_running() {
+ systemctl is-active --quiet "$1"
+}
+
+# Wait for service to start
+wait_for_service() {
+ local service=$1
+ local timeout=${2:-30}
+ local counter=0
+
+ while [ $counter -lt $timeout ]; do
+ if service_running "$service"; then
+ return 0
+ fi
+ sleep 1
+ ((counter++))
+ done
+
+ return 1
+}
+
+# Export all functions
+export -f log warn error success
+export -f validate_port validate_name check_port_available validate_ip
+export -f get_server_ip get_random_port
+export -f check_root detect_os spinner confirm
+export -f generate_password command_exists service_running wait_for_service
diff --git a/lib/logging.sh b/lib/logging.sh
new file mode 100755
index 0000000..3c4aa95
--- /dev/null
+++ b/lib/logging.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+# Logging library for Proxy-Core
+# Version: 2.1.1
+# Author: houseassassin
+
+LOGDIR="/var/log/proxy-core"
+mkdir -p "$LOGDIR" 2>/dev/null
+
+# Source common for colors
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+source "$SCRIPT_DIR/common.sh" 2>/dev/null || true
+
+log_to_file() {
+ local level=$1
+ local message=$2
+ local script=$(basename "${BASH_SOURCE[2]}" 2>/dev/null || echo "unknown")
+ local logfile="${LOGDIR}/$(date +%Y-%m-%d).log"
+
+ echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$script] [$level] $message" >> "$logfile" 2>/dev/null
+}
+
+log() {
+ echo -e "${GREEN}[INFO]${NC} $1"
+ log_to_file "INFO" "$1"
+}
+
+error() {
+ echo -e "${RED}[ERROR]${NC} $1"
+ log_to_file "ERROR" "$1"
+}
+
+warn() {
+ echo -e "${YELLOW}[WARN]${NC} $1"
+ log_to_file "WARN" "$1"
+}
+
+success() {
+ echo -e "${GREEN}[SUCCESS]${NC} $1"
+ log_to_file "SUCCESS" "$1"
+}
+
+debug() {
+ if [ "${DEBUG:-0}" = "1" ]; then
+ echo -e "${GRAY}[DEBUG]${NC} $1"
+ log_to_file "DEBUG" "$1"
+ fi
+}
+
+# Rotate logs older than 30 days
+rotate_logs() {
+ find "$LOGDIR" -name "*.log" -mtime +30 -delete 2>/dev/null
+}
+
+# Export functions
+export -f log_to_file log error warn success debug rotate_logs
diff --git a/lib/wireguard.sh b/lib/wireguard.sh
new file mode 100755
index 0000000..cf6e3e4
--- /dev/null
+++ b/lib/wireguard.sh
@@ -0,0 +1,193 @@
+#!/bin/bash
+
+# WireGuard common functions library
+# Version: 2.1.1
+# Author: houseassassin
+
+# Source common library
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+source "$SCRIPT_DIR/common.sh"
+
+WG_DIR="${WG_DIR:-/etc/wireguard}"
+WG_CONF="$WG_DIR/wg0.conf"
+
+# Get next available IP for WireGuard client
+get_next_wg_ip() {
+ if [ ! -f "$WG_CONF" ]; then
+ echo "10.0.0.2"
+ return
+ fi
+
+ LAST_IP=$(grep "AllowedIPs" "$WG_CONF" | grep -oE "10\.0\.0\.[0-9]+" | sort -t . -k 4 -n | tail -1)
+
+ if [ -z "$LAST_IP" ]; then
+ echo "10.0.0.2"
+ else
+ LAST_NUM=$(echo $LAST_IP | cut -d. -f4)
+ NEXT_NUM=$((LAST_NUM + 1))
+ echo "10.0.0.$NEXT_NUM"
+ fi
+}
+
+# Add WireGuard client
+add_wireguard_client() {
+ local client_name=$1
+
+ if [ -z "$client_name" ]; then
+ read -p "Введите имя клиента: " client_name
+ fi
+
+ if ! validate_name "$client_name"; then
+ return 1
+ fi
+
+ local CLIENT_DIR="$WG_DIR/clients/$client_name"
+
+ if [ -d "$CLIENT_DIR" ]; then
+ error "Клиент $client_name уже существует"
+ return 1
+ fi
+
+ mkdir -p "$CLIENT_DIR"
+ cd "$CLIENT_DIR"
+
+ # Generate keys
+ wg genkey | tee private.key | wg pubkey > public.key
+ chmod 600 private.key
+
+ CLIENT_PRIVATE_KEY=$(cat private.key)
+ CLIENT_PUBLIC_KEY=$(cat public.key)
+ SERVER_PUBLIC_KEY=$(cat $WG_DIR/server_public.key)
+ SERVER_IP=$(get_server_ip)
+ SERVER_PORT=$(grep ListenPort $WG_CONF | awk '{print $3}')
+ CLIENT_IP=$(get_next_wg_ip)
+
+ # Add peer to server config
+ cat >> $WG_CONF < client.conf < "$NGINX_DIR/sites-available/3xui" < "$CADDY_DIR/Caddyfile" < "$HAPROXY_DIR/haproxy.cfg" <> "$HAPROXY_DIR/haproxy.cfg"
+ done
+
+ haproxy -c -f "$HAPROXY_DIR/haproxy.cfg"
+ systemctl reload haproxy
+
+ success "HAProxy настроен для балансировки нагрузки"
+}
+
+# Configure Nginx + Caddy (hybrid)
+configure_hybrid_nginx_caddy() {
+ log "Настройка гибридной конфигурации Nginx + Caddy..."
+
+ echo ""
+ echo -e "${CYAN}Гибридная конфигурация:${NC}"
+ echo "• Nginx - обработка статики и кэширование"
+ echo "• Caddy - автоматический SSL и проксирование"
+ echo ""
+
+ read -p "Введите домен: " DOMAIN
+
+ # Nginx для статики
+ cat > "$NGINX_DIR/sites-available/hybrid" < "$CADDY_DIR/Caddyfile" <