Скрипти, яким потрібен працюючий VPN перед резервним копіюванням, часто запускають openvpn напряму. Це відкидає профіль, DNS і обробку маршрутів, якими Tunnelblick уже керує. Підтримуваний шлях — власний інтерфейс AppleScript самого Tunnelblick, що приймає запити connect, state і disconnect для іменованої конфігурації. Використовуйте його й залишайте застосунок відповідальним.

Говоріть із застосунком, а не з openvpn

Tunnelblick володіє профілем OpenVPN, вибором рушія, скриптами та інтеграцією DNS і маршрутів. Окремий бінарник openvpn — інша схема запуску, а не короткий шлях до того самого з’єднання.

Виклик скриптового інтерфейсу застосунку зберігає це володіння незмінним і робить кожен запит придатним для перевірки.

Приклади тут припускають, що Tunnelblick розташований у Applications, робоча конфігурація називається HQ, а команди виконуються в сеансі користувача Mac, який увійшов у систему. Замініть назву на точну конфігурацію, яка у вас є.

Запустіть рівно один іменований профіль

Запит connect називає конфігурацію. Це не запит на підключення до того, що було вибрано останнім.

Виконайте його в сеансі користувача, якому належить конфігурація:

osascript -e 'tell application "/Applications/Tunnelblick.app" to connect "HQ"'

Пройдіть звичайні запити входу. macOS може запитати, чи дозволено застосунку, що викликає, керувати Tunnelblick; перевірте, який застосунок і яка мета, перш ніж схвалити. Автоматизація, яка проскакує цей діалог, позбавляє його сенсу.

Запит connect повертається до того, як тунель піднято

Настанова зі скриптів Tunnelblick однозначна: connect повертається до завершення з’єднання. Нульовий код виходу означає, що запит прийнято, а не що трафік іде.

Читайте стан окремо:

osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"'

CONNECTED — це результат стану з’єднання. Він усе ще не доводить, що приватний ресурс, потрібний вашій задачі, доступний, тому перевірте це окремо перед початком залежної роботи.

Інші елементи керування скриптового інтерфейсу охоплюють ширші дії та не потрібні, коли змінюється лише один профіль.

Чекайте з граничним терміном, потім зазнайте невдачі

Нескінченне опитування — це те, через що скрипт висить усю ніч і блокує наступний запуск. Дайте очікуванню граничний термін, короткий інтервал і явний результат невдачі. Вважайте будь-який стан, крім CONNECTED, неготовим, зокрема перехідні. Записуйте останній побачений стан, щоб невдача пояснювала сама себе.

Обмежений цикл виглядає так:

for i in $(seq 1 30); do
  state=$(osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"')
  if [ "$state" = "CONNECTED" ]; then exit 0; fi
  sleep 1
done
echo "tunnel did not reach CONNECTED" >&2
exit 1

Тридцять секунд — це приклад, а не універсальний тайм-аут. Обирайте граничний термін за шляхом автентифікації, який профіль справді використовує, і тримайте його в записі робочого процесу.

Перевірте стан і відключіть за назвою

Щоб зупинити той самий профіль, викличте disconnect з тією самою назвою. Це тримає запит вузьким і не зачіпає інші конфігурації.

osascript -e 'tell application "/Applications/Tunnelblick.app" to disconnect "HQ"'

Тримайте назву профілю й контролер разом у записі робочого процесу, разом з очікуваними перевірками автентифікації та завершення. Саме цей запис робить команду придатною для перевірки й через пів року.

Поведінка під час запуску разом із комп’ютером — інший режим. Використовуйте задокументовану опцію запуску Tunnelblick і налаштування облікових даних, яке вона передбачає. Команда, виконана в сеансі робочого столу, куди ви увійшли, і служба, що стартує разом із машиною, не поділяють контекст. Не припускайте, що скрипт, який працює під час вашого входу, працюватиме під час завантаження. Перевіряйте шлях запуску окремо, з тим самим граничним терміном і журналюванням.

Схожі статті