Cách NAT traversal bọc ESP bên trong UDP
ESP không có cổng, nên NAT traversal bọc nó trong UDP ở cổng 4500. Kiểm tra trao đổi điều khiển và đường dữ liệu được đóng gói như hai giai đoạn riêng biệt.
Hai máy khách sau cùng một bộ định tuyến nói chuyện với một cổng IPsec, và một bên liên tục rớt trong khi bên kia vẫn kết nối. ESP gốc là giao thức IP số 50 không có cổng, nên bộ dịch không có gì để neo ánh xạ khi nhiều máy khách dùng chung một địa chỉ. NAT traversal lấp khoảng trống đó bằng cách bọc ESP trong UDP ở cổng 4500, và tiêu đề đó giải thích phần lớn các triệu chứng tiếp theo. Nó cũng chỉ ra thiết bị cần thay đổi.
Vì sao mặt phẳng dữ liệu chuyển sang cổng 4500
Trong quá trình thiết lập, IKEv2 so sánh các địa chỉ và cổng mà mỗi bên cho là đang dùng, bằng cách trao đổi hash trong thông báo phát hiện NAT. Khi các hash không khớp, có một bộ dịch ở đâu đó trên đường đi, và cả hai bên chuyển lưu lượng được bảo vệ sang đóng gói UDP. Đó là lý do một phiên đã gặp bộ dịch trông khác với phiên không gặp.
Lớp bọc là một phong bì, không phải thay đổi giao thức: ESP giữ nguyên tiêu đề, kiểm tra toàn vẹn và mã hóa của nó, và UDP chỉ cung cấp các cổng mà bộ dịch cần. Cổng 500 mang trao đổi IKE; cổng 4500 mang dữ liệu được đóng gói sau khi phát hiện, và thường cả các thông điệp IKE về sau. Không cổng nào biến luồng thành kết nối TCP, một giả định khiến hầu hết người đọc bản bắt gói hiểu sai.
Kiểm tra hai giai đoạn theo thứ tự
Trước tiên chứng minh trao đổi điều khiển, sau đó là đường dữ liệu, và giữ hai thứ tách biệt trong ghi chú của bạn. Một bản bắt gói cho thấy lưu lượng trên 500 và không bao giờ trên 4500 thường có nghĩa đường dữ liệu bị lọc, nên cách sửa nằm ở quy tắc tường lửa chứ không phải ở máy khách.
Theo dõi cả hai cổng bằng tcpdump -ni any 'udp port 500 or udp port 4500', và đọc bảng dịch trên bộ định tuyến khi phiên đang hoạt động. Bảng đó cho thấy cổng nguồn mà cổng vào thực sự sẽ thấy, và bản bắt gói trên máy tính xách tay khác đi theo thiết kế: máy tính xách tay tin là 500 trong khi cổng vào thấy 4500 với cổng nguồn đã dịch, và cả hai đều đúng. Cùng một luồng, trước và sau khi dịch:
client 192.0.2.10:500 -> router 203.0.113.7:62000 -> gateway 198.51.100.9:4500
Các triệu chứng mà lớp bọc giải thích, và hai trường hợp thì không
Một bộ định tuyến cho phép trao đổi điều khiển nhưng chặn dữ liệu đã đóng gói tạo ra báo cáo "đường hầm đã lên nhưng không có gì đi qua". Bảng ánh xạ hết hạn, nên một phiên nhàn rỗi cần lưu lượng duy trì mà các bên gửi có chủ đích, và những gói đó không phải kiểm tra sức khỏe. Khi nhiều máy khách sau một cổng vào cùng thất bại, hãy xem xét bản dịch của cổng vào đó và bất kỳ tính năng chuyển tiếp cũ nào. Lớp bọc không giải thích một ứng dụng thất bại ở mọi máy khách sau khi đường hầm lên, cũng không giải thích cảnh báo chứng chỉ trên trang chặn; cả hai nằm trên tầng này.
Đọc bảng ánh xạ cho hai máy khách cùng lúc: nếu cả hai hiển thị cùng một cổng đã dịch, thiết bị không tách chúng theo cách cổng vào yêu cầu. Một chế độ chuyển tiếp chỉ trao ESP gốc cho một máy chủ không tương đương với phục vụ nhiều máy khách đã dịch, dù các nhà cung cấp mô tả cả hai là thân thiện với IPsec. NAT kép thêm một lớp ánh xạ và một điểm hết hạn nữa, nhưng không tự động cắt kết nối đi ra.
Lưu lượng duy trì xứng đáng có dòng riêng trong sổ tay vận hành, vì nó giữ đường phản hồi mở trong các giai đoạn rảnh. Bật nó ở nơi nhà cung cấp ghi tài liệu, và kiểm tra nó trước tiên khi một phiên chết sau vài phút im lặng chứ không phải ở lần dùng đầu.
Thay đổi chủ sở hữu của ánh xạ, rồi kiểm tra lại
Làm theo các cài đặt NAT traversal được hỗ trợ ở cả hai bên thay vì đoán một cổng. Sửa cổng nguồn cục bộ trên một máy khách không thể thay đổi dịch vụ đang lắng nghe ở đầu kia, và thường phá vỡ ánh xạ đã dựng. Nếu máy khách nằm sau một thiết bị bạn không kiểm soát, thay đổi thuộc về chủ sở hữu của nó.
Sau mọi thay đổi, lặp lại cả hai bước kiểm tra giai đoạn và xác nhận rằng một gói dữ liệu đi qua, không chỉ rằng màn hình trạng thái đã chuyển xanh. Giữ các tuple, đầu ra của bảng ánh xạ và thay đổi quy tắc trong một ghi chú, để người tiếp theo không bắt đầu lại từ trao đổi điều khiển. Ghi chú của strongSwan về NAT traversal bao gồm các cài đặt đóng gói và duy trì phía sau cả hai giai đoạn.