2009-10-02 15 views
11

Kịch bản như sau. Tôi có hai máy A và B: A: Máy khách (phía sau NAT) B: Máy chủ (phía sau NAT)Làm cách nào để làm cho máy chủ TCP hoạt động phía sau bộ định tuyến (NAT) mà không cần bất kỳ cấu hình chuyển hướng nào cần thiết

Tôi muốn B có thể nghe trên bất kỳ cổng nào, để A có thể gửi gói tin đến B qua cổng TCP cụ thể đó và nhận bất kỳ phản hồi nào. Nếu cả hai máy không phải là một NAT thì nó là quá trình foward khá thẳng. Tuy nhiên làm thế nào để tôi làm cho nó hoạt động để nó hoạt động ngay cả khi B ở đằng sau một bộ định tuyến, mà không cần phải thay đổi cấu hình bộ định tuyến cho phép một số cổng chuyển tiếp, v.v ...

Ví dụ, làm thế nào để ngang hàng các chương trình như khách hàng torrent hoạt động mà không cần người dùng có bất cứ điều gì để cấu hình?

+1

Bạn có thể có may mắn hơn về serverfault.com – NotMe

+0

tôi giả sử câu hỏi này là làm thế nào để viết các máy chủ để làm việc đằng sau NAT, chứ không phải là làm thế nào để cấu hình nó. –

Trả lời

0

Phương án thay thế cho máy chủ proxy là máy chủ kết hợp. Thay vì ủy quyền tất cả lưu lượng truy cập, nhà sản xuất đối sánh chỉ thương lượng cho đến khi các đồng nghiệp có thể nói chuyện với nhau. Điều này liên quan đến việc tìm kiếm các IP công cộng bên ngoài của các đồng nghiệp và nói chuyện với nhau để tường lửa/bộ định tuyến biết rằng các đồng nghiệp muốn giao tiếp.

Điều này được gọi là hole punching và thường phải được thực hiện bởi nhà sản xuất đối sánh chứ không phải chính các công ty khác. Một khi lỗ được đục lỗ mặc dù, các nhà sản xuất trận đấu có thể nói với các đồng nghiệp về nhau và họ có thể giao tiếp trực tiếp.

+1

Cú đấm lỗ AFAIK như thế này chỉ hoạt động đối với UDP - và chỉ khi ánh xạ cổng UDP nhất quán trên bộ định tuyến. –

+0

ah .. anh ấy nói TCP trong câu hỏi .. –

+0

Tôi đọc về lỗ đục lỗ, liệu lỗ hổng TCP có hoạt động không? Tuy nhiên nó có thể không dễ dàng để thực hiện nhưng tôi sẽ thử nó vì đây có vẻ là những gì tôi đang tìm kiếm. Cảm ơn. – Chetane

1

Bạn sẽ phải hoặc là:

  1. Thiết lập cổng chuyển tiếp từ cổng nat trước máy chủ vào máy phần mềm máy chủ của bạn đang chạy, và có khách hàng kết nối với địa chỉ IP của rằng cổng.

  2. Tạo máy chủ proxy đang ngồi giữa 2 cổng phụ nat vì vậy cả máy chủ và ứng dụng khách của bạn có thể kết nối với điều đó. Cả máy chủ và ứng dụng khách của bạn phải thiết lập kết nối với proxy sẽ dàn xếp dữ liệu giữa hai kết nối đó.

+0

Xin chào, Tôi đã dự tính giải pháp đó, vấn đề duy nhất với giải pháp này là tải sẽ đáng kể trên proxy, điều này tốn kém. – Chetane

6

Để trả lời các ví dụ về Peer to Peer chương trình, và nói chung: Có một công nghệ gọi là Universal Plug and Play mà router NAT có thể sử dụng để cho phép khách hàng phía sau họ để lộ các cổng ra bên ngoài. Đó là những gì khách hàng bittorrent có thể sử dụng để các khách hàng khác có thể kết nối trực tiếp với họ.

+0

nhưng không phải là UPnP chỉ là một cách để tự động hoá cổng tự động hóa chuyển tiếp? –

+1

Điều quan trọng là * tự động hóa * - tôi cho rằng 'anh ta' trong câu hỏi là người dùng. Tránh phải tự thiết lập cổng chuyển tiếp là cả vẻ đẹp và sự nguy hiểm của UPnP. –

0

Việc đục lỗ được hiểu khá rõ về truyền thông UDP, nhưng nó có thể được sử dụng một cách đáng tin cậy để thiết lập các luồng TCP ngang hàng. Dưới đây là bài viết tốt chi tiết trên cả hai giao thức TCP và UDP:

http://www.brynosaurus.com/pub/net/p2pnat/