Liệt kê một kết nối trong cấu hình strongSwan chỉ chứng minh rằng một định nghĩa đã được tải. Điều đó không có nghĩa là đã liên hệ với đối tác, rằng có một IKE SA hay rằng bất kỳ lưu lượng nào đang được bảo vệ. Daemon coi định nghĩa và các liên kết đang sống là những đối tượng riêng biệt, và khoảng cách giữa chúng là một lựa chọn thiết kế có chủ đích. Biết mình đang kiểm tra đối tượng nào sẽ biến một lỗi mơ hồ thành lệnh tiếp theo cụ thể.

Tải không phải là kết nối

Một kết nối đã tải là một tuyên bố về những gì có thể được thương lượng sau này: địa chỉ đối tác, thông tin xác thực, đề xuất và bộ chọn lưu lượng. Không có gì trong tuyên bố đó buộc daemon phải gọi cho ai. Một cổng có thể chờ phía bên kia, tự khởi tạo khi khởi động hoặc chờ lưu lượng phù hợp đánh thức nó. Cả ba đều hợp lệ, và cả ba trông giống hệt nhau trong tệp cấu hình cho đến khi bạn đọc chính sách khởi động.

Người vận hành gặp rắc rối khi đọc danh sách định nghĩa như danh sách trạng thái. Hồ sơ có đó, nên đường hầm được cho là đã lên, và giờ tiếp theo đổ vào việc gỡ lỗi tuyến đường cho một liên kết chưa bao giờ được dựng.

Sai lầm ngược lại cũng phổ biến không kém. Thiếu hồ sơ khiến người ta đi tìm sự cố mạng trong khi cấu hình chưa từng được tải. Hãy gọi tên đối tượng, rồi chạy lệnh quan sát nó.

Ba đối tượng, ba quan sát

strongSwan giữ một định nghĩa đã tải, một IKE SA và một CHILD SA. Cái đầu là cấu hình, cái thứ hai là một quan hệ điều khiển đã xác thực, và cái thứ ba là sự bảo vệ đã thương lượng cho lưu lượng được chọn. Chúng thậm chí có tên riêng, nên một hồ sơ tên hq có thể sở hữu một child tên hq-lan.

Bảng ánh xạ mỗi lớp với lệnh hiển thị nó. Đọc dòng trước khi đọc nhật ký.

LayerWhat it containsCommand
DefinitionPeer addresses, credentials, proposals, and traffic selectorsswanctl --list-conns
IKE SAOne authenticated control channel to the peerswanctl --list-sas
CHILD SAKeys and selectors for the traffic being protectedChild rows under the IKE SA

Yêu cầu child trước hết dựng IKE SA cha của nó khi chưa có cái nào. Chỉ yêu cầu IKE SA là một lời gọi khác. Một kênh điều khiển xác thực tốt không bảo đảm child mà bạn đã yêu cầu.

Khác biệt đó quan trọng khi xảy ra sự cố cục bộ. Một IKE SA có thể khỏe trong khi child thất bại vì bộ chọn không khớp hoặc vì một đề xuất mà đối tác không chấp nhận. Hai đối tượng thất bại vì lý do khác nhau, nên chúng đáng được quan sát riêng.

Chọn hành động khởi động một cách có chủ đích

Trong swanctl.conf, start_action của child quyết định hành vi sau khi tải. Giá trị mặc định none để định nghĩa lại cho việc khởi tạo thủ công hoặc dùng làm responder. start quay số, trong khi trap để lại một chính sách sẽ thương lượng ngay khi lưu lượng phù hợp xuất hiện.

Vì thế cả «tải không bao giờ khởi động đường hầm» lẫn «tải luôn khởi động một đường hầm» đều sai. Hành động là một phần của hồ sơ và phải khớp với vai trò của đối tác. Hai cổng cùng chờ phía bên kia chỉ tạo ra im lặng, không phải đường hầm.

Với trap, lưu lượng phải khớp với bộ chọn, nên một ping không liên quan sẽ không đánh thức gì. Với start, địa chỉ đối tác phải dùng được và hai bên phải thống nhất về xác thực và đề xuất. Không hành động nào thay thế việc kiểm tra những điều kiện đó.

Phục hồi là một chính sách riêng

Khởi động không phải keepalive. Phát hiện đối tác chết, đóng chủ động từ phía đối tác, làm mới khóa và khởi động lại tiến trình là những sự kiện vòng đời khác nhau với thiết lập riêng. Hãy cấu hình từng cái một cách có chủ đích thay vì mong một lần khởi động ban đầu bao trùm tất cả.

Một đường hầm lên khi khởi động máy và chết sau một giờ là câu hỏi về phục hồi. Chính sách khởi động đã làm xong việc của nó rồi hết quan trọng. Hãy xem thiết lập DPD và làm mới khóa trước khi đổ lỗi cho thương lượng ban đầu.

Thay thế các định nghĩa đã tải là một thao tác riêng. Các chính sách khởi động không mặc định có hành động nghịch đảo được ghi lại, và nạp lại là một thay đổi vận hành chứ không phải giả định rằng mọi liên kết đã được cập nhật tại chỗ. Hãy nạp lại theo từng giai đoạn, nơi việc kết nối lại là chấp nhận được. Giữ cấu hình cũ cho đến khi cái mới được chứng minh.

Kiểm tra cái gì tồn tại trước khi gỡ lỗi định tuyến

Chạy ba quan sát theo thứ tự: định nghĩa đã tải, IKE SA đang hoạt động và các mục child. Mỗi câu trả lời thu hẹp câu hỏi tiếp theo. Bỏ qua một bước và cuối cùng bạn sẽ gỡ lỗi một lớp chưa bao giờ được dựng.

Bắt đầu với những gì đã tải và những gì thực sự được thiết lập:

swanctl --list-conns
swanctl --list-sas

Nếu thiếu child trong khi hồ sơ đúng, hãy khởi tạo nó theo tên và xem điều gì xảy ra. Kết quả thường cho biết cái cha có lên trước hay không.

swanctl --initiate --child hq-lan

Một CHILD SA đang hoạt động không phải là đích đến. Các quy tắc chuyển tiếp, tuyến đường và quyền của chính ứng dụng vẫn phải khớp. Vòng đời trả lời cái gì đã được thương lượng; nó không thể quyết định ai được dùng dịch vụ.

Bài viết liên quan