Как заставить TCP-сервер работать за маршрутизатором (NAT) без необходимости настройки перенаправления

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

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

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

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