2009-10-02 3 views
11

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

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

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

+1

Вы могли бы лучше удачи на serverfault.com – NotMe

+0

Я полагаю, этот вопрос, как написать сервер для работы за NAT, а не как настроить Это. –

ответ

0

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

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

+1

Пробивка отверстий AFAIK, как это работает только для UDP, и только если сопоставление портов UDP согласовано на маршрутизаторе. –

+0

ах .. он действительно говорит TCP в вопросе .. –

+0

Я читал о отверстиях, пробив отверстиях, будет ли работа пробивки отверстий TCP? Однако это может быть непросто реализовать, но я попробую попробовать, поскольку это похоже на то, что я ищу. Спасибо. – Chetane

1

Вы должны либо:

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

  2. Создать прокси-сервер, сидя Inbetween 2 физ gatewys так как ваш сервер и клиент может подключиться к этому. Оба сервера и клиента должны установить соединение с этим прокси-сервером , который будет оповещать данные между этими двумя соединениями.

+0

Hi, Я предусмотрел это решение, единственная проблема с этим решением заключается в том, что нагрузка будет значительной на прокси, это дорого. – Chetane

6

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

+0

, но не UPnP - это просто способ автоматизации автоматизации переадресации портов? –

+1

Ключ * автоматизация * - Я предполагаю, что «он» в вопросе - это пользователь. Избегать ручной настройки перенаправления портов - это и красота, и опасность UPnP. –

0

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

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