最近、友達とLANゲームをプレイするためのVPNを設定しました。Linuxサーバーを実行pptpd
していて、オペレーティングシステムに組み込まれたVPNクライアントを使用してWindowsに正常に接続できました。VPNがクライアント間で情報を正しくルーティングすることをテストしました(ブロードキャストメッセージを含む)。システムで最高の優先度が与えられている各クライアントに仮想ネットワークアダプターを作成します。これは、すべてのネットワーク接続がデフォルト(例えばWebブラウザ)で、それを使用して名前のクエリを実行するとき、それが最初に返されます(例えば結果は以下のようにソケットAPIから返された意味getaddrinfo()
とgethostbyname()
)。私が抱えている問題は、プレイしたい特定のゲームがUDPソケットを正しいネットワークインターフェイスにバインドしていないことです。代わりに、ゲームプロセスは元のネットワーク接続のインターフェイスに明示的にバインドします(Windowsのeth0
またはに相当wlan0
)。VPNアダプター(Windowsに相当するppp0
)にバインドする必要があります。
この特定のゲームは、EA GamesによってBattle for Middle-Earthと呼ばれています。LANマルチプレイヤーロビー内では、ゲームはUDPポート8086にソケットをバインドします。このポートを使用して、ブロードキャストデータグラムを送信し、利用可能な他のピアにアラートを送信し、他のピアからアラートを受信します。8086が使用できない場合、次の順次ポートにバインドします。このため、同じブロードキャストメッセージのコピーをポート範囲(つまり、8086..8095)に送信します。ゲームが開始されると、ピアはブロードキャストではなく、指示されたデータグラムを互いに送信し始めます。現在のところ、VPNに到達しているゲームトラフィックはありません。ネットワーク(VPNサーバーによって割り当てられる)ではなく、ネットワーク(ホームルーターによって割り当てられる)にnetstat
バインドされたゲームを示す出力を次に示します。10.0.1.0/24
192.168.0.0/24
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 *:*
ゲームが使用するインターフェイスを選択することは明らかです。これは、他のピアのアドレスを決定するために、ユーザーのLANをディスカバリメッセージであふれさせる必要があることを考えると理にかなっています。しかし、VPNはインターネット接続を介してLANを提供することを想定していませんか?なぜゲームが優先順位の高いVPNインターフェースではなく古いインターフェースを選択するのですか?私は、WindowsがVPNネットワークをLANとして構成できるようにするための、あいまいな設定が必要だと考えています。しかし、私はそれを見つけるのに最も苦労しています。
正しい方向への助けをいただければ幸いです!
後付けとして:ゲームがNetBIOS機能を使用していることを知っています(関数インポートのリストをダンプしました)。また、(歴史的に)ピアのいずれかが同じワークグループのメンバーでない場合は無視されることも知っています。私が直面している問題は、ネットワークのNetBIOS構成に関係しているのでしょうか?