Scripts die vóór een back-up een actieve VPN nodig hebben, starten vaak openvpn rechtstreeks. Daarmee laten ze het profiel, DNS en de routeafhandeling los die Tunnelblick al beheert. De ondersteunde weg is Tunnelblicks eigen AppleScript-interface, die connect-, state- en disconnect-verzoeken voor een benoemde configuratie accepteert. Gebruik die, en laat de app de leiding houden.

Praat met de app, niet met openvpn

Tunnelblick bezit het OpenVPN-profiel, de keuze van de engine, de scripts en de DNS- en route-integratie. Een aparte openvpn-binary is een andere startopstelling, geen snelkoppeling naar dezelfde verbinding.

De scriptinterface van de app aanroepen houdt dat eigenaarschap intact en maakt elk verzoek controleerbaar.

De voorbeelden hier gaan ervan uit dat Tunnelblick in Applications staat, dat een werkende configuratie HQ heet en dat de opdrachten in de sessie van de ingelogde Mac-gebruiker draaien. Wijzig de naam in de exacte configuratie die u hebt.

Start precies één benoemd profiel

Een connect-verzoek noemt de configuratie. Het is geen verzoek om te verbinden met wat het laatst was geselecteerd.

Voer het uit in de gebruikerssessie die de configuratie bezit:

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

Doorloop de gebruikelijke inlogvragen. macOS kan vragen of de aanroepende app Tunnelblick mag besturen; controleer welke app en welk doel voordat u goedkeurt. Automatisering die door dat venster heen klikt, haalt de zin van het venster weg.

Een connect-verzoek keert terug voordat de tunnel staat

De scriptgids van Tunnelblick is duidelijk: connect keert terug voordat de verbinding klaar is. Een exitstatus van nul betekent dat het verzoek is geaccepteerd, niet dat er verkeer stroomt.

Lees de status apart uit:

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

CONNECTED is een resultaat van verbindingsstatus. Het bewijst nog niet dat de privébron die uw taak nodig heeft bereikbaar is, dus controleer dat apart voordat u afhankelijk werk start.

Andere bedieningselementen in de scriptinterface dekken bredere acties en zijn niet nodig wanneer slechts één profiel verandert.

Wacht met een deadline en faal dan

Eindeloos pollen is hoe een script de hele nacht blijft hangen en de volgende uitvoering blokkeert. Geef het wachten een deadline, een kort interval en een duidelijke faaluitkomst. Behandel elke status behalve CONNECTED als niet gereed, ook de overgangsstatussen. Log de laatst geziene status, zodat de fout zichzelf verklaart.

Een begrensde lus ziet er zo uit:

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

Dertig seconden is een voorbeeld, geen universele time-out. Kies een deadline op basis van het authenticatiepad dat het profiel echt gebruikt, en houd die vast in het verslag van de werkstroom.

Controleer status en verbreek op naam

Om hetzelfde profiel te stoppen, roept u disconnect aan met dezelfde naam. Dat houdt het verzoek smal en laat andere configuraties met rust.

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

Houd de profielnaam en de besturing samen in het verslag van de werkstroom, met de verwachte authenticatie- en voltooiingscontroles. Dat verslag is wat de opdracht een half jaar later controleerbaar maakt.

Gedrag bij starten met de computer is een andere modus. Gebruik de gedocumenteerde startoptie van Tunnelblick en de inloggegevens-instelling die die verwacht. Een opdracht in een ingelogde bureaubladsessie en een dienst die met de machine start, delen geen context. Ga er niet van uit dat een script dat werkt terwijl u bent ingelogd, ook bij het opstarten draait. Test het opstartpad apart, met dezelfde deadline en logging.

Gerelateerde artikelen