Как заставить TCP-сервер работать за маршрутизатором (NAT) без какой-либо настройки перенаправления - PullRequest
11 голосов
/ 03 октября 2009

Сценарий следующий. У меня есть две машины A и B: A: Клиент (за NAT) B: Сервер (за NAT)

Я хочу, чтобы B мог прослушивать любой заданный порт, чтобы A мог отправлять пакеты в B через этот конкретный порт TCP и получать любой ответ. Если обе машины не находятся за NAT, это довольно прямой процесс. Однако, как я могу заставить его работать так, чтобы он работал, даже когда B находится позади маршрутизатора, без необходимости менять конфигурацию маршрутизатора, включить переадресацию портов и т.д.

Например, как работают одноранговые программы, такие как торрент-клиенты, без настройки пользователем?

Ответы [ 4 ]

6 голосов
/ 03 октября 2009

Чтобы ответить на пример программ Peer to Peer, и в целом: существует технология под названием Universal Plug and Play , которую маршрутизаторы NAT могут использовать, чтобы позволить клиентам позади них открывать порты для внешних устройств. Это то, что могут использовать клиенты bittorrent, чтобы другие клиенты могли напрямую к ним подключаться.

1 голос
/ 03 октября 2009

Вам придется либо:

  1. Настройка переадресации портов с нат шлюз перед сервером в машину, на которой запущено программное обеспечение вашего сервера, и клиент подключиться к IP-адресу этого шлюз.

  2. Создание прокси-сервера сидя между 2 nat Gatewys так оба ваш сервер и клиент могут соединиться к этому. И ваш сервер и клиент должны установить соединение с этим прокси, который будет опосредовать данные между этими 2 соединениями.

0 голосов
/ 25 ноября 2015

Перфорация отверстий умеренно хорошо понятна для связи UDP, но она также может быть надежно использована для настройки одноранговых потоков TCP. Вот подробная статья о TCP и UDP:

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

0 голосов
/ 03 октября 2009

Альтернативой прокси-серверу является сервер совпадений. Вместо того чтобы проксировать весь трафик, создатель матча просто договаривается, пока одноранговые узлы не смогут общаться друг с другом. Это включает в себя поиск внешних общедоступных IP-адресов узлов и общение с каждым из них, чтобы брандмауэр / маршрутизатор знал, что узлы хотят установить связь.

Это называется пробивание отверстий , и часто это должен делать создатель матча, а не сами сверстники. Однако, после того, как дырка пробита, создатель матча может рассказать коллегам друг о друге, и они могут общаться напрямую.

...