No description
  • Go 36.4%
  • JavaScript 31.8%
  • CSS 21.9%
  • HTML 9.9%
Find a file
Your Name 9246fb47fc ref
2026-05-26 04:23:39 +00:00
cmd/server ref 2026-05-25 10:21:14 +03:00
internal ref 2026-05-26 04:23:39 +00:00
web ref 2026-05-26 04:23:39 +00:00
go.mod ref 2026-05-25 10:21:14 +03:00
go.sum ref 2026-05-25 21:10:04 +00:00
README.md ref 2026-05-25 10:21:14 +03:00

VPN Manager

VPN Manager — веб-приложение для управления VPN конфигурациями (WireGuard, OpenVPN, IKEv2, 3Proxy, MTProto Proxy) с поддержкой Telegram бота.

Переписано на Go с дизайном в стиле PackerHub Dashboard.


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

vpn-manager/
├── cmd/
│   └── server/
│       └── main.go              # Точка входа
├── internal/
│   ├── api/
│   │   └── handlers.go          # HTTP handlers
│   ├── config/
│   │   └── config.go            # Env конфигурация
│   ├── db/
│   │   └── sqlite.go            # SQLite операции
│   ├── models/
│   │   └── models.go            # Структуры данных
│   └── bot/
│       ├── bot.go               # Telegram bot
│       └── handlers.go          # Handlers бота
├── web/
│   ├── static/
│   │   ├── css/styles.css       # Стили (Graphite glassmorphism)
│   │   └── js/app.js            # Frontend логика
│   └── templates/
│       └── index.html           # Главная страница
├── go.mod
└── README.md

🚀 Установка и запуск

1. Требования

  • Go 1.22+
  • SQLite3 (для CGO)

2. Клонирование и сборка

git clone <repo-url>
cd vpn-manager

# Установка зависимостей
go mod tidy

# Обычная сборка
go build -o server cmd/server/main.go

# Запуск
./server -addr :8080

3. Статическая сборка (Alpine Linux)

# На Alpine:
apk add --no-cache go gcc musl-dev sqlite-dev

# Сборка статического бинарника
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \
  go build -ldflags='-linkmode external -extldflags "-static"' \
  -o server-static cmd/server/main.go

# Проверка
file server-static
# ELF 64-bit LSB executable, x86-64, statically linked

ldd server-static
# not a dynamic executable

⚙️ Конфигурация

Все настройки через переменные окружения или флаги командной строки:

Переменные окружения

Переменная Описание По умолчанию
VPNMGR_ADDR Адрес и порт сервера :8080
VPNMGR_DB Путь к SQLite БД vpn_manager.db
VPNMGR_SECRET_KEY Секретный ключ для сессий change-me-in-production
VPNMGR_API_TOKEN Bearer токен для API (пусто)
VPNMGR_WEB_PATH Префикс пути (пусто)
VPNMGR_TELEGRAM_BOT_TOKEN Токен Telegram бота (из БД)

Пути к конфигам

Переменная Описание По умолчанию
VPNMGR_PATH_WIREGUARD Путь к .conf файлам /etc/wireguard/configs/
VPNMGR_PATH_OVPN Путь к .ovpn файлам /etc/openvpn/client/
VPNMGR_PATH_IKEV2 Папки IKEv2 /etc/ipsec.d/ikev2/
VPNMGR_PATH_PROXY Путь к прокси конфигам /etc/3proxy/configs/
VPNMGR_PATH_MTPROTO Путь к MTProto /etc/mtg/

Примеры запуска

# Простой запуск
./server

# Свой порт
./server -addr :8090

# Своя БД
./server -db /data/vpn.db

# С префиксом
./server -web-path /vpn

# Через env
export VPNMGR_ADDR=":8090"
export VPNMGR_DB="/data/vpn.db"
export VPNMGR_PATH_WIREGUARD="/opt/wireguard/configs/"
./server

🔑 Первый вход

  • URL: http://localhost:8080
  • Пароль по умолчанию: admin

Важно: Смените пароль после первого входа в админ-панели.


🔌 API Endpoints

Аутентификация

  • POST /api/login — Вход (JSON: {password: "..."})
  • POST /api/logout — Выход

Конфиги

  • GET /api/configs/{protocol} — Список конфигов (wireguard, ovpn, ikev2, proxy, mtproto)
  • GET /api/configs/{protocol}/{name} — Получить содержимое конфига
  • GET /api/download/{protocol}/{name} — Скачать файл
    • Для IKEv2: ?format=mobileconfig|p12|sswan

Теги

  • GET /api/tags/{protocol}/{name} — Получить теги
  • POST /api/tags/{protocol}/{name} — Добавить тег ({tag: "..."})
  • DELETE /api/tags/{protocol}/{name} — Удалить тег ({tag: "..."})

Инструкции

  • GET /api/instructions/{protocol} — Получить инструкцию
  • POST /api/instructions/{protocol} — Сохранить инструкцию ({content: "..."})

MTProto

  • GET /api/mtproto/generate-secret?domain=... — Сгенерировать секрет
  • POST /api/mtproto/{name} — Сохранить конфигурацию

Загрузка

  • POST /api/upload-image — Загрузить изображение (multipart/form-data)

Админ

  • POST /api/admin/password — Сменить пароль ({password: "..."})
  • GET /api/admin/telegram — Получить настройки Telegram
  • POST /api/admin/telegram — Сохранить настройки Telegram ({token, chat_id})
  • GET /api/admin/logs — Журнал входов

🤖 Telegram Bot

  1. Создайте бота через @BotFather
  2. Получите токен
  3. Введите токен и chat_id в админ-панели
  4. Бот запустится автоматически

Команды бота:

  • /help — Справка
  • /list — Список конфигов
  • /status — Статус системы

🎨 Темы

  • Темная тема (по умолчанию)
  • Светлая тема
  • Переключение через кнопку в хедере
  • Сохранение выбора в localStorage

📱 Поддерживаемые протоколы

Протокол Скачивание Просмотр QR-код Теги Инструкции
WireGuard .conf Да Да Да Да
OpenVPN .ovpn Да Нет Да Да
IKEv2 .mobileconfig, .p12, .conf Да Нет Да Да
3Proxy .txt Да Нет Да Да
MTProto JSON конфиг Да Нет Да Да

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

  • Пароли хешируются SHA-256
  • Bearer token авторизация
  • Логирование попыток входа
  • CORS защита
  • Sanitization имен файлов (защита от path traversal)

🐛 Траблшутинг

"binding to port failed"

# Проверьте что порт свободен
lsof -i :8080
# Запустите на другом порте
./server -addr :8090

"database is locked"

# Удалите старую БД если есть проблемы
rm vpn_manager.db
./server

CORS ошибки

  • Убедитесь что frontend и backend на одном домене
  • Проверьте заголовки через curl -I http://localhost:8080/api/configs/wireguard

📝 Лицензия

MIT