Мощное приложение на Ruby для управления OpenConnect VPN с расширенными функциями безопасности и мониторинга.
- 🔒 Безопасное хранение паролей с AES-256-GCM шифрованием
- 🚀 Фоновый режим работы - VPN не занимает терминал
- 📊 Детальная статистика использования и метрики
- 🔄 Автоматическое переподключение при потере связи
- 📝 Структурированное логирование всех операций
- 🎯 Простой CLI интерфейс для управления
- ✅ Полное покрытие тестами всех компонентов
- Ruby 2.7 или новее
- OpenConnect VPN клиент
- Права sudo для запуска OpenConnect
Ubuntu/Debian:
sudo apt-get install openconnectArch Linux:
sudo pacman -S openconnectmacOS:
brew install openconnect- Клонируйте репозиторий:
git clone https://github.com/usov-ap/OpenConnectVPNmanager.git
cd OpenConnectVPNmanager- Установите зависимости:
bundle install- Сделайте исполняемым файл vpnctl (если необходимо):
chmod +x bin/vpnctl- Опционально, добавьте в 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.
./bin/vpnctl startС автоматическим переподключением:
./bin/vpnctl start --auto-reconnect
# или
./bin/vpnctl start -r./bin/vpnctl stop./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.rblib/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
Для корректной работы 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 - Статистика сохраняется между сессиями
При возникновении проблем:
- Проверьте логи:
./bin/vpnctl logs -n 100- Убедитесь, что OpenConnect установлен:
which openconnect- Проверьте права доступа:
ls -la ~/.vpn_manager/- Протестируйте соединение вручную:
sudo openconnect your.vpn.server.comMIT License
Приветствуются pull requests. Для крупных изменений сначала откройте issue для обсуждения.
Перед отправкой PR убедитесь, что:
- Все тесты проходят
- Код соответствует стилю проекта
- Добавлены тесты для новой функциональности
При возникновении вопросов или проблем создавайте issue на GitHub.
Примечание: Для работы приложения требуются права sudo, так как OpenConnect требует привилегированного доступа для создания сетевых интерфейсов.