Select 通过 php 脚本的 OpenVPN 配置文件

Select OpenVPN configuration file via php script

我在自己的专用云服务器 (ubuntu) 上使用 openvpn。因此,我通过执行 this 教程中编写的所有步骤创建了一个界面。当我按照教程中的描述使用终端时,一切正常。此外,当我尝试通过 curl curl_setopt($ch, CURLOPT_INTERFACE, "tun0"); 连接到界面时,它工作正常。但是因此我必须在 运行 php 脚本之前在终端中执行以下语句:

openvpn "path/to/my/file.ovpn"

当我想更改 IP 地址时,我必须再次执行上面的语句,但要使用另一个 file.ovpn

但我想在我的 php 脚本中更改 file.ovpn,例如:

exec('sudo openvpn path/to/my/file.ovpn');

但这不起作用。我总是收到错误 curl error: Could not resolve host: tun0。那我做错了什么?这可能吗?

目前配置文件位于根文件夹中。所以可能是授权/访问问题?

最有可能的是,sudo 失败了,它试图要求输入密码,但您没有给它任何密码,或者 PHP 运行s 的用户不在 sudo 文件中,并且它出错了。在这种情况下,你会因为忽视 stderr 而没有注意到它而感到羞耻。

无论如何,如果 php 运行 是用户 "www-data",请将其添加到 /etc/sudoers

www-data ALL=(ALL) NOPASSWD: /usr/bin/openvpn path/to/my/file.ovpn

只需将 www-data 替换为任何用户 php 运行s 作为(在 linux 中,最常见的是一个名为 www-data 的用户)和 /usr/bin/openvpn 无论您的 openvpn 二进制文件位于何处 并警告,这允许用户 运行 确切的命令 /usr/bin/openvpn path/to/my/file.ovpn 作为 root 而无需密码。我相信这可以解决您的问题。