Hai máy chỉ nói chuyện với nhau vẫn có thể giữ nguyên cấu trúc đó và vẫn có được các khóa lưu lượng đã thương lượng. Hình dạng mạng và chế độ bảo vệ là những lựa chọn độc lập, và chính việc lẫn lộn hai điều này khiến người ta cố luân chuyển một bí mật tĩnh bằng cách hoán đổi tệp trong khi cả hai daemon vẫn chạy. Hoán đổi tệp khóa dưới một cặp đang chạy không luân chuyển gì cả. Chế độ khóa tĩnh, mà OpenVPN 2.6 đánh dấu là lỗi thời, giữ một khóa duy nhất trong suốt vòng đời của đường hầm, nên tệp trên đĩa và khóa trong bộ nhớ chỉ khớp lại sau khi cả hai đầu được khởi động lại. Nếu yêu cầu là gia hạn tự động thì chế độ bảo vệ phải thay đổi.

Điều chế độ khóa tĩnh không làm được

Ở chế độ bí mật, cả hai peer chia sẻ một khóa được chia sẻ trước, khóa này mã hóa và xác thực đường hầm trực tiếp. Không có bắt tay, nên không có cơ chế để bất kỳ bên nào đề xuất vật liệu khóa mới, chứng minh danh tính hoặc phục hồi sau sự không khớp mà không cần người vận hành can thiệp. Cả hai thuộc tính đều đến từ việc thiếu kênh điều khiển chứ không phải từ một tùy chọn còn thiếu, và không có cờ cấu hình nào thêm một kênh như vậy vào chế độ này.

Hướng dẫn OpenVPN 2.6 nói rõ rằng khóa tồn tại cho đến khi một khóa mới được tạo. Điều đó chấp nhận được với một liên kết phòng thí nghiệm hoặc một cặp thiết bị cố định có quy trình luân chuyển được ghi lại, và không chấp nhận được ở bất cứ đâu mà một bí mật lâu dài là rủi ro thực sự. Hoán đổi tệp không tạo ra khóa mới cho một cặp đang chạy; nó tạo ra hai peer không đồng ý với nhau. Vì vậy thay tệp thêm gián đoạn mà không thêm luân chuyển.

Cũng không có khái niệm danh tính peer ngoài việc sở hữu tệp. Bất kỳ ai có khóa đều là peer, và không có gì trong đường hầm ghi lại bên nào là bên nào, nên việc thu hồi là tất cả hoặc không có gì.

Chuyển sang TLS mà không thiết kế lại liên kết

Chế độ TLS thêm một kênh điều khiển, và cùng với nó là khả năng thương lượng khóa của kênh dữ liệu. Trong một triển khai điểm-điểm, một bên nhận vai trò máy chủ và bên kia nhận vai trò máy khách, nhưng cấu trúc vẫn là liên kết giữa hai peer: mỗi bên biết điểm cuối của bên kia, và không có nhóm hay dịch vụ nhiều người dùng nào xuất hiện. Các vai trò là chi tiết của bắt tay, không phải kiến trúc mới.

Cấp cho mỗi máy danh tính riêng. Mỗi bên cần chứng chỉ và khóa riêng, neo tin cậy xác thực bên kia, và quy tắc xác minh peer nêu rõ ai được mong đợi. Đừng dùng lại khóa riêng của peer này trên peer kia để tiết kiệm thời gian; điều đó biến hai danh tính thành một và loại bỏ khả năng thu hồi từng bên riêng biệt. Đăng ký là nơi để làm điều này đúng, vì sửa sau này đồng nghĩa với phát hành lại chứng chỉ.

Giữ nguyên hợp đồng mạng trong khi bảo vệ thay đổi. Cùng địa chỉ đường hầm, tuyến và dịch vụ được phép phải áp dụng trước và sau, để một sự cố trong quá trình di chuyển là vấn đề bảo vệ chứ không phải một bất ngờ định tuyến trá hình. Ghi lại địa chỉ và tuyến trước khi thay đổi; so sánh chúng sau đó nhanh hơn dựng lại từ trí nhớ.

Một số triển khai còn bảo vệ kênh điều khiển bằng khóa tĩnh riêng của nó, khóa này không luân chuyển cùng kênh dữ liệu. Khóa đó canh giữ bắt tay chứ không phải tải trọng, nên lộ nó sẽ phơi bày thương lượng chứ không phải lưu lượng. Hãy lưu nó tách khỏi vật liệu của kênh dữ liệu, và gán một ngày thay thế do một người được nêu tên chịu trách nhiệm. Luân chuyển nó nghĩa là khởi động lại cả hai peer trong một khung thời gian phối hợp, vì thế nó xứng đáng có một mục trong lịch chứ không phải trong trí nhớ.

Ai gia hạn cái gì, và khi nào

Ở chế độ TLS, việc gia hạn được điều khiển bởi các giới hạn đã cấu hình: khoảng thời gian, số byte hoặc số gói. Kiểm soát thời gian được ghi lại là thứ hầu hết các triển khai dựa vào, và giá trị hiệu lực thấp hơn giữa hai peer có thể bắt đầu việc thay thế, nên chỉ nâng nó ở một bên sẽ không giữ sự kiện lại. Các giới hạn dựa trên khối lượng tồn tại vì một liên kết bận rộn có thể làm cạn khóa rất lâu trước khi đồng hồ làm điều đó. Không giới hạn nào là kiểm tra sức khỏe và không giới hạn nào cho bạn biết việc gia hạn đã thành công.

Đó là lý do việc chẩn đoán một cuộc thương lượng lại lặp đi lặp lại từ một tệp cấu hình duy nhất là gây hiểu nhầm. Hãy đọc cài đặt trên cả hai peer, rồi xem chuyển tiếp trong nhật ký thay vì giả định có lỗi. Một lần gia hạn hoàn tất sạch sẽ trông giống một đợt bùng ngắn lưu lượng kênh điều khiển, không giống một lần ngắt kết nối.

Giữ các đối tượng tách biệt trong đầu. Chứng chỉ chứng minh danh tính dài hạn và được thay thế theo lịch do bạn kiểm soát. Khóa của kênh dữ liệu được làm mới tự động, và một trao đổi xác thực riêng, nếu triển khai yêu cầu, tuân theo chính sách tài khoản và có thể cần những thỏa thuận riêng cho các trao đổi sau này.

Tắt hoàn toàn việc gia hạn bằng cách đặt khoảng thời gian về không không phải là cách sửa cho một nhật ký ồn ào. Nó biến một sự kiện vòng đời lành mạnh thành một khóa vĩnh viễn, điều này đưa bạn trở lại thuộc tính mà bạn đang cố gắng rời bỏ.

Chấp nhận thay đổi

Xây dựng cấu hình mới từ ví dụ được hỗ trợ của bản phát hành đã cài, không phải từ một đoạn tối thiểu cũ có thuật toán và đường dẫn tệp thừa hưởng từ nơi khác. Phối hợp việc chuyển đổi để cả hai peer thay đổi cùng nhau, và giữ một đường phục hồi đã được phê duyệt phòng khi một bên không khởi động được. Hạ liên kết một cách có chủ đích thay vì chờ một sự cố để kiểm tra việc quay lui. Một lần quay lui bạn đã tập đáng giá hơn một lần quay lui bạn đã mô tả.

Kiểm tra ba điều: xác minh danh tính ban đầu thành công, luồng ứng dụng dự định hoạt động, và một lần gia hạn có kiểm soát diễn ra mà không mất lưu lượng. Sau đó đọc chuyển tiếp trong nhật ký theo những gì nó thực sự chứng minh: một định danh khóa mới nghĩa là các peer đã hoàn tất việc thay thế, không phải đường hầm đã kết nối lại. Hãy coi đó là bằng chứng của một bước, và kiểm tra bộ đếm lưu lượng trước khi tuyên bố việc di chuyển hoàn tất.

Điều mà một lời hứa không gián đoạn sẽ che giấu là sự cố bạn chưa thấy. Một lần gia hạn thất bại, một chứng chỉ hết hạn hoặc một lỗi tuyến vẫn có thể làm gián đoạn liên kết, và không điều nào bị loại trừ bởi một lần chạy thử sạch. Thuộc tính đáng để thiết kế là hẹp hơn và hữu ích hơn: việc thay khóa thường lệ không còn là hoán đổi tệp thủ công.

Bài viết liên quan