Warcraft II — про подключение к серверу и его настройку в 2024 году.
И о том, какие бывают сорта натов и что с ними делать.
В прошлом посте я рассказывал общие вещи об особенностях сетевой игры в Warcraft II и возникающих проблемах, а также о том, что наша команда сделала для их решения. Сегодня расскажу подробнее о том, как хитрые провайдеры создают нам — игрокам вар2 — проблемы.
Будет "еще больше букв", чем в прошлом посте, специально по заявкам подписчиков.
Итак: Вы подключаетесь к интернету с помощью роутера, на котором к примеру настроен вайфай (на вайфае сидят 3 телефона и планшет), а проводами подключены телевизор, комп, ноутбук и что-нибудь еще. Лет 15 назад большинство провайдеров выдавали хотя бы 1 адрес на абонента, т.е. на весь этот зоопарк домашних устройств.
Как роутер дает возможность всем Вашим домашним устройствам ходить в интернет если провайдер выделил Вам всего один айпи?
Ответ — NAT. (Network address translation). Подробности — в гугле, расписывать что такое NAT тут не буду.
А как дать возможность "интернету" ходить в гости на Ваши устройства? Помните из прошлого поста: "пакет, отправленный с компьютера любого из игроков должен доходить до каждого из компьютеров остальных игроков"?
Ответ — проброс портов через NAT.
Можно "попросить" роутер, чтобы все пакеты приходящие на порт UDP 6112 он перенаправлял к примеру на айпи 192.168.1.2 — внутренний адрес (внутри домашней сети) вашего любимого компа с варкрафтом.
Тогда Вы заходите на сервер, создаете игру, остальные игроки видят Ваш реальный ip-адрес (по сути адрес роутера) и стучатся на него. А пакеты благодаря правильно настроенному роутеру прилетают на тот комп, который Вы настроили. И обратно той же дорогой.
Но это было 15 лет назад.
Сейчас же все стало хуже: большинство провайдеров вообще перестали выдавать реальные айпи абонентам. Они обслуживают абонентов по такой же технологии через NAT.
Получается "НАТ за НАТом" — 2 уровня. И как тут быть? Провайдера не попросишь пробросить порт 6112 с "вашего" внешнего айпи, как можно было бы сделать на домашнем роутере.
Плохо. Приходится хитрить и применять разные трюки.
Один из трюков (варкрафтеры так и называют: lat trick) — кинуть пробный пакет товарищу по игре перед тем как он будет кидать пакет Вам. Провайдер "подумает" что пакет Вашего товарища это ответ Вам и доставит Вам его как ответ. (Ответы провайдер обязан доставлять — иначе бы интернет у Вас вообще не работал).
Именно эту технологию и автоматизирует hole puncher, который встроен в нашу сборку игры — War2Combat.
А что если оба игрока сидят на таких провайдерах — за NAT? Вы не знаете, как кинуть товарищу пробный пакет, если у него нет реального айпи. А он — Вам. Вы не можете друг с другом связаться!
К счастью, у нас есть наш замечательный сервер war2ru! И вот у него реальный айпи есть. И на нем работает серверная часть нашего замечательного hole puncher-а. Сервер знает игроков, которые зашли на сервер, знает их айпи-адреса и порты игры (помните я рассказывал, что порт 6112 можно переопределить?)
Итак, если игроки не могут связаться друг с другом напрямую — они спрашивают сервер, а сервер уже подсказывает им, как найти друг друга. А дальше — Вы кидаете друг другу пробные пакеты на адреса и порты подсказанные сервером, и оба провайдера дальнейшие пакеты пропускают, считая их ответами на предыдущие. Связь установлена!
Кстати, такая серверная часть есть только на нашем сервере — war2ru. Наша эксклюзивная разработка.
Но бывает все еще хуже:
Провайдеры используют разные реализации НАТов! Дело в том, что, чтобы пакет воспринимался как ответ на пакет, он должен придти точно на тот же айпи и порт, с которого был отправлен исходный пакет. Некоторые нехорошие реализации NAT подменяют порт отправителя! Причем подменяют его разными изощренными способами, в худшем случае у Вас вообще не получится поиграть!
Это была теория, а теперь — практика:
Наша команда, а точнее, один программист — fois — ведет разработку этих механизмов, в том числе и утилиты для определения Вашего типа NAT, (если вы пользуетесь интернетом через NAT).
Вот ссылка на его репозиторий на github’е:
https://github.com/FunkyFr3sh/Warcraft-II-Port-Test/releases
Даю ссылку, поскольку он регулярно обновляет свои программы — там всегда будет самая новая и актуальная версия.
Там же и описание (правда на английском):
Надо запустить программу и нажать Get. Оно проверит и покажет Ваш тип Nat.
А дальше — надо смотреть, какой будет результат:
— FullCone — у Вашего роутера прямой доступ к интернету, порт на нем проброшен. Hole Puncher Вам не требуется вообще.
— OpenInternet- у Вашего компьютера есть реальный айпи, проброс портов не нужен, Hole Puncher тем более не нужен.
— SymmetricUdpFirewall, RestrictedCone, PortRestrictedCone — разные типы НАТ, разные способы подмены портов, но hole punch поможет Вам эти проблемы обойти.
— UdpBlocked. Плохо. Провайдер (или кто-то еще) вообще не выпускает трафик на порт 6112. Поиграть конечно же не получится. Если конечно Вы не сами себе перекрыли выход наружу, что скорее всего. Про NAT тут говорить не приходится.
— Symmetric. Худший вариант NAT’а. Порты подменяются так, что никакой Hole Punch не сможет Вам помочь. Вы сможете отправлять пакеты другим игрокам а они Вам отвечать, но Вы не сможете создавать игры и не сможете играть в одной игре с теми, у кого так же Symmetric NAT.
Выход — только менять провайдера или менять тариф, или покупать реальный айпи, или покупать ВПН.
Команда war2ru.
Если вы дочитали до этого места — ставьте ЛАЙК!
#warcraft2 #варкрафт2 #вар2 #war2server
Добавить комментарий