1

Недавно я настроил VPN для игры в сетевые игры с друзьями. У меня есть сервер Linux, на котором запущен pptpd и я смог успешно подключиться в Windows с помощью VPN-клиента, встроенного в операционную систему. Я проверил, что VPN правильно маршрутизирует информацию между клиентами (включая широковещательные сообщения). На каждом клиенте создается виртуальный сетевой адаптер, которому в системе присвоен наивысший приоритет. Это означает, что все сетевые подключения используют его по умолчанию (например, веб-браузер), и он возвращается первым при выполнении запросов имен (например, результаты, возвращаемые API-интерфейсами сокетов, такими как getaddrinfo() и gethostbyname()). У меня проблема в том, что конкретная игра, в которую мы хотим играть, не привязывает свои сокеты UDP к правильному сетевому интерфейсу. Вместо этого игровой процесс явно привязывается к интерфейсу исходного сетевого подключения (эквивалент Windows eth0 или wlan0). Я хочу привязать его к адаптеру VPN (эквивалент Windows для ppp0).

Эта игра называется «Битва за Средиземье» от EA Games. В многопользовательском лобби локальной сети игра связывает сокет с портом UDP 8086. Он использует этот порт для отправки широковещательных дейтаграмм для оповещения других одноранговых узлов о доступности и получения оповещений от других одноранговых узлов. Если 8086 недоступен, он привязывается к следующему последовательному порту. По этой причине он отправляет копии одного и того же широковещательного сообщения на ряд портов (т. Е. 8086..8095). Как только игра началась, одноранговые узлы начинают посылать направленные дейтаграммы друг другу в отличие от широковещательных рассылок. Как сейчас, ни один из игрового трафика не попадает в VPN. Вот некоторые выходные данные netstat которые показывают игру, привязанную к сети 10.0.1.0/24 (выделенной домашним маршрутизатором), в отличие от сети 192.168.0.0/24 (выделенной сервером VPN):

UDP    10.0.1.18:137          *:*
UDP    10.0.1.18:138          *:*
UDP    10.0.1.18:1900         *:*
UDP    10.0.1.18:8086         *:*   this is BFME
UDP    10.0.1.18:51955        *:*
UDP    127.0.0.1:1900         *:*
UDP    127.0.0.1:51956        *:*
UDP    192.168.0.100:137      *:*
UDP    192.168.0.100:138      *:*
UDP    192.168.0.100:1900     *:*
UDP    192.168.0.100:51954    *:*

Очевидно, что игра избирательно выбирает, какой интерфейс она использует, что имеет смысл, учитывая, что ей необходимо заполнить локальную сеть пользователя сообщениями об обнаружении, чтобы определить адреса других пиров. Но разве VPN не должен обеспечивать ЛВС через интернет-соединение? Почему игра выбирает старый интерфейс, а не интерфейс VPN с более высоким приоритетом? Я думаю, что должна быть некоторая неясная настройка, которая позволяет Windows конфигурировать сеть VPN как локальную сеть; однако мне тяжело найти его.

Любая помощь в правильном направлении приветствуется!

Напоследок: я знаю, что игра использует функциональность NetBIOS (я опустил список импортируемых функций). Я также знаю (исторически), что если кто-либо из коллег не является членом одной и той же рабочей группы, они игнорируются. Может ли проблема, с которой я сталкиваюсь, быть связана с настройкой сети NetBIOS?

2 ответа2

0

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

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

0

Я смог решить эту проблему, используя опцию конфигурации, специфичную для рассматриваемой игры (на которую я наткнулся совершенно случайно, не случайно). Это позволило мне указать, какой интерфейс должна использовать игра. Это можно сделать, добавив следующую запись в файл Options.ini (расположенный в %USERPROFILE%\AppData\Roaming\My Battle For Middle-Earth Files\):

IPAddress = x.x.x.x

Где x.x.x.x - десятично-точечное представление адреса IPv4 интерфейса, который вы хотите использовать в игровом процессе.

Я никогда не понимал, почему игра игнорирует виртуальный интерфейс с более высоким приоритетом, поэтому я пришел к выводу, что это должно быть недостатком дизайна в разработке игры, а не то, что можно настроить в Windows.

Стоит также отметить, что я переключился на использование OpenVPN вместо pptpd поскольку он обеспечивал лучшую поддержку канального уровня (т.е. я мог соединить виртуальный адаптер сервера для лучшей обработки широковещательных кадров).

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