VPN trên Mac tự kết nối lại ngay sau khi bạn nhấn Ngắt kết nối
Một trình giám sát coi mọi trạng thái đã ngắt kết nối là lỗi sẽ đấu tranh với nút Ngắt kết nối. Tách ý định khỏi trạng thái quan sát được, rồi giới hạn các lần thử lại.
Nhấn Ngắt kết nối có tác dụng, và mười giây sau đường hầm vẫn quay lại. Vòng lặp đó hiếm khi là ứng dụng VPN hành xử sai; đó là một tập lệnh khôi phục luôn chỉ hỏi một câu, «nó có sập không?», và trả lời bằng cách kết nối. Khi bạn tách câu hỏi mà người dùng đã trả lời khỏi câu hỏi mà hệ thống báo cáo, bản sửa lỗi trở thành một lượng nhỏ trạng thái thay vì một giấc ngủ dài hơn.
Hai câu hỏi, không phải một
Hồ sơ này có nên được kết nối ngay bây giờ không, và hệ thống đang báo cáo gì ở thời điểm này? Đó là những câu hỏi khác nhau với những chủ sở hữu khác nhau, và một chính sách khôi phục cần cả hai trước khi hành động. Ý định là thứ mà công cụ của bạn quyết định và ghi nhớ. Trạng thái quan sát được là thứ mà nền tảng cho bạn biết.
| Intent | What you observe | What to do |
|---|---|---|
| Wanted | Dropped unexpectedly | Allow one supported recovery attempt |
| Paused by the user | Disconnected | Do nothing until intent changes |
| Wanted | Already connecting | Wait instead of starting a rival attempt |
| Wanted | Authentication needs a person | Prompt, then stop replaying credentials |
Đọc các hàng như một chính sách chứ không phải danh sách các trường hợp. Hàng thứ hai là hàng mà hầu hết các tập lệnh bỏ qua, và là hàng duy nhất phân biệt một trình giám sát với một cỗ máy khăng khăng rằng nó đúng.
Trạng thái quan sát được không phải sở thích
Mô hình trạng thái Network Extension của Apple báo cáo các trạng thái connecting, connected, disconnecting, disconnected và recovery. Cả năm đều mô tả kết nối. Không trạng thái nào nói «người dùng yêu cầu hồ sơ này tiếp tục tạm dừng», vì đó hoàn toàn không phải trạng thái kết nối. Các ứng dụng không được xây dựng trên khung đó phơi bày các điều khiển và lệnh gọi trạng thái được hỗ trợ của riêng chúng, và chúng vẽ cùng ranh giới bằng từ vựng của mình.
Hệ quả là trạng thái đã ngắt kết nối không bao giờ có thể được diễn giải một mình. Nó có nghĩa là một trong ít nhất ba điều: đường hầm bị rớt, người dùng đã dừng nó, hoặc hệ thống đang ở giữa các lần thử. Chỉ bản ghi ý định của riêng bạn mới phân biệt được chúng. Hãy ghi lại bản ghi đó, giữ nó qua các lần khởi động lại nếu nó phải sống sót qua một lần khởi động lại, và cập nhật nó ngay tại thời điểm người dùng hành động thay vì suy ra sau đó từ một dòng nhật ký.
scutil --nc list
scutil --nc status "Office VPN"
Ai khác được phép khởi động hồ sơ này
Một lần tạm dừng được trợ lý của bạn hứa chỉ mạnh bằng những chủ sở hữu khác của cùng hồ sơ. Một quy tắc On Demand, một cấu hình được quản lý hoặc một ứng dụng thứ hai đều có thể yêu cầu kết nối, và trợ lý của bạn sẽ trông như hỏng trong khi nó hành xử đúng như đã viết.
Tìm mọi cơ chế có thể khởi động hồ sơ trước khi bạn hứa tôn trọng một lần tạm dừng, và ghi lại cái nào thắng. Khi một dịch vụ được quản lý cố ý không cung cấp tùy chọn tạm dừng cá nhân, đó là quyết định của quản trị viên về chính sách, không phải khoảng trống để một tập lệnh lấp đầy bằng cách chống lại việc quản lý.
Làm cho các lần thử lại trở nên nhàm chán
Giới hạn số lần thử và làm cho mỗi lần phản ứng với một điều gì đó đã thay đổi: mạng đã trở lại, cổng đã trả lời, lời nhắc thông tin đăng nhập đã hoàn tất. Một cổng không khả dụng, một danh tính đã hết hạn và một yếu tố thứ hai bị từ chối cần ba phản hồi khác nhau, và một vòng lặp chặt chẽ cho cả ba cùng một phản hồi.
Hãy xem một lần thử lại nhanh thực sự tạo ra gì trên màn hình. Các hộp thoại lặp đi lặp lại mà người dùng đóng còn tệ hơn một thông báo lỗi rõ ràng, và chúng dạy người ta bấm qua các lời nhắc mà không đọc.
Tạm dừng và chính sách lưu lượng là những lời hứa riêng biệt
Một đường hầm bị người dùng tạm dừng thường cố ý để lưu lượng bị chặn, và đó chính là toàn bộ mục đích của một chính sách kiểu kill switch. Điều đó có nghĩa là Tạm dừng chỉ nên hứa đúng một điều: việc khôi phục dừng lại. Nó không nên âm thầm thay đổi những gì mạng cho phép.
Quyết định hành vi lưu lượng riêng, ghi lại nó bên cạnh điều khiển Tạm dừng, và giữ nó nhất quán dù đường hầm đang tạm dừng, bị lỗi hay vắng mặt. Nếu không, người dùng học được rằng nhấn Ngắt kết nối làm điều gì đó không thể đoán trước, và phiếu hỗ trợ tiếp theo sẽ nói về một mạng «đôi khi ngừng hoạt động» mà không có lý do rõ ràng.