duplicate-cn cho hai thiết bị một danh tính, không phải hai
duplicate-cn cho phép phiên thứ hai đồng thời dưới một tên chung. Nó không bao giờ tạo ra danh tính thiết bị thứ hai, địa chỉ thứ hai hay việc thu hồi riêng.
Sao chép hồ sơ sang máy tính bảng, kết nối, và laptop bị đẩy ra. Thêm duplicate-cn, cả hai vẫn kết nối, và vấn đề có vẻ đã xong — cho đến khi hai thiết bị tranh nhau cùng một địa chỉ đường hầm hoặc một máy tính bảng bị mất khiến toàn bộ tài khoản ngoại tuyến. Tùy chọn này thay đổi một điều và chỉ một điều: liệu máy chủ có cho phép phiên thứ hai dưới một tên mà nó đã thấy hay không. Mọi thứ người ta mong nó sửa, từ tính độc lập của thiết bị đến địa chỉ riêng cho từng thiết bị và thu hồi có chọn lọc, vẫn được thực hiện bằng danh tính, và danh tính ở đây là chứng chỉ.
Huyền thoại: phiên thứ hai là danh tính thứ hai
Trực giác cho rằng hai kết nối phải là hai máy khách, và hai máy khách phải là hai thiết bị có quyền riêng. Máy chủ không mô hình hóa như vậy. Nó thấy một tên chung và, khi bật duplicate-cn, chấp nhận nhiều hơn một phiên đang sống mang tên đó, mỗi phiên có trạng thái phiên riêng trong daemon.
Không có gì trong việc chấp nhận đó đụng đến việc xác minh chứng chỉ. Cùng chứng chỉ vẫn là thông tin xác thực, cùng khóa vẫn là khóa riêng, và bất kỳ chính sách nào dựa trên chủ thể chứng chỉ vẫn phân giải hai lần về cùng một giá trị. Phiên thứ hai là socket thứ hai, không phải danh tính thứ hai.
Sự khác biệt đó không thấy được khi mọi thứ hoạt động. Nó trở nên rất rõ vào lúc bạn cần phân biệt hai thiết bị, mà thường là ngày một trong hai bị mất.
Điều gì thực sự thay đổi khi hai phiên chia sẻ một tên
Không có tùy chọn này, một kết nối mới dưới tên chung đã được kết nối sẽ đẩy phiên trước ra. Đó là lý do laptop bị đẩy ra khi máy tính bảng kết nối, và đó là biện pháp bảo vệ có chủ đích chống mơ hồ, không phải lỗi. Với tùy chọn này, cả hai phiên vẫn sống và máy chủ theo dõi chúng riêng theo phiên, không theo thiết bị.
Mỗi phiên vẫn có kết nối bên ngoài riêng và các khóa đã thương lượng riêng, nên thông lượng đồng thời thực sự là đồng thời. Cái họ chia sẻ là mọi thứ bắt nguồn từ thông tin xác thực: tra cứu chính sách, cấu hình riêng cho máy khách, danh tính trong nhật ký và việc thu hồi. Trạng thái phiên thuộc về kết nối và chết cùng nó, trong khi các sự thật ở mức thông tin xác thực tồn tại cho cả hai. Đó là lý do đầu ra trạng thái có thể liệt kê cùng một tên hai lần trong khi các bộ đếm vẫn tách riêng.
Hãy xác nhận bản dựng của bạn thực sự làm gì trước khi thiết kế dựa trên nó, vì tác dụng của tùy chọn do chính tùy chọn quy định chứ không phải lời đồn:
grep -n 'duplicate-cn\|client-config-dir\|username-as-common-name' /etc/openvpn/server.conf
Địa chỉ tĩnh mà bạn tưởng đã gán
Cấu hình cho từng máy khách được tra theo tên, và đó chính là cái bẫy. Một tệp client-config-dir được đặt tên theo tên chung áp dụng cho mọi thiết bị dùng tên đó, nên một ifconfig-push bên trong sẽ trao cho cả hai thiết bị cùng một địa chỉ đường hầm. Phiên thứ hai hoặc không thiết lập được, hoặc xung đột theo cách trông giống lỗi định tuyến.
Một nhóm động hoạt động tốt hơn một cách tình cờ, vì mỗi phiên được cấp địa chỉ từ nhóm một cách độc lập. Điều đó vẫn không cho bạn địa chỉ ổn định cho từng thiết bị, và chắc chắn không cho bạn chính sách riêng cho từng thiết bị gắn với địa chỉ đó.
Nếu triển khai dùng username-as-common-name, khóa tra cứu trở thành tên người dùng đã xác thực thay vì chủ thể chứng chỉ, và cùng xung đột đó xảy ra với bất kỳ ai đăng nhập hai lần. Tên điều khiển cấu hình phải là duy nhất cho từng thiết bị thì cấu hình riêng cho từng thiết bị mới có nghĩa.
Điều danh tính dùng chung không thể làm khi thu hồi
Việc thu hồi tác động lên chứng chỉ, không lên tên hiển thị và không lên phiên. Thu hồi chứng chỉ đó và mọi thiết bị giữ bản sao mất quyền truy cập ngay lập tức, kể cả chiếc trong văn phòng mà không ai muốn làm phiền. Giữ lại thì thiết bị bị mất vẫn hoạt động, vì không có gì trong giao thức phân biệt nó với bản sao đã được phê duyệt.
Nhật ký thừa hưởng cùng sự mơ hồ. Đầu ra trạng thái hiển thị một tên chung và một địa chỉ thật, và cả hai đều có thể thuộc về bất kỳ thiết bị nào trong hai. Một cuộc rà soát sự cố cần biết máy nào đã làm gì không thể trả lời câu hỏi đó từ chính hồ sơ của VPN, dù mức nhật ký có chi tiết đến đâu.
Không có lối vòng tránh bằng mật mã cho việc này. Hai thiết bị trình cùng một chứng chỉ, đối với máy chủ, là cùng một bên tham gia hai lần, và bất kỳ sơ đồ nào tuyên bố ngược lại chỉ là quy ước đặt tên chứ không phải biện pháp kiểm soát.
Khi nào chia sẻ là đúng, và làm sao để giới hạn nó
Chia sẻ có những cách dùng chính đáng: một tài khoản phòng thí nghiệm được nhiều máy thử dùng, hoặc một hộ gia đình nơi các thiết bị được quản lý cùng nhau và độ chi tiết của việc thu hồi không quan trọng. Trong những trường hợp đó, hãy bật tùy chọn một cách có chủ đích, giữ thông tin xác thực dùng chung ngoài chính sách riêng cho từng thiết bị, và chừa chỗ cho nhóm để các phiên không thể xung đột trên một địa chỉ.
Với mọi thứ cần địa chỉ riêng, nhật ký riêng hoặc việc thu hồi riêng, hãy cấp chứng chỉ riêng theo đường đăng ký thông thường. Điều đó cho mỗi hệ thống phía sau một đối tượng riêng để dựa vào, và tùy chọn này không còn quan trọng vì các tên đã là duy nhất.
Dù chọn con đường nào, hãy kiểm tra mô hình quản lý chứ không phải việc đăng nhập. Kết nối cả hai thiết bị, xác nhận chúng có địa chỉ khác nhau, sau đó mô phỏng mất mát và kiểm tra rằng bạn có thể thu hồi đúng một trong hai. Sách hướng dẫn openvpn(8) xác định phạm vi của tùy chọn; thủ tục thu hồi của bạn xác định liệu việc chia sẻ có thực sự chấp nhận được hay không.