Недавно я настроил 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?