Как заставить 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/