Игровой процесс не привязывает сокет UDP к интерфейсу VPN

400
Roger Gee

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

1

2 ответа на вопрос

0
Roger Gee

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

IPAddress = x.x.x.x 

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

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

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

0
OvenCrate

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

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

Добро пожаловать в Супер пользователя. Внешние ссылки могут сломаться или быть недоступными, в этом случае ваш ответ не будет полезен. Пожалуйста, включите необходимую информацию в свой ответ и используйте ссылку для атрибуции и дальнейшего чтения. Благодарю. fixer1234 7 лет назад 0