Sử dụng NAT Traversal để kết nối người dùng ở chế độ thụ động

Bài viết này là bản dịch miễn phí của một trong những mục trong Blog của nhà phát triển DC++.

Với sự cho phép của tác giả (cũng như để rõ ràng và thú vị), tôi đã tô màu nó bằng các liên kết và bổ sung một số nghiên cứu cá nhân.

Giới thiệu

Ít nhất một người dùng của cặp kết nối phải ở chế độ hoạt động tại thời điểm này. Cơ chế truyền tải NAT sẽ hữu ích khi chế độ hoạt động không được cấu hình ở cả hai bên. Điều này thường là do tường lửa hoặc thiết bị NAT chặn các kết nối đến.

Nếu cả hai máy khách đều ở chế độ hoạt động

Máy khách khởi tạo sẽ gửi lệnh chứa địa chỉ IP và cổng của chính nó $ConnectToMe tới một khách hàng khác. Sử dụng dữ liệu này, máy khách nhận được lệnh sẽ thiết lập kết nối với bộ khởi tạo.

Nếu một trong các máy khách ở chế độ thụ động

Thông qua trung tâm, một khách hàng thụ động A gửi lệnh $RevConnectToMe khách hàng đang hoạt động Bsau đó phản hồi bằng lệnh $ConnectToMe.

Sử dụng NAT Traversal để kết nối người dùng ở chế độ thụ động
Là một máy chủ S trong trường hợp trên có một trung tâm DC

Nếu cả hai máy khách đều ở chế độ thụ động trung tâm ADC

Khách hàng đằng sau các NAT khác nhau A и B đã tham gia trung tâm S.

Sử dụng NAT Traversal để kết nối người dùng ở chế độ thụ động
Đây là cách kết nối tới hub nhìn từ phía máy khách A

Hub chấp nhận các kết nối trên cổng 1511. Máy khách A thực hiện các kết nối đi từ mạng riêng của nó thông qua cổng 50758. Đến lượt mình, trung tâm sẽ nhìn thấy địa chỉ của thiết bị NAT, làm việc với nó và phát nó đến các máy khách theo mã định danh của chúng.

Khách hàng A gửi đến máy chủ S tin nhắn yêu cầu trợ giúp kết nối với khách hàng B.

Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991

Cũng ở chế độ thụ động, máy khách B, sau khi nhận được lệnh này, phải báo cáo cổng riêng của nó được sử dụng để kết nối với hub thông qua NAT.

Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991

Sau khi nhận được thông tin này khách hàng A ngay lập tức cố gắng thiết lập kết nối với khách hàng B và báo cáo cổng riêng của mình.

Hub:		[Outgoing][178.79.159.147:1511]	 	D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991

Mối quan tâm là gì? Mối quan tâm là chuyển điểm cuối của cùng một kết nối bằng cách tạo kết nối mới đến địa chỉ công cộng thông qua cổng riêng đã được sử dụng.

Sử dụng NAT Traversal để kết nối người dùng ở chế độ thụ động
Chơi lô tô!

Tất nhiên, trong trường hợp này máy khách NAT B có mọi quyền từ chối yêu cầu kết nối đầu tiên từ khách hàng A, nhưng yêu cầu của chính anh ta lại lao vào “lỗ hổng” do chính kết nối này tạo ra và kết nối được thiết lập.

Sử dụng NAT Traversal để kết nối người dùng ở chế độ thụ động
Hình minh họa phù hợp cho toàn bộ quá trình với lời cảnh báo rằng giao thức không sử dụng các cổng công cộng được mở bởi phiên NAT-S, cũng như các địa chỉ riêng.

Phần kết

Tại thời điểm viết bài viết (bản gốc), khoảng một nửa số máy khách DC đang làm việc ở chế độ thụ động. Điều này có nghĩa là không thể thực hiện được một phần tư số kết nối có thể có.

Thêm nữa DC++ sẽ có thể bỏ qua NATsử dụng các kết nối hiện có A-S и B-S để thiết lập kết nối trực tiếp giữa máy khách và máy khách, ngay cả khi A и B đang ở chế độ thụ động.

Nguồn: www.habr.com

Thêm một lời nhận xét