web-dev-qa-db-ja.com

Openvpn L2 /タップ損失パケット

[編集]これはOpenVPNのバグのようです-openvpnタップトンネルのサーバー側とのブリッジングはARPパケットの損失につながりますが、クライアント側(vpnに接続されているクライアントの)とのブリッジングは完全に機能します。サーバーではなくクライアントとブリッジすることでバグを回避しました。バグ報告プロセスはかなりの作業なので、Openvpnプロジェクトに提出するためにすべてを書き上げるにはしばらく時間がかかります。

Openvpnが一貫して特定のパケットをドロップしているのを観察しています...

シナリオ:

Minecraftポケットエディション(MCPE)プレーヤー(家族のみ)がネットワークの友達リストでお互いを見て一緒にプレイできるように、広域レイヤー2ネットワーク(OpenVPNを使用)をセットアップしました。 3つのリモートエンドポイントがあり、すべて異なる場所にあり、中央のopenvpnサーバーがあります。各リモートエンドポイントは、OpenvpnタップインターフェイスにブリッジされたWi-Fiをブロードキャストします。これはうまく機能し、プレイヤーはお互いを見ることができます。

最近、Wi-Fiエンドポイントをローカルに、ここではサーバーの場所に追加したいと思いました。そこで、ブリッジにイーサネットポートを追加し、Wi-Fiブリッジを接続して、既存のopenvpnブリッジへのレイヤー2接続を取得しました。一見すると、これはうまく機能しているように見えます。クライアントはインターネットにアクセスでき、L2トラフィックは正常に見えます。

ただし、リモートクライアントエンドポイントのプレーヤーがローカルWi-Fiブリッジに接続されているプレーヤーと対戦しようとすると、プレーヤーはお互いを見ることができません。

ローカルWi-FiはopenvpnトンネルのSERVER側にブリッジし、これが要因のようですが、これは予期しないことです。

何時間にもわたるトラブルシューティングの後、問題を1つの特定の事実に絞り込みました。サーバーのopenvpnタップインターフェイス(tapmcという名前)にブリッジされたWi-Fiは、VPNの反対側のプレーヤーと対戦できません。

言い換えると、2人のプレーヤーが同じWi-Fiまたはクライアントのopenvpn Wi-Fiエンドポイント上にいる場合、それらはどれだけ離れていてもお互いを見ることができます。しかし、サーバー側のopenvpnタップインターフェイスにブリッジされているWi-Fiに接続されているプレーヤーは、問題が発生します。トンネルのクライアント側のプレーヤーを見ることができず、リモートプレーヤーもそれらを見ることができません。

お互いを確認するために、ゲームは1〜2秒ごとにUDPブロードキャストパケットをポート19132(ipv4)に送信します。ネットワーク上のすべてのプレーヤーがこれらのブロードキャストを受信し、ゲームがサーバーの場合、ゲームはリクエスターにユニキャストパケットで応答します。このユニキャスト応答パケットにはゲーム情報が含まれているため、ネットワーク上でアクティブなゲームを検索しているプレーヤーは、それらが友達リストに表示され、ゲームに参加できるようになります。

添付されているのは、パケットが失われている短い期間の分析です。パケットはタップトンネルの片側に入り、反対側には出ません。 openvpnタップインターフェイス自体でトンネルの両側に対してtcpdumpを実行してパケットをキャプチャしたため、インターフェイスはブリッジの各メンバーですが、パスにブリッジはありません。

Annotated tcpdump "side by side" (both sides of the openvpn tap tunnel)

私が見ているのは、PLAYER2がネットワーク上でゲームを検索しているときに、検索ブロードキャストを送信することです。このブロードキャストは、PLAYER1のゲームによって受信されます。このブロードキャストは、ユニキャストのゲーム情報パケットで応答したいのですが、最初にPLAYER2のMACアドレスを解決する必要があります。 ARPwho-hasを送信します。 who-hasパケット、およびその後のすべての再送信は、PLAYER1によって受信および応答されますが、これらの応答はOpenvpnトンネルを介してPLAYER1に送信されません。したがって、L2 ARP解決は成功せず、ユニキャストゲーム情報パケットは送信されず、PLAYER2はPLAYER1を認識しません。

また、トンネルを越えて失われるのは、ゲーム検索ブロードキャストパケットの2番目のコピーですが、2つのコピーの最初のコピーが正常に送信されるため、これはプロセスにそれほど悪影響を及ぼしません。しかし、なぜ1つだけなのですか?

Openvpnサーバーの構成

server 192.168.251.0 255.255.255.0
verb 3
key ***
ca ***
cert ***
dh ***
tls-auth ***
key-direction 0
keepalive 10 60
persist-key
persist-tun
client-to-client
proto udp
port ***
dev tapmc
status ***
ifconfig-pool-persist ***
user nobody
group nobody

Openvpnクライアント構成

client
nobind
dev tapmc
remote-cert-tls server
remote ***    
<key>
***
</key>    
<cert>
***
</cert>    
<ca>
***
</ca>
<tls-auth>
***
</tls-auth>
key-direction 1
#redirect-gateway def1

Openvpnバージョン:サーバー:2.4.81、クライアント:2.4.7-1

1
regulatre

これはOpenVPNのバグであることが判明しました

0
regulatre