Skip to content

usov-ap/OpenConnectVPNmanager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenConnect VPN Manager

Мощное приложение на Ruby для управления OpenConnect VPN с расширенными функциями безопасности и мониторинга.

✨ Основные возможности

  • 🔒 Безопасное хранение паролей с AES-256-GCM шифрованием
  • 🚀 Фоновый режим работы - VPN не занимает терминал
  • 📊 Детальная статистика использования и метрики
  • 🔄 Автоматическое переподключение при потере связи
  • 📝 Структурированное логирование всех операций
  • 🎯 Простой CLI интерфейс для управления
  • Полное покрытие тестами всех компонентов

📋 Требования

  • Ruby 2.7 или новее
  • OpenConnect VPN клиент
  • Права sudo для запуска OpenConnect

Установка OpenConnect

Ubuntu/Debian:

sudo apt-get install openconnect

Arch Linux:

sudo pacman -S openconnect

macOS:

brew install openconnect

🚀 Установка

  1. Клонируйте репозиторий:
git clone https://github.com/usov-ap/OpenConnectVPNmanager.git
cd OpenConnectVPNmanager
  1. Установите зависимости:
bundle install
  1. Сделайте исполняемым файл vpnctl (если необходимо):
chmod +x bin/vpnctl
  1. Опционально, добавьте в PATH:
echo 'export PATH="$PATH:/path/to/OpenConnectVPNmanager/bin"' >> ~/.bashrc
source ~/.bashrc

📖 Использование

Первоначальная настройка

Перед первым использованием необходимо настроить учетные данные:

./bin/vpnctl setup

Вам будет предложено ввести:

  • Адрес VPN сервера
  • Имя пользователя
  • Пароль VPN
  • Мастер-пароль для шифрования (минимум 8 символов)

Все данные будут зашифрованы с помощью AES-256-GCM и сохранены в ~/.vpn_manager/credentials.enc.

Основные команды

Запуск VPN

./bin/vpnctl start

С автоматическим переподключением:

./bin/vpnctl start --auto-reconnect
# или
./bin/vpnctl start -r

Остановка VPN

./bin/vpnctl stop

Перезапуск VPN

./bin/vpnctl restart

С автоматическим переподключением:

./bin/vpnctl restart -r

Проверка статуса

./bin/vpnctl status

Пример вывода:

=== Статус VPN ===
Состояние: ПОДКЛЮЧЕН
PID: 12345
Время работы: 2ч 15м 30с

Просмотр статистики

./bin/vpnctl stats

Пример вывода:

=== VPN Статистика ===

Всего подключений: 42
Успешных: 40
Неудачных: 2
Переподключений: 3

Общее время работы: 5д 12ч 30м 15с
Текущая сессия: 2ч 15м 30с

Последнее подключение: 2025-10-03 09:30:00
Последнее отключение: 2025-10-03 07:15:00

Данные отправлено: 1.5 GB
Данные получено: 3.2 GB
Всего: 4.7 GB

Успешность: 95.24%

Просмотр логов

./bin/vpnctl logs

С указанием количества строк:

./bin/vpnctl logs -n 100

Сброс статистики

./bin/vpnctl reset_stats

Просмотр версии

./bin/vpnctl version

Справка

./bin/vpnctl help

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

Шифрование паролей

  • Используется AES-256-GCM с аутентифицированным шифрованием
  • Мастер-ключ извлекается из пароля с помощью PBKDF2 (100,000 итераций)
  • Каждое шифрование использует уникальные соль и вектор инициализации
  • Файл с учетными данными имеет права доступа 0600

Хранение данных

Все данные приложения хранятся в ~/.vpn_manager/:

  • credentials.enc - зашифрованные учетные данные (0600)
  • stats.json - статистика использования (0600)
  • vpn.log - файл логов
  • vpn.pid - PID файл активного соединения

🧪 Тестирование

Запуск всех тестов:

bundle exec rspec

С отчетом о покрытии:

bundle exec rspec --format documentation

Проверка конкретного модуля:

bundle exec rspec spec/vpn_manager/crypto_spec.rb

📊 Архитектура

lib/vpn_manager/
├── crypto.rb       # Модуль шифрования (AES-256-GCM)
├── connection.rb   # Управление VPN соединением
├── logger.rb       # Структурированное логирование
├── statistics.rb   # Сбор и анализ метрик
└── cli.rb          # CLI интерфейс (Thor)

spec/vpn_manager/   # Полный набор тестов
├── crypto_spec.rb
├── connection_spec.rb
├── logger_spec.rb
└── statistics_spec.rb

🔧 Конфигурация

Настройка sudo без пароля

Для корректной работы VPN в фоновом режиме необходимо настроить sudo для OpenConnect без запроса пароля:

echo "$USER ALL=(ALL) NOPASSWD: /usr/bin/openconnect" | sudo tee /etc/sudoers.d/openconnect
sudo chmod 0440 /etc/sudoers.d/openconnect

Автоматическое переподключение

При использовании флага --auto-reconnect приложение будет:

  • Проверять состояние соединения каждые 10 секунд
  • Автоматически переподключаться при потере связи
  • Делать до 5 попыток с задержкой 5 секунд между попытками
  • Логировать все попытки переподключения

Ротация логов

Логи автоматически ротируются:

  • Максимум 10 файлов
  • Размер каждого файла до 1MB
  • Старые файлы автоматически удаляются

Мониторинг трафика

Статистика передачи данных считывается в реальном времени из системных интерфейсов:

  • Данные получаются из /sys/class/net/tun*/statistics/
  • Счетчики обновляются при каждом вызове status или stats
  • Статистика сохраняется между сессиями

🐛 Отладка

При возникновении проблем:

  1. Проверьте логи:
./bin/vpnctl logs -n 100
  1. Убедитесь, что OpenConnect установлен:
which openconnect
  1. Проверьте права доступа:
ls -la ~/.vpn_manager/
  1. Протестируйте соединение вручную:
sudo openconnect your.vpn.server.com

📝 Лицензия

MIT License

🤝 Вклад в проект

Приветствуются pull requests. Для крупных изменений сначала откройте issue для обсуждения.

Перед отправкой PR убедитесь, что:

  • Все тесты проходят
  • Код соответствует стилю проекта
  • Добавлены тесты для новой функциональности

📧 Контакты

При возникновении вопросов или проблем создавайте issue на GitHub.


Примечание: Для работы приложения требуются права sudo, так как OpenConnect требует привилегированного доступа для создания сетевых интерфейсов.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages