Даже игры, которые на 100% клиент / сервер, иногда имеют проблемы, когда клиент находится за NAT. Игры Peee-Peer - еще большая проблема. В некоторых играх необходимо использовать несколько транспортов (например, UDP и TCP) или несколько подключений (например, другой порт UDP для голоса).
Какими способами можно убедиться, что игра работает надежно при работе за маршрутизатором NAT?
- Одноранговый: централизованный сервер не существует. Игрок A начинает игру, а игрок B хочет присоединиться
- Клиент-сервер: централизованный сервер по общеизвестному адресу (имя хоста) принимает все входящие соединения. Каждый клиент общается только с этим сервером.
- Комбо: Там, где сервер только подыскивает, а обновления игры равноправны. Разные одноранговые узлы могут видеть каждого проигрывателя с разным IP / портом (например, некоторые клиенты находятся за одним и тем же NAT, а другие - на другом маршрутизаторе).
источник
Не заставляйте клиента сообщать серверу или пиру о своем собственном адресе. Другими словами, не встраивайте IP-адрес клиента A в игровой пакет, а клиент B или сервер отвечают на этот адрес. Всегда отвечайте на адрес / порт, с которого пришло сообщение.
Минимизируйте различные порты UDP или TCP, используемые для игры. Это упрощает настройку правил NAT.
Разрешить пользователю переопределить порт по умолчанию, используемый в игре. Таким образом, несколько серверов могут быть размещены за одним и тем же NAT.
источник
Наряду с другими ответами, используйте существующее колесо: http://miniupnp.free.fr/ Эта библиотека борется почти со всеми неудобствами в функциональной форме, давая вам контроль над тем, когда и как пробивать и тянуть :)
источник