Назад | Перейти на главную страницу

Плагин OpenVPN Python

У меня есть задача аутентификации пользователей OpenVPN с использованием базы данных, которая находится на удаленном сервере (а не на хосте с экземпляром сервера OpenVPN). И мы используем Python в качестве основного языка для всех наших инструментов.

Общим решением этой задачи может быть использование опции OpenVPN [b] auth-user-pass-verify [/ b] с указанием пути к моему скрипту python, который выполняет любую логику аутентификации, которую я хочу. Но выполнение моего скрипта python может занять некоторое время, например, удаленный сервер находится далеко или он может выполнять серьезные вычисления для аутентификации пользователя. Я думаю, что сценарий аутентификации может занять несколько секунд для выполнения. Как вы знаете, OpenVPN - это однопоточное приложение, которое использует неблокирующий ввод-вывод для обработки нескольких клиентов. Вот почему, когда OpenVPN выполняет какой-либо скрипт, он останавливает все операции ввода-вывода и ожидает завершения выполнения скрипта. В случае, если у нас есть скрипт аутентификации на протяжении длительного времени и большое количество пользователей, желающих авторизоваться, могут возникнуть проблемы с производительностью сети OpenVPN. Было бы здорово, если бы OpenVPN поддерживал отложенные операции авторизации. И у него есть такая поддержка, но только в системе плагинов. Его используют все современные плагины, например openvpn-radius. Но я не хочу писать всю логику на c / c ++ или иметь проблемы с созданием плагина OpenVPN на другом языке. Я думаю, что хорошим решением было бы написать плагин OpenVPN в cm, этот плагин будет использовать отложенный метод для аутентификации и вызывать поток или процесс, разделенный кодом Python. Этот код python может делать такие вещи, как - использовать обертки db, использовать библиотеку запросов и т. Д. И этот код python не остановит обработку OpenVPN других клиентов.

Я полагаю, что что-то подобное мы можем увидеть в OpenVPN Access Server, но я бы хотел использовать плохой OpenVPN-сервер. И сервер доступа не является открытым исходным кодом.

Я могу попробовать написать этот подключаемый модуль OpenVPN Python, но перед тем, как начать, я решил провести это исследование и спросить вас: есть ли в OpenVPN какие-то методы для вызова сценария аутентификации без остановки обработки других сетевых операций ввода-вывода? Я хотел бы услышать, что у нас есть такая возможность и нет необходимости писать такой плагин, но мне действительно не удалось найти что-то подобное.

Я создал плагин. Если вам это интересно, вы можете проверить https://github.com/greendev5/openvpn-python

P.S. Этот плагин немного бессмысленен, потому что вы можете использовать интерфейс управления OpenVPN, чтобы получать уведомления о соединениях и обрабатывать их, не блокируя основной поток OpenVPN. Может быть, кто-то подумает, что плагин проще, чем слушать интерфейс управления.

Посмотри на это. https://github.com/aborche/openvpn-plugin-python-proxy Это прокси для интерфейса плагина OpenVPN для python.