Gateway từ xa khởi động lại, trở lại trong vòng một phút, và daemon strongSwan cục bộ vẫn chạy trong khi đường hầm vẫn sập. Một cron job grep ESTABLISHED và khởi động lại daemon rốt cuộc sẽ che lấp điều đó, và nó cũng sẽ cắt mọi đường hầm không liên quan trên máy trong khi có thể bỏ sót đúng đường hầm đã hỏng. Việc khôi phục thuộc về kết nối phải quay lại, được thể hiện trong các cài đặt sống sót qua một lần reload. Runbook này thiết lập điều đó cho một kết nối và chứng minh kết quả theo tên.

Bỏ việc khởi động lại toàn cục, giữ lại bằng chứng của nó

Khởi động lại daemon có hai khiếm khuyết cụ thể: nó phá hủy trạng thái của mọi kết nối, và nó không cho bạn biết sự kiện nào thực sự thất bại. Đoạn văn bản trạng thái bạn đã grep có thể đến từ kết nối khác, trong khi child cần thiết ngồi không vì không có gì kích hoạt nó.

Đọc các kết nối đã nạp và các liên kết đang hoạt động trước khi thay đổi bất cứ điều gì, để bạn có hình ảnh trước để so sánh khi peer quay lại.

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

Đặt khởi tạo và các lần thử lại trên kết nối quay lại

Trong một triển khai swanctl.conf, các cài đặt này nằm ở cấp kết nối và child chứ không phải trong chính sách toàn cục. Đoạn dưới đây là ví dụ từ phía bên khởi tạo, giả định rằng đề xuất, xác thực và bộ chọn đã đúng.

connections {
    branch {
        keyingtries = 0
        dpd_delay = 30s
        children {
            private-lan {
                start_action = trap|start
                dpd_action = restart
            }
        }
    }
}

start_action quyết định điều gì xảy ra khi child được nạp: start khởi tạo ngay lập tức, còn trap cài đặt một chính sách kích hoạt khởi tạo khi lưu lượng khớp xuất hiện. Viết trap|start cần strongSwan 5.9.6 trở lên, vì vậy hãy kiểm tra phiên bản trước khi sao chép dòng đó. dpd_action=restart yêu cầu đàm phán mới ngay khi peer bị tuyên bố là chết, và keyingtries=0 ở cấp kết nối cho phép thử thêm cho đến khi thành công hoặc gặp lỗi vĩnh viễn. Dưới IKEv2, dpd_timeout không có tác dụng gì cả, vì việc truyền lại thông thường quyết định khi nào peer không phản hồi.

Độ trễ trong ví dụ đó là điểm khởi đầu chứ không phải hạn chót phổ quát. Hãy chọn nó dựa trên thời gian peer khởi động lại và mức truyền lại bạn sẵn sàng chịu đựng.

Biết bạn đang khôi phục từ sự kiện nào

Ba sự cố trông giống nhau trên bảng điều khiển và cần các cài đặt khác nhau. Một kết nối ban đầu không bao giờ lên là vấn đề cấu hình hoặc khả năng tiếp cận. Một peer ngừng trả lời là trường hợp DPD. Một child bị peer đóng rõ ràng là sự kiện chính sách với close_action riêng của nó, mà DPD không bao giờ quan sát. Đọc nhật ký quanh thời điểm gián đoạn cho bạn biết bạn có cái nào trong ba, và câu trả lời thay đổi cách khắc phục.

Không thêm khởi tạo lại mạnh tay cho một kết nối mà người vận hành cố ý đóng để bảo trì, nếu không đường hầm sẽ xuất hiện lại giữa cửa sổ. Với thiết kế theo yêu cầu, một trap được giữ lại là đủ, vì lưu lượng khớp sẽ thiết lập lại child mà không cần bất kỳ bộ hẹn giờ nào.

Xác minh theo tên, không theo trạng thái daemon

Đọc kết nối và child của nó theo tên trong khi peer vẫn sập, rồi đọc lại khi nó quay lại; sự khác biệt giữa hai đầu ra đó là bằng chứng.

swanctl --initiate --child private-lan
swanctl --terminate --ike branch

Sau đó xác nhận dịch vụ chứ không phải liên kết. Một liên kết bảo mật child mới cùng một yêu cầu thành công tới đích riêng phía sau nó là cặp sự thật quan trọng, và một daemon đang chạy với một đường hầm không liên quan khỏe mạnh không chứng minh cả hai.

Nếu child không bao giờ khởi tạo, hãy kiểm tra xem lưu lượng thử nghiệm có khớp chính xác với các bộ chọn đã cấu hình không, kể cả giao thức và cổng. Nếu nó khởi tạo và thất bại, hãy đọc lỗi xác thực hoặc đề xuất thay vì giấu nó sau một vòng lặp vô tận, vì keyingtries=0 sẽ vui vẻ lặp lại một sự từ chối vĩnh viễn mãi mãi.

Nạp thay đổi trong một cửa sổ và kiểm tra lại

Reload an toàn hơn khởi động lại daemon, và nó vẫn không miễn phí: thay thế hoặc dỡ một child có thể đóng một liên kết đã khởi tạo hoặc làm rơi trap của nó.

Nạp trong một cửa sổ bảo trì, giữ tệp trước đó và xác nhận rằng kết nối xuất hiện với các cài đặt bạn dự định chứ không phải mặc định.

swanctl --load-conns
swanctl --list-conns

Quay lại bằng cách khôi phục tệp trước đó và nạp lại nó, sau đó lặp lại hai lệnh đó. Một đường hầm chỉ quay lại sau khi khởi động lại daemon không phải đã được sửa, mà đã bị đặt lại.

Bài viết liên quan