Cổng UDP đục lỗ NAT


8

Tôi vừa đọc một bài viết về quá trình "đục lỗ" với giao thức UDP. Tôi hiểu nó đã được thực hiện như thế nào, nhưng tôi có một câu hỏi cuối cùng để làm sáng tỏ mọi thứ. Chúng tôi có máy chủ điểm hẹn và máy khách A, B.

Máy khách A đã đục một lỗ cho máy khách B. Máy khách B nhận được NAT IP và cổng NAT từ máy chủ điểm hẹn và bắt đầu gửi dữ liệu đến cùng một cổng với máy chủ điểm hẹn. Giả sử tôi tình cờ biết một cổng thứ hai mà NAT đã mở cho các kết nối UDP. Tôi có thể gửi các gói của mình thông qua cổng thứ hai này không? Hoặc cổng được phân biệt cho mọi kết nối UDP đi? Nếu vậy, tại sao chúng ta có thể sử dụng cùng một cổng cho Máy khách B và máy chủ điểm hẹn? NAT sẽ không mở một cổng mới khi Client A đục lỗ và Client B phải biết cổng nào NAT mở cho kết nối cụ thể này?

Tôi hy vọng câu hỏi của tôi là một phần dễ hiểu.

Câu trả lời:


6

Thiết bị NAT sẽ giữ một bảng với các kết nối hiện đang mở để có thể gửi các gói trả về đến máy chủ nội bộ đã mở kết nối. Một mục trong bảng trạng thái có thể trông giống như thế này:

IP nguồn nội bộ | Cổng nội bộ | Cổng ngoài S | IP đích | Cổng D.
192.168.1.12 10123 10123 203.0.113.1 5555

Khi một gói được nhận (từ phía bên ngoài), thiết bị NAT sẽ kiểm tra IP nguồn , Cổng nguồnCổng đích của gói và so sánh nó với Destination IP, D-PortExternal S-Portcác trường trong bảng kết nối của nó. Khi nó tìm thấy một trận đấu nó sẽ chuyển tiếp các gói tin đến Internal Source IPtrên Internal S-Port.

Việc đục lỗ UDP phụ thuộc vào thực tế là Cổng nguồn bên trong và bên ngoài giống nhau. Đây thường là trường hợp trừ khi bạn có máy chủ nội bộ thứ hai sử dụng cùng một cổng Nguồn để kết nối với cùng một tổ hợp Đích / Cổng ngoài.

Khi chúng tôi giả định rằng Cổng S bên trong và bên ngoài giống nhau thì cả hai máy khách A, B có thể giao tiếp cổng nguồn của chúng với máy chủ điểm hẹn, sau đó sẽ chuyển tiếp thông tin trở lại máy khách khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.