Trạng thái VPN trên Mac: kiểm tra hồ sơ, tài nguyên hay luồng
Một giá trị boolean không thể trả lời ba câu hỏi khác nhau. Chọn chủ thể trước, sau đó dùng giao diện thực sự báo cáo nó, và giữ lại lý do thất bại.
Ai đó hỏi VPN có đang hoạt động không, và ba người khác nhau hiểu ba điều khác nhau. Người vận hành hiểu là hồ sơ Office đã xác thực xong. Bộ lập lịch hiểu là API riêng sẽ trả lời. Một đợt rà soát bảo mật hiểu là yêu cầu cụ thể này đã đi ra qua đường dẫn được bảo vệ. Một script grep bảng định tuyến để tìm tên giao diện không trả lời đáng tin cậy cho bất kỳ câu nào trong số đó.
Vì vậy danh sách kiểm tra bắt đầu trước khi bất kỳ lệnh nào chạy: hãy đặt tên cho chủ thể của việc kiểm tra. Mọi thứ sau đó là chọn giao diện thực sự có thể báo cáo nó.
Đặt tên chủ thể trước lệnh
Viết câu hỏi như một vị từ có chủ thể. «Hồ sơ Office có được kết nối không» là kiểm chứng được và có chủ sở hữu có thể trả lời. «Công việc này có thể chạm tới API nội bộ không» là vị từ thứ hai với một kiểu thất bại khác. «Yêu cầu này có dùng đường dẫn được bảo vệ không» là vị từ thứ ba, và là câu duy nhất nói về một luồng chứ không phải toàn bộ máy.
Trộn chúng lại tạo ra tự động hóa nói dối một cách tự tin. Một công việc kiểm tra trạng thái hồ sơ rồi cho rằng API đã sẵn sàng sẽ gọi ai đó ở tầng sai, và một công việc ping API rồi gọi đó là bằng chứng của đường hầm không thể phân biệt một VPN đang hoạt động với một laptop tình cờ nằm trên mạng văn phòng.
Một hồ sơ: hỏi thứ sở hữu nó
Với một dịch vụ Mac gốc, các điều khiển kết nối mạng trong scutil báo cáo chính xác điều này. Chúng đọc trạng thái của một cấu hình có tên thay vì suy ra điều gì đó từ giao diện.
scutil --nc list
scutil --nc status "Office VPN"
Tên hồ sơ trong lệnh đó phải là tên thật từ đầu ra của danh sách, không phải phỏng đoán. Đây là đường chỉ đọc cho các dịch vụ gốc, và nó không bảo đảm rằng một ứng dụng khách bên thứ ba sẽ xuất hiện ở đó; nhà cung cấp tự quản lý đường hầm của mình cần giao diện trạng thái được hỗ trợ của riêng họ. Kiểm tra danh sách trước khi viết lời gọi trạng thái, để một cái tên thiếu sẽ thất bại một cách nhìn thấy được thay vì âm thầm không khớp với gì cả.
Bên trong một ứng dụng Network Extension, hãy đọc trạng thái từ các đối tượng quản lý và kết nối thay vì từ hệ thống. Chú ý đến phạm vi ở đây: việc tải các cấu hình đã lưu chỉ trả về những cấu hình do ứng dụng gọi tạo ra, nên một kết quả rỗng nghĩa là «không có cái nào của tôi», không phải «không có VPN trên Mac này». Phân biệt một truy vấn thất bại với một trạng thái đã ngắt kết nối được xác nhận, và coi các trạng thái chuyển tiếp là kết quả riêng của chúng thay vì thử lại một kết nối đang lên.
Một công việc: mức sẵn sàng là một vị từ riêng
Nếu câu hỏi là liệu một công việc có thể tiếp tục, hãy kiểm tra sự phụ thuộc thực sự của công việc sau khi chủ sở hữu kết nối báo cáo trạng thái dự định. Một kiểm tra mức sẵn sàng có giới hạn đối với tài nguyên riêng là hình thức đúng: nó chứng minh điều công việc cần và không hơn thế.
Nó vẫn không thể chứng minh rằng mọi yêu cầu trên máy đều dùng đường hầm, và không nên được báo cáo như thể có thể. Tương tự, một tài nguyên trả lời qua mạng thông thường không phải bằng chứng của VPN, đó là lý do hai kiểm tra vẫn tách biệt ngay cả khi cả hai đều thành công.
Khi công việc thực sự cần một đường dẫn được bảo vệ, yêu cầu đó cần thiết kế thực thi của chính việc triển khai: định tuyến, loại trừ đường hầm chia tách, một quy tắc tường lửa hoặc một yêu cầu ở mức ứng dụng. Tính sẵn có của một điểm cuối là sự thật về một máy chủ. Việc thực thi là sự thật về cấu hình của máy khách, và cái này không chứng minh cái kia.
Một luồng: kiểm tra tuyến đã chọn
Với một luồng duy nhất, hãy xem đích, họ địa chỉ và bối cảnh nguồn bằng chẩn đoán định tuyến báo cáo đường đi được chọn cho chính đích đó. Đầu ra đó nêu tên giao diện và địa chỉ nguồn thực sự được dùng, một khẳng định mạnh hơn nhiều so với một mục tuyến mặc định.
Các kiểm tra trình duyệt rộng trả lời một câu hỏi hoàn toàn khác. Kết quả IP công khai mô tả một yêu cầu trông như thế nào từ góc nhìn của một máy chủ, và nó không nói gì về DNS riêng, các ứng dụng bị loại trừ hay một bối cảnh mạng thứ hai mà một tiến trình khác đang dùng.
Trả về một kết quả mà bên gọi có thể dùng
Chọn một hình thức trả về khớp với vị từ: trạng thái hồ sơ có tên, phán quyết mức sẵn sàng của tài nguyên hoặc một giá trị chưa biết rõ ràng kèm bằng chứng đã tạo ra nó. Giữ danh tính cấu hình và lý do thất bại bên cạnh phán quyết.
Chính thói quen cuối cùng đó tạo ra sự khác biệt giữa tự động hóa giúp ích và tự động hóa che giấu vấn đề. «Office VPN: đã ngắt kết nối, lần thử cuối thất bại ở bước xác thực» nói cho người vận hành biết nên nhìn ở đâu. «VPN đã sập» mời gọi cài lại, và «đã tìm thấy giao diện» mời gọi một sự yên tâm giả tạo.
Tài liệu tham chiếu Network Extension về việc tải các cấu hình đường hầm đã lưu là nơi để xác nhận phạm vi của ứng dụng gọi trước khi xây dựng bất cứ thứ gì trên đó.