Các script cần VPN hoạt động trước khi sao lưu thường khởi chạy openvpn trực tiếp. Cách đó bỏ qua hồ sơ, DNS và việc xử lý tuyến đường mà Tunnelblick đã quản lý. Con đường được hỗ trợ là giao diện AppleScript của chính Tunnelblick, tiếp nhận các yêu cầu connect, state và disconnect cho một cấu hình có tên. Hãy dùng nó và để ứng dụng giữ quyền chủ động.

Nói chuyện với ứng dụng, không phải với openvpn

Tunnelblick sở hữu hồ sơ OpenVPN, việc chọn engine, các script cùng tích hợp DNS và tuyến đường. Một tệp nhị phân openvpn riêng là cách khởi chạy khác, không phải lối tắt đến cùng kết nối đó.

Gọi giao diện script của ứng dụng giữ nguyên quyền sở hữu ấy và khiến mọi yêu cầu có thể được xem lại.

Các ví dụ ở đây giả định Tunnelblick nằm trong Applications, cấu hình đang hoạt động tên là HQ và các lệnh chạy trong phiên của người dùng Mac đã đăng nhập. Hãy đổi tên thành cấu hình chính xác mà bạn có.

Khởi chạy đúng một hồ sơ có tên

Yêu cầu connect nêu tên cấu hình. Đó không phải yêu cầu kết nối tới thứ được chọn lần cuối.

Chạy nó trong phiên người dùng sở hữu cấu hình:

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

Đi qua các lời nhắc đăng nhập thông thường. macOS có thể hỏi liệu ứng dụng gọi lệnh có được phép điều khiển Tunnelblick hay không; hãy kiểm tra ứng dụng nào và mục tiêu nào trước khi chấp thuận. Tự động hóa bấm qua hộp thoại đó làm mất ý nghĩa của hộp thoại.

Yêu cầu connect trả về trước khi đường hầm được dựng

Hướng dẫn script của Tunnelblick nói rõ: connect trả về trước khi kết nối hoàn tất. Trạng thái thoát bằng không nghĩa là yêu cầu đã được chấp nhận, không phải lưu lượng đang chảy.

Đọc trạng thái riêng:

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

CONNECTED là kết quả của trạng thái kết nối. Nó vẫn chưa chứng minh rằng tài nguyên riêng mà công việc của bạn cần là có thể truy cập, nên hãy kiểm tra riêng điều đó trước khi bắt đầu công việc phụ thuộc.

Các điều khiển khác trong giao diện script bao quát hành động rộng hơn và không cần thiết khi chỉ một hồ sơ thay đổi.

Chờ với thời hạn, rồi thất bại

Thăm dò vô hạn là cách một script treo qua đêm và chặn lần chạy tiếp theo. Hãy cho lần chờ một thời hạn, một khoảng ngắn và một kết quả thất bại rõ ràng. Coi mọi trạng thái ngoài CONNECTED là chưa sẵn sàng, kể cả các trạng thái chuyển tiếp. Ghi lại trạng thái cuối cùng bạn thấy để thất bại tự giải thích.

Một vòng lặp có giới hạn trông như sau:

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

Ba mươi giây là ví dụ, không phải giới hạn thời gian phổ quát. Hãy chọn thời hạn từ đường xác thực mà hồ sơ thực sự dùng, và giữ nó trong bản ghi quy trình làm việc.

Kiểm tra trạng thái và ngắt kết nối theo tên

Để dừng cùng hồ sơ, hãy gọi disconnect với cùng tên. Điều đó giữ yêu cầu hẹp và để các cấu hình khác yên.

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

Giữ tên hồ sơ và bộ điều khiển cùng nhau trong bản ghi quy trình làm việc, cùng với các kiểm tra xác thực và hoàn tất dự kiến. Chính bản ghi đó khiến lệnh vẫn xem lại được sau sáu tháng.

Hành vi khởi động cùng máy tính là chế độ khác. Hãy dùng tùy chọn khởi động được ghi trong tài liệu của Tunnelblick và cách thiết lập thông tin xác thực mà nó mong đợi. Một lệnh chạy trong phiên màn hình đã đăng nhập và một dịch vụ khởi động cùng máy không chia sẻ ngữ cảnh. Đừng cho rằng script chạy khi bạn đăng nhập cũng sẽ chạy lúc khởi động. Hãy thử riêng đường khởi động, với cùng thời hạn và ghi nhật ký.

Bài viết liên quan