Nguyên lý hoạt động của NAT Traversal (2020)
(tailscale.com)Nguyên lý hoạt động của NAT Traversal
-
Vấn đề cơ bản: Giải quyết bài toán thiết lập kết nối peer-to-peer giữa hai máy. Trong trường hợp của Tailscale, mục tiêu là thiết lập tunnel WireGuard®. Công nghệ này được dùng trong nhiều lĩnh vực như WebRTC, điện thoại VoIP, trò chơi trực tuyến, v.v.
-
Giao thức dựa trên UDP: NAT Traversal cần một giao thức dựa trên UDP. Có thể dùng TCP, nhưng độ phức tạp sẽ tăng và có thể cần tùy chỉnh kernel.
-
Điều khiển trực tiếp socket mạng: Cần quyền kiểm soát trực tiếp các socket gửi và nhận gói tin mạng. Không thể đi qua NAT bằng cách dùng thư viện mạng có sẵn.
-
Sử dụng proxy cục bộ: Khi không thể truy cập socket trực tiếp, có thể dùng proxy cục bộ để thực hiện NAT Traversal và truyền tiếp gói tin.
Hiểu về tường lửa
-
Tường lửa theo dõi trạng thái: Hầu hết các thiết bị NAT đều tích hợp tường lửa stateful, tức là ghi nhớ các gói tin đã thấy trước đó và dùng nó khi xử lý gói mới.
-
Quy tắc lưu lượng UDP: Tường lửa cho phép gói UDP đến phù hợp với gói UDP đi ra trước đó.
-
Xử lý tường lửa: Nếu tất cả tường lửa đều cùng hướng, thì gần như là tái tạo mô hình client/server. Nhưng vấn đề phát sinh khi hai client cố gắng truyền trực tiếp cho nhau.
Vượt qua tường lửa
-
Giải quyết mà không cần tái cấu hình tường lửa: Cần một cách xử lý không phải cấu hình lại tường lửa. Nếu gói UDP có đúng địa chỉ nguồn và đích, gói được xem như phản hồi sẽ được phép.
-
Chia sẻ thông tin: Các peer phải biết trước thông tin ip:port của đối phương. Để làm được việc này, dùng máy chủ điều phối để đồng bộ thông tin ip:port.
Bản chất của NAT
-
Thiết bị NAT: Thiết bị NAT chỉnh sửa gói tin, đặc biệt là Source NAT (SNAT) gây ra vấn đề. Nó được dùng để kết nối nhiều thiết bị ra Internet.
-
Dò tìm NAT: Vì NAT chỉnh sửa gói tin nên hai peer không thể biết ip:port của nhau. Giao thức STUN giúp hỗ trợ việc dò tìm NAT.
STUN và việc dò tìm NAT
-
Giao thức STUN: Khi một client sau NAT giao tiếp với server trên Internet, server có thể nhìn thấy ip:port công khai do thiết bị NAT tạo ra. STUN server sẽ cung cấp thông tin này cho client.
-
Giới hạn: STUN chỉ hoạt động trong một số trường hợp; đặc biệt dễ thất bại ở các NAT gateway được quảng cáo như thiết bị bảo mật.
Giải pháp bổ sung
-
Sử dụng relay: Khi kết nối trực tiếp thất bại, dùng relay để truyền gói tin để hai bên có thể giao tiếp mà không bị can thiệp.
-
Giao thức DERP: Tailscale dùng DERP (Detoured Encrypted Routing Protocol) để relay dữ liệu và hỗ trợ dò tìm NAT.
-
Giao thức ánh xạ cổng: Có thể yêu cầu thiết bị NAT hoạt động thân thiện hơn bằng các giao thức ánh xạ cổng như UPnP IGD, NAT-PMP và PCP.
Chưa có bình luận nào.