NetworkManager cung cấp một thuộc tính, vpn.persistent, và mọi người yêu cầu nó trả lời bốn câu hỏi khác nhau cùng một lúc. Tài liệu gốc của nó cẩn thận: tính bền bỉ áp dụng khi dịch vụ VPN hỗ trợ và hồ sơ bật nó, và sau đó kết nối được yêu cầu tồn tại qua các thay đổi liên kết và sự cố cho đến khi ngắt kết nối rõ ràng. Cùng tài liệu đó cũng cho thấy thuộc tính mặc định là false, điều mà hầu hết các kế hoạch khôi phục không giả định. Hãy đọc nó như một yêu cầu thử, không phải lời hứa về kết quả.

Cấu hình thực sự cam kết điều gì

Một giá trị được lưu trong hồ sơ là chỉ dẫn cho trình quản lý, và trình quản lý phải chuyển chỉ dẫn đó cho một plugin VPN biết phải làm gì với nó. Nếu plugin đã cài đặt bỏ qua thuộc tính, hồ sơ vẫn kích hoạt và nhật ký vẫn im lặng, đây là điều tồi tệ nhất của cả hai thế giới cho bất kỳ ai sẽ gỡ lỗi sau này. Không có gì trong hồ sơ có thể buộc một plugin triển khai hành vi mà nó không có, vì vậy kết quả duy nhất có thể thấy là sự vắng mặt.

Đó là lý do điều kiện trong tài liệu quan trọng hơn công tắc. Hãy kiểm tra plugin và bản phát hành bạn thực sự có, và ghi phiên bản bên cạnh mô tả kết nối để người tiếp theo không phải khám phá lại. Một chính sách khôi phục xây trên cờ chưa được triển khai sẽ thất bại đúng một lần trong môi trường sản xuất và luôn vào thời điểm bất tiện nhất.

Coi thuộc tính như một lần thử cũng đặt kỳ vọng đúng cho việc kiểm thử. Bạn không kiểm tra cờ đã được đặt chưa; bạn kiểm tra liệu có điều gì xảy ra khi liên kết rớt không. Đó là những thí nghiệm khác nhau, và chỉ một trong số đó đáng để bỏ ra một buổi chiều.

Bốn câu hỏi bị gộp làm một

Kích hoạt hỏi điều gì đưa VPN lên ngay từ đầu. Một hồ sơ NetworkManager có thể gắn với một kết nối cơ sở, một dịch vụ OpenVPN được quản lý riêng có khởi động riêng, và thêm trình khởi chạy thứ ba vào cách sắp xếp đó cho bạn hai chủ sở hữu với ý kiến khác nhau về ai là người chỉ huy. Hãy quyết định thành phần nào sở hữu việc khởi động trước khi thêm một trình kích hoạt khác.

Khôi phục hỏi điều gì xảy ra khi liên kết thay đổi hoặc biến mất, và đó là câu hỏi hẹp mà vpn.persistent giải quyết. Khả năng sống hỏi liệu máy khách có thể nhận ra đầu xa đã ngừng trả lời không, và thay vào đó hành vi keepalive hoặc khởi động lại của OpenVPN trả lời điều đó; hai cơ chế thường được mô tả bằng cùng một từ và được triển khai ở những nơi khác nhau. Hãy kiểm tra chúng riêng rẽ, bằng công cụ khác nhau, nếu không bạn sẽ quy một hành vi cho hành vi kia.

Ý định hỏi liệu việc kết nối lại có được mong muốn hay không, và đó là câu hỏi mà việc thăm dò trạng thái không thể trả lời. Một lần dừng có chủ ý và một sự cố tạo ra cùng một trạng thái không hoạt động, nên bất cứ thứ gì kết nối lại khi vắng mặt đều đang đoán một quyết định của con người. Đoán thì ổn cho đến khoảnh khắc nó vượt qua ai đó.

Một danh sách kiểm tra giữ chúng riêng rẽ

Hãy chạy các sự kiện theo thứ tự thay vì đọc cấu hình và lý luận về nó, và ghi lại mỗi sự kiện cho thấy gì kèm dấu thời gian.

Thứ nhất, kích hoạt kết nối cơ sở dự định và xác nhận VPN đã lên qua trình kích hoạt bạn mong đợi chứ không phải qua một cơ chế bạn quên là đã cài. Thứ hai, trong một lần gián đoạn được phê duyệt, hãy so sánh các sự kiện VPN của trình quản lý, trạng thái khôi phục của máy khách sở hữu và một yêu cầu mới tới tài nguyên riêng. Thứ ba, ngắt kết nối có chủ ý, chờ và xác nhận rằng không có gì khởi động lại hồ sơ sau lưng bạn.

Bước thứ ba là bước người ta bỏ qua, và chính nó thường tìm ra khiếm khuyết thật. Một watchdog thăm dò hồ sơ đang hoạt động và kết nối lại khi không có sẽ vui vẻ hoàn tác việc ngắt kết nối có chủ ý của người dùng. Từ ghế của người dùng, đó không phải khả năng phục hồi; đó là một cỗ máy không chịu tuân lệnh. Hãy hỏi họ trước khi thêm một cái.

Ghi kết quả vào cùng tài liệu với mô tả kết nối. Một chính sách khôi phục chỉ tốt bằng lần cuối cùng ai đó thấy nó thất bại có chủ ý. Dấu thời gian làm cho sự khác biệt trở nên hữu hình với bất kỳ ai đọc ghi chú tiếp theo.

Xác thực là một phần của việc khôi phục

Kết nối lại không phải là hành động thuần túy của mạng. Nếu luồng được phê duyệt cần một thử thách mới, mã dùng một lần hoặc một bí mật mà ngữ cảnh kích hoạt không thể chạm tới, không cài đặt bền bỉ nào có thể tạo ra nó từ hư không.

Điều đó giải thích một mẫu quen thuộc: kết nối khôi phục trên máy có móc khóa đã mở và thất bại trên cùng máy sau khi khởi động lại. Lớp mạng đã làm đúng điều được yêu cầu và lớp thông tin xác thực không có gì để cung cấp.

Hãy sửa quy trình thông tin xác thực thay vì rút ngắn khoảng thời gian thử lại. Những lần thử lại nhanh hơn trước một lời nhắc mà không ai có thể trả lời tạo ra tiếng ồn trong nhật ký và ấn tượng sai rằng có điều gì đó đang được thử.

Tính bền bỉ không phải kill switch

Thuộc tính cố gắng giữ hoặc khôi phục mối quan hệ VPN. Nó không quyết định ứng dụng được làm gì khi VPN ngừng hoạt động, và bản thân nó không chặn gì cả.

Nếu yêu cầu là không có lưu lượng nào đi ra ngoài đường hầm, đó là một chính sách riêng với cơ chế riêng, kiểm thử riêng và các chế độ thất bại riêng. Giả định rằng tính bền bỉ bao phủ điều đó biến một quyết định bảo mật thành tai nạn.

Ghi lại cả hai nửa trong ghi chú khôi phục: VPN đã thử gì, và lưu lượng ứng dụng nào được phép trong khi lần thử đang diễn ra.

Bài viết liên quan