Một bảng điều khiển yêu cầu con số về việc kết nối đã hoạt động bao lâu, và OpenVPN không cung cấp con số đó. Máy khách biết khi nào đường hầm của nó được dựng lên, nhưng chỉ khi có thứ gì đó ghi lại thời điểm ấy trước khi trạng thái phiên bị mất. Nơi được hỗ trợ là hook up, và giá trị đáng lưu là một giây epoch thô chứ không phải chuỗi đã định dạng. Mọi thứ sau đó là số học, cộng thêm vài quy tắc thứ tự quyết định con số có trung thực hay không.

Xác nhận rằng các hook thực sự chạy

Chứng minh hook kích hoạt trước khi thiết kế bất cứ thứ gì quanh nó. Một cấu hình máy khách tối thiểu cần script-security 2 cùng các đường dẫn rõ ràng up và down; không có dòng bảo mật, OpenVPN từ chối chạy tập lệnh và nói thẳng điều đó. Thêm up-restart và down-pre cùng lúc để các đường dẫn khởi động lại và tháo gỡ hoạt động có thể dự đoán được.

Hãy để phiên bản đầu tiên của hook nối môi trường của nó vào một tệp và không làm gì khác. Điều đó cho bạn biết tên các biến mà bản dựng của bạn thực sự xuất ra, chẳng hạn dev và script_type, thay vì những tên bạn nhớ từ phiên bản khác. Chạy một lần kết nối và một lần ngắt kết nối, rồi đọc tệp. Nếu không có gì xuất hiện, hãy dừng ở đây, vì một thiết kế dấu thời gian đặt trên hook không bao giờ chạy sẽ trông như sự cố giám sát trong nhiều tuần.

Kiểm tra hook chạy dưới người dùng nào. Khi đã đặt user và group, OpenVPN từ bỏ quyền trước khi chạy tập lệnh, nên một thư mục mà root có thể ghi có thể bị đóng với hook. Chọn đường dẫn theo góc nhìn của dịch vụ chứ không phải của shell bạn.

Ghi lại một giá trị epoch và xóa nó một cách có chủ ý

Hook up cần một dòng, date +%s > /run/openvpn-client.started, với đường dẫn được điều chỉnh theo từng phiên bản. Một giá trị epoch tránh các câu hỏi về ngôn ngữ, múi giờ và định dạng về sau, và đó là cùng con số mà một tác nhân giám sát có thể so với đồng hồ của chính nó.

Việc xóa quan trọng ngang với việc ghi. Hook down nên làm rỗng hoặc xóa tệp, và down-pre làm điều đó trước khi giao diện đóng lại, điều này loại bỏ khoảng thời gian mà tệp mô tả một đường hầm đã biến mất. up-restart sau đó làm mới dấu khi khởi động lại nội bộ thay vì để nguyên giá trị ban đầu. Không có cặp đó, một lần khởi động lại sau khi hết thời gian chờ ping tạo ra con số tiếp tục tăng trong khi đường hầm được thiết lập lại.

Chọn một vị trí có tuổi thọ phù hợp. Một tệp dưới /run biến mất khi khởi động lại, điều này đúng với thực tế, trong khi một tệp dưới /tmp có thể bị dọn dẹp không lường trước và một tệp trong thư mục cấu hình tồn tại theo cách gây nhầm lẫn. Đặt quyền để chỉ người dùng dịch vụ và người đọc giám sát mới đọc được nó.

Tính thời gian hoạt động mà không tin vào các dòng nhật ký

Đọc giây đã lưu, đọc giây hiện tại, trừ đi. Khi tệp vắng mặt hoặc rỗng, câu trả lời trung thực là không có đường hầm nào hoạt động, chứ không phải thời gian hoạt động bằng không, vì hai trạng thái đó nên phát ra cảnh báo khác nhau. Giữ giây thô trong tải trọng giám sát và định dạng ngày cùng giờ ở lớp hiển thị. Một bộ định dạng làm tròn bên trong bộ xuất sẽ ném đi độ chính xác mà ai đó sẽ cần trong một sự cố.

Phân tích dấu thời gian của nhật ký là lối tắt hấp dẫn, và nó thất bại theo ba cách: định dạng tuân theo bất kỳ tùy chọn nào được đặt, việc luân chuyển xóa lịch sử, và các lần kết nối lại xuất hiện như những phiên riêng biệt thay vì một đường hầm liên tục. Hook ghi lại sự kiện một lần, ngay tại thời điểm nó xảy ra.

Khi kiểm tra chạy trên máy chủ khác, hãy gửi dấu thời gian thay vì khoảng thời gian để người đọc áp dụng đồng hồ của riêng mình. Khi đó một kết quả âm nhỏ được đọc như độ lệch đồng hồ chứ không phải hook hỏng.

Bao quát việc kết nối lại, khởi động lại và nhiều phiên bản

Hai đường hầm trên một máy chủ cần hai tệp, được khóa theo tên phiên bản mà dịch vụ đã dùng. Một đường dẫn chia sẻ nghĩa là kết nối mới nhất ghi đè thời điểm bắt đầu của mọi hồ sơ, và triệu chứng là một con số nhảy lùi khi đường hầm thứ hai bắt đầu.

Hành vi kết nối lại xứng đáng có bài kiểm tra riêng, vì đó là nơi một thiết kế có vẻ hợp lý âm thầm báo cáo điều sai. Buộc khởi động lại bằng cách đánh rơi đối tác hoặc gửi tín hiệu tới tiến trình, rồi so trạng thái giao diện với tệp. Dấu thời gian phải tiến về phía trước vào đúng thời điểm đường hầm trở lại.

Ở phía máy chủ, tệp trạng thái mang giá trị connected-since cho mỗi máy khách, trả lời một câu hỏi khác: lần cuối máy chủ thấy đối tác đó là khi nào. Dùng nó để kiểm tra chéo chứ không phải để thay thế, vì nó biến mất cùng với phiên mà nó mô tả. Không phép đo nào cho biết gì về sức khỏe của ứng dụng phía sau đường hầm.

Chạy ba kiểm tra bắt được lỗi thứ tự

Thử một kết nối bình thường, một lần kết nối lại cưỡng bức và một lần dừng sạch, đọc danh sách giao diện và tệp cùng nhau sau mỗi lần. Một dấu vẫn còn sau khi dừng sạch, hoặc một tệp khẳng định có đường hầm mà danh sách giao diện không chứa, chỉ thẳng vào thứ tự hook. Chạy các kiểm tra với tư cách người dùng dịch vụ và bằng đường dẫn của dịch vụ, vì shell root có thể thấy tệp khác và đưa ra câu trả lời sai một cách tự tin. Sau đó để một bộ thăm dò chậm đọc tệp và xác nhận nó không bao giờ ghi vào đó.

Một cuộc thăm dò mỗi sáu mươi giây bao quát việc cảnh báo, và không hook nào nên dựa vào việc bộ thăm dò đó còn sống. Hãy tách hai trách nhiệm đó ra và con số vẫn đáng tin khi bất kỳ bên nào được triển khai lại.

Bài viết liên quan