O processo de jogo não liga o socket UDP à interface VPN

1

Eu configurei recentemente uma VPN para jogar jogos de LAN com alguns amigos. Eu tenho um servidor Linux executando pptpd e consegui conectar com sucesso no Windows usando o cliente VPN incorporado ao sistema operacional. Eu testei que a VPN direciona corretamente as informações entre os clientes (incluindo mensagens de difusão). Ele cria um adaptador de rede virtual em cada cliente que recebe maior prioridade no sistema. Isso significa que todas as conexões de rede usam por padrão (por exemplo, um navegador da Web) e são retornadas primeiro ao fazer consultas de nome (por exemplo, resultados retornados de APIs de soquete como getaddrinfo() e gethostbyname() ). O problema que estou tendo é que o jogo em particular que queremos jogar não é vincular seus soquetes UDP à interface de rede correta. O processo de jogo, em vez disso, vincula-se explicitamente à interface da conexão de rede original (o equivalente do Windows de eth0 ou wlan0 ). Eu quero ligar para o adaptador VPN (o equivalente do Windows ppp0 ).

Este jogo em particular é chamado Battle For Middle-Earth pela EA Games. Quando dentro do lobby multiplayer da LAN, o jogo liga um socket à porta UDP 8086. Ele usa essa porta para enviar datagramas de broadcast para alertar outros peers de que ele está disponível E para receber alertas de outros peers. Se o 8086 não estiver disponível, ele será ligado à próxima porta sequencial. Por este motivo, envia cópias da mesma mensagem de difusão para um intervalo de portas (isto é, 8086..8095). Depois que um jogo é iniciado, os colegas começam a enviar datagramas direcionados uns aos outros, diferentemente das transmissões. Como está agora, nenhum tráfego do jogo está atingindo a VPN. Aqui está uma saída de netstat que mostra o jogo ligado à rede 10.0.1.0/24 (alocada por um roteador doméstico) ao contrário da rede 192.168.0.0/24 (alocada pelo servidor 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    *:*

É óbvio que o jogo é seletivo sobre qual interface ele usa, o que faz sentido, considerando que ele precisa inundar a LAN do usuário com mensagens de descoberta para determinar os endereços dos outros pares. Mas uma VPN não deveria fornecer uma LAN por meio de uma conexão com a Internet? Por que o jogo está escolhendo a interface antiga e não a interface VPN de prioridade mais alta? Eu estou pensando que deve haver alguma configuração obscura que permite que o Windows configure a rede VPN como uma LAN; no entanto, estou tendo o pior tempo para encontrá-lo.

Qualquer ajuda na direção certa é apreciada!

Como uma reflexão tardia: eu sei que o jogo está usando a funcionalidade NetBIOS (eu despejei sua lista de importações de função). Eu também sei (historicamente) que, se algum dos pares for não , membros do mesmo grupo de trabalho, eles serão ignorados. O problema que estou enfrentando poderia envolver alguma coisa relacionada à configuração NetBIOS da rede?

    
por Roger Gee 28.06.2016 / 00:11

2 respostas

0

Consegui resolver este problema usando uma opção de configuração específica para o jogo em questão (que eu encontrei por acaso sem muita sorte). Isso me permitiu especificar diretamente qual interface o jogo deveria usar. Isso é feito adicionando a seguinte entrada ao arquivo Options.ini (localizado em %USERPROFILE%\AppData\Roaming\My Battle For Middle-Earth Files\ ):

IPAddress = x.x.x.x

Onde x.x.x.x é a representação decimal pontuada do endereço IPv4 da interface que você deseja que o processo do jogo use.

Eu nunca imaginei exatamente porque o jogo estava ignorando a interface virtual de prioridade mais alta, então concluo que deve ser uma falha de design na engenharia do jogo e não algo que possa ser configurado no Windows.

É importante notar também que eu usei o OpenVPN em vez de pptpd , pois ele forneceu melhor suporte à camada de link (por exemplo, eu poderia conectar o adaptador virtual do servidor para lidar melhor com quadros de broadcast).

    
por 01.07.2016 / 18:56
0

Isso também pode ajudar em algumas máquinas. Se vai funcionar ou não parece completamente aleatório, mas a instalação de um serviço ainda é mais fácil do que editar um arquivo de configuração toda vez que você alternar as redes;)

Algo está realmente estragado na forma como o BFME lida com redes e, infelizmente, o desenvolvedor não existe mais e não é código aberto, então nunca saberemos ...

    
por 29.01.2017 / 19:26