У меня есть задача об аутентификации пользовательская база данных использования OpenVPN, которая расположена на удаленном сервере (не хост с экземпляром сервера OpenVPN). И мы используем Python в качестве основного языка для всех наших инструментов.
Общим решением для этой задачи может быть использование опции [b] OpenVPN auth-user-pass-verify [/b] с путем к моему сценарию Python, которые выполняют любую логику аутентификации, которую я хочу. Но выполнение моего сценария Python может занять время, например, удаленный сервер далеко, или это может сделать серьезные вычисления для аутентификации пользователя. Я думаю, что подлинный сценарий может занять несколько секунд для выполнения. Как Вы знаете, OpenVPN является единственным приложением потока, и он использует не блокирующийся ввод-вывод для обработки нескольких клиентов. Именно поэтому, когда OpenVPN выполняют некоторый сценарий, он останавливает все операции ввода-вывода и ожидает конца выполнения сценария. В случае, если у нас есть долговременный подлинный сценарий и большое количество пользователей, кто хочет автору, мы можем испытать затруднения производительности из-за сети OpenVPN. Было бы замечательно, если бы OpenVPN начал задержанные подлинные операции поддержки. И это действительно имеет эту поддержку, но только в сменной системе. Все современные плагины используют его, например, openvpn-радиус. Но я не хочу, пишут всю логику в c/c ++ или имеют стычку с созданием плагина OpenVPN на другом языке. Я думаю, что хорошее решение было бы записью плагин OpenVPN в cm, этот плагин будет использовать задержанный метод для автора и звонить, код Python разделил поток или процесс. Этот код Python может сделать вещи как - обертки дб использования, пользоваться библиотекой запросов и т.д. И этот код Python не остановит обработку OpenVPN других клиентов.
Я предполагаю что-то вроде этого, что мы видим в Сервере доступа OpenVPN, но я хотел бы использовать плохой сервер OpenVPN. И Сервер доступа не является открытым исходным кодом.
Я могу попытаться записать этот Плагин OpenVPN Python, но прежде, чем запуститься я решил провести это исследование и спросить Вас: OpenVPN имеет некоторые методы для вызова подлинного сценария, не останавливая обработку другой сети I/O? Я хотел бы услышать, что у нас есть эта опция и никакая потребность записать такой плагин, но я действительно не смог найти что-то вроде этого.
Я создал плагин. Если вам это интересно, вы можете проверить https://github.com/greendev5/openvpn-python
P.S. Этот плагин немного бессмысленен, потому что вы можете использовать интерфейс управления OpenVPN, чтобы получать уведомления о соединениях и обрабатывать их, не блокируя основной поток OpenVPN. Может быть, кто-то подумает, что плагин проще, чем прослушивание интерфейса управления.
Посмотри вот это. https://github.com/aborche/openvpn-plugin-python-proxy Это прокси для интерфейса плагина OpenVPN с питоном