Скрипте којима треба 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 опцију покретања и подешавање акредитива које она очекује. Наредба покренута у пријављеној десктоп сесији и сервис који се покреће са машином не деле контекст. Не претпостављајте да ће скрипта која ради док сте пријављени радити и при подизању. Тестирајте пут покретања засебно, са истим роком и евидентирањем.

Повезани чланци