اسکریپت‌هایی که پیش از یک پشتیبان‌گیری به VPN فعال نیاز دارند، اغلب openvpn را مستقیم اجرا می‌کنند. این کار پروفایل، DNS و مدیریت مسیرهایی را که Tunnelblick از قبل اداره می‌کند رها می‌کند. مسیر پشتیبانی‌شده رابط AppleScript خود Tunnelblick است که درخواست‌های connect، state و disconnect را برای یک پیکربندی نام‌دار می‌پذیرد. از آن استفاده کنید و بگذارید برنامه مسئول بماند.

با برنامه حرف بزنید، نه با openvpn

پروفایل OpenVPN، انتخاب موتور، اسکریپت‌ها و یکپارچه‌سازی DNS و مسیرها در اختیار Tunnelblick است. فایل اجرایی جداگانه 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 و تنظیم اعتبارنامه‌ای که انتظار دارد استفاده کنید. فرمانی که در نشست رومیزی واردشده اجرا می‌شود و خدمتی که همراه ماشین آغاز می‌شود زمینه مشترکی ندارند. فرض نکنید اسکریپتی که هنگام ورود شما کار می‌کند هنگام بوت هم اجرا خواهد شد. مسیر آغاز کار را جداگانه، با همان مهلت و همان ثبت، بیازمایید.

مقالات مرتبط