Một tài khoản VPN trên hai máy chủ: ba sổ trạng thái
Việc tiếp nhận dùng chung, cấu hình mạng riêng của nút và các phiên đang hoạt động là những vấn đề tách biệt. Hãy tách chúng ra trước khi nhân bản một tài khoản giữa các nút.
Một tài khoản có thể đăng nhập vào bất kỳ nút VPN nào trong hai nút đặt ra một câu hỏi thiết kế rất lâu trước khi đặt ra câu hỏi phần mềm. Góc nhìn tài khoản, mạng mà mỗi nút sở hữu và phiên mà một máy khách đã kết nối đang giữ là ba loại trạng thái khác nhau, và chúng hỏng theo những cách khác nhau khi bạn sao chép chúng qua lại. Sao chép cả ba vào một hệ thống là cách phổ biến để mất một trong số đó.
Đi qua ba sổ bên dưới theo thứ tự. Mỗi sổ hỏi điều gì là có thẩm quyền, điều gì là cục bộ và điều gì xảy ra khi nút kia không còn, và các câu trả lời không suy ra từ nhau.
Ai được kết nối: một thẩm quyền, nhiều nút
Bắt đầu với sổ tiếp nhận: nguồn danh tính nào có thẩm quyền, nhà phát hành chứng chỉ nào được tin cậy, tài khoản nào đủ điều kiện, yếu tố thứ hai nào áp dụng và mỗi tài khoản tiếp cận được gì. Sau đó ghi lại cách mỗi nút biết về các thay đổi, và nhanh đến mức nào.
Một cơ sở dữ liệu dùng chung là một thành phần khả dĩ của câu trả lời đó. Nó không phải bằng chứng rằng mọi chính sách liên quan đều sống ở đó, hay rằng mọi nút áp dụng một thay đổi cùng một thời điểm. Một tài khoản bị vô hiệu hóa ở nút A nhưng vẫn được chấp nhận ở nút B nghĩa là quy trình rời bỏ chưa hoàn tất.
Hãy quyết định nút làm gì khi không tiếp cận được thẩm quyền. Chấp nhận thông tin đăng nhập được lưu đệm trong lúc gián đoạn là lựa chọn chính sách có chi phí bảo mật, và từ chối chúng là lựa chọn chính sách có chi phí sẵn sàng. Cả hai đều có thể biện hộ; để nó không được ghi lại thì không.
Giữ thẩm quyền của nhà phát hành tách khỏi dữ liệu tài khoản. Nhiều cổng vào có thể tin cùng một CA mà không giữ khóa ký của nó, và mỗi nút vẫn cần chứng chỉ máy chủ riêng và quan hệ tin cậy phía máy khách riêng.
Nút sở hữu gì: địa chỉ và tuyến
Sổ thứ hai là cục bộ cho mỗi nút: địa chỉ lắng nghe, danh tính máy chủ, nhóm địa chỉ, tuyến tới tài nguyên riêng, chính sách bộ phân giải và cách lưu lượng đi ra internet. Cùng một tài khoản có thể được phục vụ bởi một trong hai nút trong khi những đối tượng này vẫn khác nhau.
Đường quay về là phần bị lãng quên. Nếu cả hai nút phát địa chỉ từ cùng một nhóm, mạng riêng không thể nói máy khách nào thuộc nút nào, và câu trả lời có thể bị gửi sai chỗ. Các nhóm khác nhau cũng cần tuyến và quyền, nên một dải số riêng biệt không phải là thiết kế đầy đủ.
Hãy chủ động hướng máy khách tới một nút. Chọn DNS, danh sách điểm cuối của máy khách và một dịch vụ giao diện trước là những cơ chế khác nhau với hành vi kiểm tra sức khỏe và chuyển đổi khi lỗi khác nhau. Chọn một là ổn; coi «cân bằng tải» là thiết kế sẽ để đường quay về và hành vi khi lỗi không được xác định.
Một ví dụ sản phẩm có tài liệu giúp ích ở đây. Tài liệu nhân bản của Pritunl coi mạng VPN là một đối tượng cho mỗi bản sao, và máy khách trên các bản sao khác nhau cần thêm tuyến và kết nối để đến được nhau. Đó là cách sắp xếp riêng của sản phẩm, không phải công thức cho Community OpenVPN, nhưng nó cho thấy vì sao thêm một bản sao thay đổi mạng chứ không chỉ kho tài khoản.
Phiên là gì: trạng thái sống, không phải dòng
Sổ thứ ba là phiên đang sống. Một máy khách đã kết nối có trạng thái giao thức và một phân bổ mạng trên nút đã chấp nhận nó. Việc tài khoản được biết ở nút kia không cho nút đó phiên, khóa hay khả năng tiếp tục các gói tin.
Hãy nói rõ điều gì xảy ra khi một nút hỏng. Kết quả được hỗ trợ có thể là kết nối lại tới nút kia với xác thực mới và địa chỉ mới, sau đó ứng dụng tự phục hồi theo cách của nó. Nếu cần bàn giao không gián đoạn, yêu cầu đó cần sự hỗ trợ triển khai rõ ràng, không phải suy luận từ nhân bản cơ sở dữ liệu. Hãy viết câu trả lời ở nơi kỹ sư trực ca có thể tìm thấy.
Các quy tắc dung lượng cần cách xử lý tương tự. Giới hạn hai phiên đồng thời cho mỗi tài khoản chỉ có thể được thực thi giữa các nút nếu một thẩm quyền nào đó có góc nhìn phối hợp về các chỗ đã chiếm. Danh sách cục bộ của nút và hồ sơ tài khoản lịch sử không cộng lại thành góc nhìn đó.
Thử ba sổ
Hãy luyện từng cái một cách riêng rẽ. Đăng nhập qua nút A, rồi qua nút B, và xác nhận cả hai thành công với các dải địa chỉ mong đợi. Thu hồi một danh tính và kiểm tra cả hai nút, không chỉ nút bạn tình cờ thử. Sau đó dừng một nút và quan sát máy khách và ứng dụng riêng thực sự làm gì.
Đưa đường quay về vào bài kiểm tra chấp nhận. Một máy khách kết nối tới B nhưng không nhận được trả lời từ tài nguyên phía sau A đã qua kiểm tra tiếp nhận và hỏng ở kiểm tra mạng, và sự khác biệt đó nên xuất hiện trong báo cáo.
Thiết kế tài khoản đa nút chỉ hoàn chỉnh khi cả ba sổ đều có chủ sở hữu rõ ràng, đường thay đổi và hành vi khi lỗi. Sao chép một tệp cấu hình giữa các nút không trả lời bất kỳ câu hỏi nào trong số đó.