OpenVPN Python 插件

OpenVPN Python 插件

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

此任务的一般解决方案是使用 OpenVPN 选项 [b]auth-user-pass-verify[/b] 以及执行我想要的任何身份验证逻辑的 python 脚本的路径。但是执行我的 python 脚本可能需要一些时间,例如远程服务器距离很远,或者它可能会为用户身份验证进行大量计算。我认为身份验证脚本可能需要几秒钟才能执行。如您所知,OpenVPN 是一个单线程应用程序,它使用非阻塞 I/O 来处理多个客户端。这就是为什么当 OpenVPN 执行某些脚本时,它会停止所有 I/O 操作并等待脚本执行完成。如果我们有长时间的身份验证脚本和大量想要身份验证的用户,我们可能会遇到 OpenVPN 网络的性能问题。如果 OpenVPN 支持延迟身份验证操作,那就太好了。它确实有这种支持,但仅限于插件系统。所有现代插件都使用它,例如 openvpn-radius。但我不想用 c/c++ 编写所有逻辑,也不想用其他语言制作 OpenVPN 插件。我认为好的解决方案是在 cm 中编写 OpenVPN 插件,此插件将使用延迟方法进行身份验证并调用分离线程或进程的 Python 代码。此 Python 代码可以执行的操作包括 - 使用数据库包装器、使用请求库等。并且此 Python 代码不会阻止 OpenVPN 处理其他客户端。

我想我们可以在 OpenVPN Access Server 中看到类似的东西,但我更愿意使用较差的 OpenVPN 服务器。而且 Access Server 不是开源的。

我可以尝试编写这个 OpenVPN Python 插件,但在开始之前,我决定进行这项研究并问你:OpenVPN 是否有一些方法可以在不停止处理其他网络 I/O 的情况下调用 auth-script?我希望听到我们有这个选项,不需要编写这样的插件,但我真的找不到这样的东西。

答案1

我已经创建了插件。如果你感兴趣的话可以查看 https://github.com/greendev5/openvpn-python

PS 这个插件有点没用,因为你可以使用 OpenVPN 管理界面获取有关连接的通知并处理它们,而不会阻塞 OpenVPN 主线程。也许有人会认为插件比监听管理界面更简单。

答案2

看看这个。 https://github.com/aborche/openvpn-plugin-python-proxy 这是一个用于 OpenVPN 插件接口的 python 代理

相关内容