Запуск скрипта из OpenVPN 19.10.2011

Если вы пользуетесь OpenVPN GUI - эта заметка не для вас. Если же вы пользуетесь демоном - вот тут вам может и пригодиться этот поток сознания.

Итак, нам нужно запустить скрипт (в моем случае - монтирующий сетевые диски) после того, как OpenVPN подключился к сети.

Первым делом, создаем в конфиге строчку

script-security 2

Эта директива разрешает запуск внешних скриптов.

Сам скрипт можно запустить при помощи одной из двух директив конфига

# запуск сразу после подключения интерфейса
up /usr/local/myscript1

# запуск после установки всех маршрутов
route-up /usr/local/myscript2

Один важнейший нюанс. Если ваш скрипт использует созданное сетевое подключение (а в моем случае было именно так) - подключается к сетевым дискам, чего-нибудь пингует или скачивает, то работать он не будет, т.к. на момент выполнения скриптов OpenVPN трафик по созданному подключению еще заблокирован.

Проблема решается достаточно легко.

От момента выполнения route-up (все маршруты созданы) до разрешения трафика задержка составляет примерно 0.5 секунды, что достаточно немного.

Итак, в нашем исполняемом скрипте (пусть для примера это будет /usr/local/myscript) мы либо увеличиваем таймауты на подключение (возьмем с запасом - секунд до 10), либо в начале прописываем sleep 5 (пауза на 5 секунд, время подбирается экспериментально).

Затем создаем второй скрипт - скрипт запуска /usr/local/myscript.run

#!/bin/bash
; Запускаем скрипт в новом потоке
/usr/local/myscript &

и как раз его прописываем в OpenVPN.

Таким образом, наш основной скрипт запустится в отдельном потоке, управление вернется к OpenVPN, подключение полностью установится, к этому моменту закончится sleep в основном скрипте и все.

Конечно, решение малость топорное, но у меня работает "на ура". Приятного использования.