Я использую openvpn на своем собственном выделенном облачном сервере (Ubuntu). Для этого я создал интерфейс, выполнив все шаги, написанные в этот руководство. Все работает, когда я использую терминал, как описано в руководстве. Также, когда я пытаюсь подключиться к интерфейсу через curl curl_setopt($ch, CURLOPT_INTERFACE, "tun0");
это работает отлично. Но для этого я должен выполнить следующую инструкцию в терминале, прежде чем запускать скрипт php:
openvpn "path/to/my/file.ovpn"
Когда я хочу изменить IP-адрес, я должен выполнить вышеупомянутое утверждение, но с другим file.ovpn
,
Но я хочу изменить file.ovpn
в моем PHP-скрипте, как:
exec('sudo openvpn path/to/my/file.ovpn');
Но это не работает. Я всегда получаю ошибку curl error: Could not resolve host: tun0
, Так что я делаю не так? Это вообще возможно?
На данный момент файлы конфигурации находятся в корневой папке. Так может быть, это проблема авторизации / доступа?
Скорее всего, sudo завершается неудачно, он пытается запросить пароль, а вы его не предоставляете, ИЛИ пользователя, с которым работает PHP, нет в файле sudo, и он выдает ошибку. в этом случае позор вам за то, что вы игнорировали stderr и не замечали этого.
в любом случае, если php запускается как пользователь «www-data», добавьте это в / etc / sudoers
www-data ALL=(ALL) NOPASSWD: /usr/bin/openvpn path/to/my/file.ovpn
просто замените www-data тем пользователем, который запускает php (в linux, чаще всего это пользователь www-data), и / usr / bin / openvpn, где бы ни находился ваш бинарный файл openvpn
и предупреждение, это позволяет пользователю выполнить точную команду /usr/bin/openvpn path/to/my/file.ovpn
как root без пароля. который, я верю, решит вашу проблему здесь.
Других решений пока нет …