Я создал простую утилиту для Warcraft III, которая позволяет пользователям присоединяться к играм, размещенным на удаленном компьютере, так же, как если бы они были доступны в их локальной сети. Его идея довольно проста:

  1. Игроки А и Б хотят играть. Они настраивают переадресацию портов на своих маршрутизаторах, запускают мою утилиту и обмениваются своими внешними IP-адресами.
  2. Игроки затем вводят IP-адреса друг друга в мою утилиту, и один из игроков создает игру Warcraft III.
  3. Моя утилита использует формат пакета Warcraft III для запроса локального компьютера о любых играх с Warcraft III. Если он получает ответ (с информацией об игре), он просто перенаправляет его на каждый IP в списке.
  4. Благодаря переадресации портов пакет (точнее, датаграмма) достигает другого экземпляра Warcraft III, и теперь другой пользователь может видеть игру своего друга, а также присоединиться к ней.

Это работает очень хорошо. Тем не менее, он по-прежнему требует, чтобы пользователи настраивали переадресацию портов, и вот мой вопрос - как лучше всего избежать этого?

Я думал о UPnP / NAT-PMP, но это особенно полезно, когда слушает мое приложение. В этом случае я только уведомляю Warcraft III на другом конце, что на моей машине есть игра. Но можно ли создать сопоставление портов для другого приложения?

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

1 ответ1

2

Не существует надежного стандартного способа указать удаленной системе в другой сети с NAT для открытия порта для приложения в локальной системе.

У вас есть три основных метода, чтобы избежать настройки пользователем переадресации портов в большинстве приложений:

A. Сообщите пользователю, что он SOL, если только он напрямую не подключает свой компьютер или устройство к Интернету, интернет-провайдер которого не блокирует входящий трафик. Это плохая идея.

Б. Скажите маршрутизатору открыть порт программным способом, используя что-то вроде uPNP. Это предполагает, что их маршрутизатор поддерживает это.

C. Наличие хорошо известной системы вне какой-либо сети NAT, с которой клиенты могут устанавливать исходящие соединения. Эта система также может нуждаться в пересылке трафика от имени клиентов.

Правильный термин для "эмулятора локальной сети" - это виртуальная частная сеть. Hamachi и OpenVPN - два пакета программного обеспечения, которые устанавливают VPN. Я держу пари, что Гарена, как упомянуто @gronostaj, работает аналогично с дружественным к геймерам интерфейсом.

VPN будет относиться к категории C - для работы вам понадобится VPN-сервер, доступный вне чьего-либо NAT. VPN будет работать хорошо - виртуальная сеть будет функционировать так же, как локальная сеть, и системы, которые находятся в VPN, могут получать входящие соединения от любой другой системы в VPN.

Я почти уверен, что вы не хотите нести расходы и ответственность за использование централизованно доступной VPN - не говоря уже о том, что ограничить его использование только Warcraft будет сложно и намного больше ответственности.

Я не очень часто использовал Hamachi, поэтому не уверен, что вы сможете использовать его для достижения того, чего хотите.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .