สคริปต์ที่ต้องการให้ 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 และการตั้งค่าข้อมูลรับรองที่มันคาดหวัง คำสั่งที่รันในเซสชันเดสก์ท็อปที่ล็อกอินกับบริการที่เริ่มพร้อมเครื่องไม่ได้ใช้บริบทเดียวกัน อย่าสันนิษฐานว่าสคริปต์ที่ทำงานขณะคุณล็อกอินจะทำงานตอนบูตด้วย ทดสอบเส้นทางการเริ่มแยกต่างหาก ด้วยเส้นตายและการบันทึกเดียวกัน

บทความที่เกี่ยวข้อง