我在自己的专用云服务器(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
。那么我做错了什么?这甚至可能吗?
现在,配置文件位于根文件夹中。那可能是授权/访问问题?
答案 0 :(得分:0)
最有可能的情况是,sudo失败了,它试图要求输入密码并且你没有给它任何密码,或者PHP运行的用户不在sudo文件中而且它出错了。在这种情况下,羞于忽视stderr并且没有注意到它。
在任何情况下,如果php以用户身份运行" www-data",请将此添加到/ etc / sudoers
www-data ALL=(ALL) NOPASSWD: /usr/bin/openvpn path/to/my/file.ovpn
只需将用户运行的用户php替换为www-data(在linux中,最常见的是,用户称为www-data),/ usr / bin / openvpn用openvpn二进制文件所在的位置替换
和警告,这允许用户以root身份运行准确的命令/usr/bin/openvpn path/to/my/file.ovpn
而无需密码。我相信这会解决你的问题。