IKEv2 không phải một lần bắt tay: IKE SA, xác thực, rồi CHILD SA
Câu trả lời của cổng chỉ chứng minh khả năng tiếp cận, không phải danh tính. Hãy theo dõi IKE_SA_INIT, IKE_AUTH và CHILD SA đầu tiên, rồi kiểm tra điều gì phải đúng trước khi lưu lượng đi qua.
Bạn có thể nghĩ kết nối IKEv2 là một lần trao đổi duy nhất kết thúc bằng lưu lượng được mã hóa. Thực ra có ít nhất hai, và lần đầu không xác thực bất kỳ ai. Hai bên bắt đầu bằng thông điệp điều khiển, thống nhất tham số mật mã, chứng minh danh tính và chỉ sau đó mới thương lượng trạng thái mang các gói ứng dụng. Chính thứ tự đó giải thích sự lệch pha mà người ta luôn báo: cổng trả lời, máy khách báo đã kết nối, mà ứng dụng riêng vẫn hết thời gian chờ. Dưới đây là những gì mỗi giai đoạn thực sự làm và điều gì phải đúng sau đó.
Lầm tưởng: cổng trả lời nghĩa là đã kết nối
Câu trả lời cho thông điệp đầu chứng minh điểm cuối có thể tiếp cận và sẵn sàng trao đổi. Nó không chứng minh tài khoản đã được chấp nhận, chuỗi chứng chỉ đã được xác thực hay bất kỳ chính sách dữ liệu nào đã được cài đặt.
Những thất bại đó xảy ra muộn hơn và cho triệu chứng khác. Việc từ chối chứng chỉ hay lỗi EAP đến sau khi lần trao đổi đầu đã thành công, nên một ping tới UDP 500 và biểu tượng xanh trên máy khách nói rất ít.
IKE_SA_INIT: thống nhất tham số, không phải danh tính
Lần trao đổi đầu mang các đề xuất cho hiệp hội bảo mật IKE: thuật toán mã hóa và toàn vẹn, một hàm giả ngẫu nhiên và một nhóm Diffie-Hellman. Hai bên cũng trao đổi nonce, và mỗi bên dẫn xuất vật liệu khóa cho IKE SA từ bí mật chung mà các giá trị đó tạo ra. Không có gì trong lần trao đổi này xác lập bên kia là ai. Nó chỉ xác lập rằng hai bên tính được cùng khóa và đồng ý một đề xuất. Bên trả lời không thích đề xuất nào sẽ từ chối trao đổi tại đây, nên sự lệch phiên bản hay thuật toán trông như máy chủ chết.
IKE SA được tạo tại điểm này bảo vệ mọi trao đổi quản trị về sau. Đó là việc của nó, và đó là việc khác với bảo vệ các gói của bạn.
IKE_AUTH: chứng minh danh tính rồi dựng CHILD SA đầu tiên
Lần trao đổi thứ hai mang danh tính. Với chứng chỉ, mỗi bên ký bằng khóa riêng và trình một chuỗi mà bên kia phải xác thực; với EAP, bên trả lời thách thức bên khởi tạo qua phương thức đã chọn. Đây là nơi cuối cùng lộ ra tên máy chủ sai, chứng chỉ hết hạn hoặc mật khẩu bị từ chối.
Thông thường IKE_AUTH cũng thương lượng CHILD SA đầu tiên, nên việc bảo vệ dữ liệu được thống nhất trong cùng một lượt. Bên khởi tạo đề xuất bộ chọn lưu lượng, bên trả lời thu hẹp hoặc từ chối, và khóa cho đường dữ liệu được dẫn xuất từ IKE SA. Nghĩa là một lần trao đổi có thể thất bại ở hai chỗ rất khác nhau: danh tính hoặc chính sách. Hãy đọc tải thông báo hoặc lỗi thay vì lỗi bắt tay chung, vì cách sửa một cái là chứng chỉ và cái kia là lệch mạng con.
Hai SA, hai nhiệm vụ
| Hiệp hội | Bảo vệ | Hành vi thời hạn |
|---|---|---|
| IKE SA | Trao đổi quản trị: làm mới khóa, xóa, tải cấu hình | Được làm mới theo lịch riêng; đường dữ liệu có thể sống qua thay đổi |
| CHILD SA | Lưu lượng ứng dụng khớp với bộ chọn lưu lượng | Được làm mới độc lập, thường xuyên hơn |
Tách chúng ra giải thích hai hành vi trông như lỗi. Đường hầm có thể hiện đã thiết lập trong khi việc làm mới khóa thất bại ở nền, và CHILD SA có thể được thay mà máy khách không mất kết nối.
Trên strongSwan, tài liệu cấu hình IKEv2 và swanctl --list-sas cho thấy cả hai tầng, còn ip xfrm state cùng với ip xfrm policy cho thấy nhân thực sự đã cài gì. So sánh hai góc nhìn đó là cách nhanh nhất để biết thương lượng đã xong hay chỉ trông như đã xong. Nếu tiến trình nền liệt kê một CHILD SA mà nhân không có trạng thái, việc cài đặt đã thất bại âm thầm. Nếu nhân giữ trạng thái mà tiến trình nền không biết, bạn đang xem tàn dư của một lần thử trước.
Điều gì vẫn phải đúng sau khi đường hầm lên
Bộ chọn lưu lượng xác định địa chỉ nào được bao phủ. Nếu máy khách đề xuất một mạng con còn máy chủ chờ mạng khác, CHILD SA vẫn được cài nhưng không mang gì hữu ích, và lỗi hiện ra như vấn đề định tuyến chứ không phải thương lượng. Sau đó ngăn xếp cục bộ phải hợp tác: chuyển tiếp được bật nơi máy chủ định tuyến, tuyến trỏ vào đường hầm, quy tắc tường lửa cho phép các gói đã giải bọc và bộ phân giải nội bộ nếu có tên riêng. Mỗi thứ trong số đó hỏng riêng và không thứ nào được sửa bằng cách khởi động lại tiến trình IKE.
Giữ nhật ký hiển thị khi chẩn đoán: trao đổi đầu, rồi xác thực danh tính, rồi xác thực người dùng nếu có, rồi cài đặt CHILD và cuối cùng là lưu lượng ứng dụng. Giai đoạn dừng lại chính là giai đoạn cần sửa, và một lỗi định tuyến về sau không bao giờ là lý do nới lỏng các kiểm tra danh tính đã qua.