Đường hầm đầy đủ trong strongSwan cần 0.0.0.0/0 ở cả hai phía
Đường hầm đầy đủ cần 0.0.0.0/0 làm remote_ts của máy khách và local_ts của cổng, cùng với chuyển tiếp, NAT và tuyến quay về. Hãy kiểm tra cả bốn.
Một kết nối strongSwan hoạt động cho một mạng con riêng sẽ không chuyên chở lưu lượng internet chỉ vì ai đó đã sửa một dòng. Đường hầm đầy đủ là thỏa thuận giữa hai bên về việc child SA bảo vệ những địa chỉ nào, và mỗi bên gọi bên kia theo quan hệ với chính mình. Làm đúng một phía và sai phía kia, child SA hoặc không dựng lên hoặc dựng lên hẹp hơn dự định. Năm kiểm tra dưới đây theo thỏa thuận đó từ máy khách, qua cổng, ra internet.
Trước tiên hãy kiểm tra bộ chọn của máy khách
Máy khách mô tả thứ nó muốn bảo vệ ở phía xa là remote_ts, và mọi thứ nó gửi đi đều xuất phát từ địa chỉ được cấp của chính nó. Với lưu lượng internet, giá trị đó phải bao phủ các đích mà người dùng thực sự sẽ tới, mà trên thực tế nghĩa là toàn bộ không gian IPv4. Một máy khách vẫn liệt kê một mạng con là đang yêu cầu đường hầm chia tách, bất kể hồ sơ trong giao diện tên là gì. Phía nguồn thường là dynamic vì địa chỉ được cấp khi kết nối. Một nguồn cố định ghi ở đó sẽ hỏng ngay khi nhóm địa chỉ thay đổi.
children {
net {
local_ts = dynamic
remote_ts = 0.0.0.0/0
}
}
Đoạn này không phải tệp kết nối đầy đủ, và nó giả định xác thực, danh tính và nhóm địa chỉ ảo đã được cấu hình. Bộ chọn nguồn của máy khách và địa chỉ máy chủ cấp vẫn phải khớp nhau, nếu không child SA dựng lên với phạm vi mà không bên nào lường trước. Hãy nạp nó bằng swanctl --load-all và đọc kết quả trước khi cho là thành công. Một tệp phân tích được vẫn có thể bị từ chối vì bộ chọn không giao với đề nghị của bên kia.
Kiểm tra bộ chọn của cổng ở phía của nó
Cổng đọc cùng khái niệm từ hướng ngược lại. Các đích internet là cục bộ với cổng, nên local_ts của nó là cái rộng và remote_ts mô tả nhóm máy khách. Sự đảo ngược đó là lỗi phổ biến nhất trong cấu hình đường hầm đầy đủ, và nó sống sót qua rà soát vì cả hai dòng trông hợp lý khi đứng riêng.
children {
rw {
local_ts = 0.0.0.0/0
remote_ts = 10.77.0.0/24
}
}
Sao chép đoạn của máy khách vào tệp của cổng tạo ra một cặp bộ chọn không mô tả gì hữu ích, vì cả hai phía sẽ đòi cùng một vai trò. Hướng dẫn chuyển tiếp của strongSwan ghi rõ việc ghép máy khách và cổng, và nên đọc nó bên cạnh tệp kết nối thay vì sau khi hỏng. Tệp của cổng cũng cần định nghĩa nhóm mà remote_ts tham chiếu. Một bộ chọn nêu tên nhóm không tồn tại sẽ nạp mà không phàn nàn và hỏng khi kết nối.
ipsec.conf cũ dùng vai trò trái và phải với các khóa khác nhau, và dòng rightsubnet không phải là thay thế trực tiếp cho giá trị swanctl. Hãy giữ hai cú pháp trong các tệp riêng thay vì dán cái này vào cái kia. Trộn chúng trong một thư mục là cách một kết nối đang chạy âm thầm quay lại sau khi khởi động lại.
Kiểm tra child SA đã thương lượng, không phải tệp
Một cấu hình đã lưu chứng minh ý định và không hơn thế. Bên kia có thể thu hẹp thứ đã yêu cầu, và một child SA đang tồn tại không bị thay thế chỉ vì tệp bên dưới đã đổi. Xác nhận thứ thực sự được cài trước khi thay đổi bất cứ điều gì khác.
swanctl --list-conns
swanctl --list-sas
ip xfrm policy list
Lệnh đầu cho thấy daemon đã nạp gì, lệnh thứ hai cho thấy các child SA đã thiết lập, và lệnh thứ ba cho thấy các chính sách mà nhân sẽ áp dụng. Nếu tệp nói 0.0.0.0/0 mà danh sách chỉ một mạng con, thương lượng đã thu hẹp phạm vi và đọc lại tệp sẽ không giải thích được. Kết thúc child, khởi động lại và so sánh cả ba đầu ra lần nữa. Một child quay về với cùng phạm vi hẹp là do phía xa thu hẹp chứ không phải tệp cục bộ, và đó là cuộc trò chuyện với quản trị viên kia chứ không phải sửa cục bộ.
Hãy đọc cả hai hướng trong danh sách chính sách, vì một đường hầm cài một hướng mà không cài hướng kia là vấn đề định tuyến trong bộ áo cấu hình. Chính sách xuôi và ngược phải nêu cùng một cặp bộ chọn theo ảnh gương, và tấm gương thiếu là lỗi ở daemon hoặc ở đề nghị chứ không phải ở văn bản bộ chọn.
Kiểm tra chuyển tiếp và tuyến quay về
Một bộ chọn cho lưu lượng vào cổng, nhưng không khiến cổng định tuyến lưu lượng đó đi tiếp. Chuyển tiếp phải được bật, tường lửa phải cho phép luồng, và câu trả lời phải tìm được đường về nhóm máy khách. Đó là ba yêu cầu riêng biệt, và mỗi yêu cầu hỏng với một triệu chứng khác. Một quy tắc chuyển tiếp thiếu hành xử như hố đen, trong khi một tuyến quay về thiếu hành xử như đường hầm một chiều.
sysctl net.ipv4.ip_forward
iptables -t nat -S | grep -i masq
ip route get 1.1.1.1
Địa chỉ máy khách riêng thường cần dịch nguồn có chủ đích trước khi rời giao diện công cộng, trong khi một cấp phát được định tuyến rõ ràng cần cách xử lý khác. Nếu có NAT, hãy giữ các ngoại lệ mà cách triển khai hỗ trợ để lưu lượng mà chính sách bảo mật phải kiểm tra không bị dịch vượt qua nó. Một quy tắc masquerade rộng sao chép từ cổng khác thay đổi nhiều luồng hơn tác giả của nó định. Chỉ viết quy tắc cho nhóm máy khách, và để lại bình luận giải thích vì sao nó tồn tại.
Trên máy khách, hãy xác nhận các tuyến mà backend đã cài thay vì các tuyến bạn giả định. Một trình quản lý bị tắt cài tuyến cần một thiết kế định tuyến được duy trì thủ công, và thiết kế đó phải được cập nhật mỗi khi đường hầm thay đổi. Kiểm tra bảng định tuyến sau khi kết nối lại, không chỉ sau khi khởi động mới.
Kiểm tra những gì đường hầm vẫn chưa bao phủ
Cặp bộ chọn chỉ bao phủ IPv4 và không gì khác. IPv6, DNS và mọi chính sách ở mức ứng dụng là những quyết định riêng mà một bộ chọn IPv4 rộng lặng lẽ bỏ qua. Một đường hầm chở mọi gói IPv4 vẫn có thể làm rò rỉ mọi tra cứu tên.
Hãy nêu rõ đường DNS dự định, vì một đường hầm đầy đủ vẫn phân giải tên qua trình phân giải cục bộ sẽ làm rò rỉ truy vấn ra ngoài đường hầm và phá vỡ tên riêng. Nếu máy khách được cấp địa chỉ IPv6, họ địa chỉ đó cần cách xử lý tương tự, nếu không máy chủ sẽ ưu tiên một đường mà đường hầm không bảo vệ. Hãy thử với một tên mà chỉ phía riêng trả lời được, và coi câu trả lời công cộng là rò rỉ.
resolvectl query intranet.example.internal
traceroute -n 1.1.1.1
Xác nhận chuỗi bằng hai lệnh đó cùng các bộ chọn đã thương lượng từ danh sách trên. Nếu traceroute cho thấy router cục bộ là chặng đầu, lưu lượng không dùng đường hầm bất kể bộ chọn nói gì. Truy cập internet chỉ đầy đủ khi lưu lượng được chọn được chấp nhận, chuyển tiếp và trả về qua cổng đã thiết kế. Tìm thấy 0.0.0.0/0 trong một hồ sơ là khởi đầu của chuỗi đó, không phải bằng chứng.