OpenVPN的Python插件

我有一个使用位于远程服务器(不是OpenVPN服务器实例的主机)上的数据库进行身份validation的OpenVPN用户的任务。 我们使用Python作为我们所有工具的主要语言。

这个任务的一般解决scheme可以使用OpenVPN选项[b] auth-user-pass-verify [/ b],并带有我的python脚本的path来执行我想要的任何validation逻辑。 但是我的python脚本的执行可能需要一些时间,例如远程服务器很远,或者可能会严重计算用户身份validation。 我认为auth脚本可能需要几秒钟才能执行。 如您所知,OpenVPN是一个单线程应用程序,它使用非阻塞I / O来处理多个客户端。 这就是为什么当OpenVPN执行某个脚本时,它会停止所有的I / O操作并等待脚本执行完成。 如果我们有很长时间的validation脚本和大量的用户想要validation,我们可能会在OpenVPNnetworking中遇到性能问题。 如果OpenVPN支持延期授权操作,这将是一件好事。 它确实有这个支持,但只在插件系统。 所有现代的插件都使用它,例如openvpn-radius。 但是我不想在c / c ++中编写所有的逻辑,或者在使用其他语言编写OpenVPN插件时感到麻烦。 我认为好的解决scheme是用cm写这个OpenVPN插件,这个插件将使用延迟方法进行auth并调用python代码分离线程或进程。 这个python代码可以做些事情 – 使用db包装器,使用请求库等等。这个python代码不会阻止OpenVPN处理其他客户端。

我想我们可以在OpenVPN接入服务器中看到这样的事情,但是我想用劣质的OpenVPN服务器。 而Access Server不是开源的。

我可以尝试写这个OpenVPN的Python插件,但在开始之前,我决定做这个研究,问你:OpenVPN有一些方法来调用auth脚本而不停止处理其他networkingI / O? 我想听说我们有这个选项,不需要写这样的插件,但我真的无法find这样的东西。

我创build了插件。 如果你对它感兴趣,你可以查看https://github.com/greendev5/openvpn-python

PS这个插件有点没有意义,因为你可以使用OpenVPNpipe理接口来获取连接的通知,并且在不阻塞OpenVPN主线程的情况下处理它们。 也许有人会认为插件比听pipe理界面更容易。