Ответы:
network-manager-openvpn
не предоставляет такой функциональности, вы должны использовать openvpn
напрямую.
Перейдите --script-security 2 --up /path/to/your/script
к нему при подключении. Если вы используете файл конфигурации, расположенный по адресу /etc/openvpn/
, добавьте следующие строки в ваш файл конфигурации:
script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh
Из справочной страницы OpenVPN :
- уровень безопасности сценария [метод] Эта директива предлагает контроль на уровне политики за использованием OpenVPN внешних программ и скриптов. Более низкие значения больше ограничительные, более высокие значения более допустимы. Настройки для уровень: 0 - строго не вызывать внешние программы. 1 - (по умолчанию) вызывать только встроенные исполняемые файлы, такие как ifconfig, IP, маршрут или нетш. 2 - Разрешить вызов встроенных исполняемых файлов и пользовательских скрипты. 3 - Разрешить передачу паролей в сценарии через среду переменные (потенциально небезопасные). --up cmd Команда оболочки для запуска после успешного открытия устройства TUN / TAP (предварительно - изменение UID пользователя). Скрипт up полезен для определения Команды маршрутизации, которые маршрутизируют IP-трафик, предназначенный для частного подсети, которые существуют на другом конце соединения VPN в туннель Сценарий Порядок исполнения --up Выполняется после привязки сокета TCP / UDP и открытия TUN / TAP. --down Выполняется после закрытия TCP / UDP и TUN / TAP.
Есть еще события для выполнения скрипта, их можно найти на странице руководства .
Создайте /etc/openvpn/up.sh
и дайте ему разрешения на выполнение (скажем, 755 или 700). Пример содержимого для добавления адреса IPv6 и маршрута (показан в образовательных целях, не копируйте его напрямую):
#!/bin/sh
# add an IPv6 address to device $dev (environment variable)
ip -6 addr add 2001:db8::1:2/112 dev $dev
# and the IPv6 route for this net using gateway 2001:db8::1
ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev
Обратите внимание, что этот up
скрипт запускается от имени пользователя root. Если вы не указали параметр a User
и Group
, OpenVPN также будет запускать сценарии, такие down
как root.
openvpn
непосредственного использования . При настройке сервера я заметил, что OpenVPN попытается переподключиться, когда сервер вышел из строя. Не уверен, что OpenVPN продолжает попытки, когда ваш сетевой интерфейс выходит из строя.
На вопрос: «Как я могу связать скрипт с OpenVPN, чтобы он работал при успешном подключении VPN?» Хочу отметить, что Лекенштейн дал отличный ответ . Но в то время, когда его ответ был составлен, ему не хватало некоторой ясности относительно того, как должны предоставляться аргументы командной строки openvpn для запуска openvpn на машине с Ubuntu, особенно для того, чтобы он работал так же после перезагрузок.
Естественно, можно запустить openvpn из командной строки с любыми доступными легальными опциями. Но на машине с Ubuntu, если кто-то хочет запустить openvpn с теми же аргументами командной строки после перезагрузки, ему следует рассмотреть возможность редактирования файла /etc/default/openvpn
. Изучите следующие строки:
# Optional arguments to openvpn's command line
OPTARGS=""
От человека странице сообщества OpenVPN на--script-security
- уровень безопасности сценария Эта директива предлагает контроль на уровне политики над использованием OpenVPN внешних программы и скрипты. Более низкие значения являются более строгими, более высокими значения более допустимы. Настройки для уровня: 0 - строго не вызывать внешние программы. 1 - (по умолчанию) вызывать только встроенные исполняемые файлы, такие как ifconfig, ip, route, или нетш. 2 - Разрешить вызов встроенных исполняемых файлов и пользовательских скриптов. 3 - Разрешить передачу паролей в сценарии через переменные среды (потенциально небезопасно). Выпуски OpenVPN до v2.3 также поддерживали флаг метода, который указывал, как OpenVPN должен вызывать внешние команды и скрипты. Это может быть либо execve или система. Начиная с OpenVPN v2.3 этот флаг больше не принимается. В большинстве * никс В средах подход execve () был использован без каких-либо проблем. Некоторые директивы, такие как --up, позволяют передавать параметры во внешний скрипт. В этих случаях убедитесь, что имя скрипта не содержит пробелов или анализатор конфигурации захлебнется, потому что не может определить, где находится скрипт имя заканчивается и начинаются параметры скрипта.
В сочетании с сокращенным разделом --up
--up cmd Запустите команду cmd после успешного открытия устройства TUN / TAP (изменение UID до пользователя). cmd состоит из пути к сценарию (или исполняемой программе), по желанию по аргументам. Путь и аргументы могут быть в одинарных или двойных кавычках и / или экранируется с помощью обратной косой черты и должен быть разделен одним или несколькими пробелами.
На моей машине с openpvn server.conf в моем /etc/default/openvpn
файле есть следующие строки :
OPTARGS="
--script-security 2
--up /etc/openvpn/nat.sh
"
Кстати, nat.sh устанавливает трансляцию сетевых адресов для маршрутизации трафика частной сети от клиентов openvpn к общедоступному Интернету; что хорошо, когда человек не доверяет общедоступной точке доступа WIFI.
Помимо возможности перезагрузки, как и ожидалось, после перезагрузки, когда /etc/openvpn/[client or server].conf
и /etc/default/openvpn
файлы правильно настроены, openvpn можно запустить или остановить с помощью:
sudo service openvpn start
sudo service openvpn stop
Другие полезные опции доступны для service openvpn
включения cond-restart,force-reload,reload, restart,soft-restart, start, status, stop
.
Поскольку это довольно старая тема, я не уверен, что все еще интересен. Если вы все еще хотите использовать NetworkManager для подключения к VPN, вы можете добавить простое правило udev:
KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"
Это должно запустить любой сценарий после создания VPN.
Я наткнулся на ответ в своем исследовании, чтобы решить эту проблему, и я обнаружил, что лучшее решение (с использованием сервера openvpn) заключается в следующем:
Создайте скрипт для выполнения:
# nano /etc/openvpn/up.sh
<file:contents>
#!/bin/sh
# export >> /var/log/openvpn/openvpn-up.log
D=`date "+%Y-%m-%d %H:%M"`
echo "[$D] ($local_port_1:$proto_1) $X509_0_CN: $trusted_ip => $ifconfig_pool_remote_ip" >> /var/log/openvpn/openvpn-up.log
</file>
Добавьте следующие строки в конфигурацию openvpn (обычно /etc/openvpn/server.conf
). В ответе выше он использовался вверх и вниз, которые используются при запуске (перезапуске) сервера. Директива client-connect (и client-disconnect) используется, когда клиент подключается (отключается).
# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>