Предыстория
У вас конечно же нет VPN сервера ocserv, но возможно у какого-то абсолютно незнакомого человека он есть — с десятками, а может сотней пользователей. И этот незнакомый человек наверняка знает эту боль: каждый раз при добавлении нового клиента нужно вспоминать команды, лезть в документацию, не забыть обновить CRL, правильно экспортировать .p12. Когда этот гипотетический человек в очередной раз забыл флаг --legacy в openssl и получил нечитаемый файл сертификата — он вероятно захотел бы какое-нибудь автоматизированное решение.
Я написал набор bash скриптов для этого человека, чтобы автоматизировать рутину. Скрипт изначально создавался именно под связку ocserv + easy-rsa, поэтому глубоко интегрирован с её структурой PKI. Потом я решил привести код в порядок и выложить — вдруг найдутся ещё люди, которым он пригодится.
Что такое ocservice
Я смотрел существующие решения — нашёл несколько репозиториев на GitHub, но все они заброшены 2-4 года назад и работают только с логин/пароль авторизацией через ocpasswd. Сертификаты не поддерживает никто. Есть популярный проект с веб-интерфейсом, но это совсем другая история: Docker, отдельный порт, база данных, и всё равно только логин/пароль без easy-rsa. Если вам нужно просто управлять пользователями прямо на сервере без дополнительной инфраструктуры — это избыточно.
ocservice — это набор интерактивных bash скриптов для управления ocserv прямо из командной строки. Никакого Docker, никаких веб-серверов и баз данных — только bash и стандартные инструменты которые уже есть на сервере. Главная особенность — полная интеграция с easy-rsa: создание сертификатов, экспорт в .p12, отзыв и обновление CRL всё это делается в несколько нажатий.
Поддерживаются три режима авторизации:
cert— только сертификатыplain— только логин/парольboth— оба метода одновременно
Возможности
Главное меню
ocservice — главный скрипт с меню. При каждом открытии меню отображается актуальный статус сервера: аптайм, активные сессии, трафик RX/TX, ошибки авторизации, забаненные IP. Удобно — зашёл в меню и сразу видишь что происходит на сервере, не нужно отдельно запускать occtl show status.

Создание пользователей с сертификатами
Скрипт gen-client спрашивает имя пользователя, срок действия сертификата и лимит одновременных подключений. Затем генерирует клиентский сертификат через easy-rsa, экспортирует его в .p12 файл с паролем и записывает результат в лог.

Создание пользователей с логином и паролем
Скрипт gen-login создаёт пользователя через ocpasswd. Доступен только если включена парольная авторизация.
Центр управления пользователями
user-center показывает таблицу всех пользователей с онлайн статусом, датами сертификата, бан-поинтами и лимитом подключений. Для каждого пользователя можно посмотреть детали подключения, отредактировать config-per-user, кикнуть, сбросить бан-поинты или удалить.


Установка
Для установки достаточно четырех команд:
git clone https://github.com/Ilyntiy/ocservice.git cd ocservice chmod +x install.sh sudo ./install.sh
Установщик install.sh делает всё сам:
Парсит пути из вашего
ocserv.conf—ocpasswd,config-per-userАвтоматически определяет URL камуфляжа если он включён
Задаёт несколько вопросов: префикс установки ocserv, режим авторизации, адрес сервера
Генерирует
ocservice.confс вашими настройкамиКопирует скрипты в
~/bin/Создаёт
/etc/sudoers.d/ocserviceс минимально необходимыми правами
Технические детали
Конфигурация
Все настройки хранятся в одном файле ocservice.conf рядом со скриптами. Скрипты читают его через source при каждом запуске. Это позволяет использовать инструмент с любой раскладкой файлов — ocserv в /opt, в домашнем каталоге или в любом другом месте.
Права и sudo
ocserv устанавливается из исходников от root, поэтому его файлы принадлежат root. Вместо того чтобы запускать весь инструмент через sudo, install.sh создаёт /etc/sudoers.d/ocservice с точечными правами только на нужные команды: occtl, ocpasswd, journalctl, systemctl restart/reload ocserv.
Камуфляж
ocserv поддерживает режим камуфляжа — сервер выглядит как обычный веб-сайт и принимает VPN подключения только если клиент передаёт секретный токен в URL. install.sh автоматически читает camouflage_secret из ocserv.conf и подставляет его в URL шлюза который показывается новым пользователям.
Сертификаты и CRL
При удалении пользователя с сертификатом скрипт отзывает сертификат через easyrsa revoke и обновляет CRL. ocserv читает CRL напрямую из easy-rsa/pki/crl.pem — копировать файл никуда не нужно, достаточно прописать правильный путь в ocserv.conf.
Требования
ocserv собранный из исходников
easy-rsa 3.x (для сертификатной авторизации)
openssl
use-occtl = trueвocserv.conf
Планы
База имён пользователей — имя при создании будет выбираться из заготовленного списка, а не вводиться вручную
Резервное копирование — отдельный скрипт и пункт меню для бэкапа конфигов, сертификатов и базы пользователей
Продление сертификата — без удаления и пересоздания, прямо из User Management Center
Уведомления об истечении сертификатов — предупреждение когда до конца срока остаётся N дней
Интеграция с Telegram ботом — управление сервером, выпуск и отзыв сертификатов прямо из Telegram
Ссылки
Скрипт заточен под конкретный стек: ocserv из исходников + easy-rsa. Если у вас похожая конфигурация — попробуйте, буду рад отзывам. Если что-то не работает или не хватает какой-то функции — пишите в issues.
