web-dev-qa-db-ja.com

非常に大きなMTUを持つOpenVPNからホストへのタップデバイス

質問

次の条件を満たすために必要なサーバーおよびクライアント構成ディレクティブの最小セットは何ですか?

  1. 他のインターフェイスとブリッジされない仮想レイヤー2イーサネットネットワーク。
  2. VPNクライアントは、他のVPNクライアントとフレームを交換できます。
  3. DHCPは必要ありません(VPN内でTCP/IPは使用されません)
  4. VPN上のすべてのトラフィックはイーサネットブロードキャストになります(実際には、レイヤー3以上のネットワークはありません)
  5. 仮想ネットワークのMTUは、基盤となるネットワークのMTUよりもはるかに高い必要があり、これはVPN内のノードに対して透過的である必要があります。 OpenVPNは、VPNの外部でパケットを自由にフラグメント化できます。これは、fragmentおよびtun-mtuディレクティブを介して有効になっていると思います。これらのオプションを使用するオーバーヘッドは問題ではありません。 (ターゲットMTUは236
  6. ネットワークのセキュリティは問題ではありません-その目的は厳密に物理的に互いに近くにないノードのための完全にソフトウェア内のイーサネットリンクになることです。

私はすでにどのような仕事をしましたか?

私はOpenVPNの経験が豊富なので、基本をカバーしていると確信しています。ただし、大きなMTUサイズの要件を明確にすることはできません。 VPN上のクライアントは接続でき、テスト用にTCP/IPを構成すると、do-not-fragmentと1472より大きいパケットサイズでテストをpingする場合を除いて、すべてのクライアントが相互にpingを実行できます。ログには明らかなものは何も表示されません。

以下の設定ファイルをご覧ください。

サーバー構成:

mode  server
port  1195
proto udp
dev   tap

tun-mtu 2360
fragment 1500

comp-lzo
max-clients 200
client-to-client

ca     special-net/ca.crt
cert   special-net/sn-server.crt
key    special-net/sn-server.key
dh     special-net/dh1024.pem
status special-net/status.log
tls-server
tls-auth ta.key 0
auth-user-pass-verify /bin/true via-env
duplicate-cn
username-as-common-name

user nobody
group nogroup
persist-key
persist-tun
verb 4

クライアント構成:

client
remote <redacted> 1195
proto udp
dev tap

tun-mtu 2360
fragment 1500

ca             special-net/ca.crt
cert           special-net/sn-client.crt
key            special-net/sn-client.key
tls-auth       special-net/ta.key 1
auth-user-pass special-net/user.txt
ns-cert-type server

nobind
user nobody
group nobody
persist-key
persist-tun
comp-lzo
verb 3
resolv-retry infinite

OpenVPNで奇妙なことをしているのはなぜですか?

リスニングポストによって観察される生の802.11フレームを配布(単純なキャプチャではなく)する方法が必要です。これを実現するには、リスニングポストが各802.11フレームをそのままVPNに送信しますが、イーサネットヘッダーを前に付けます。イーサネットヘッダーは、OpenVPNが配信するイーサネットブロードキャストになります。 802.11データグラムの最大フレームサイズは2346オクテットであり、これにより、目的のMTU 2360(イーサネットヘッダー用に14バイト追加)になります。

3
Iron Savior

インスピレーションは一夜にしてやってきた。 tun-mtuディレクティブはOpenVPNにMTUについて通知するだけであり、OpenVPNがタップデバイス自体にMTUを設定することはないようです。タップインターフェイスにMTUを手動で設定すると、VPNクライアントは、必要に応じて最大2360バイトまで断片化することなくパケットを送受信できるようになりました。

各クライアントとサーバーでip link set tap0 mtu 2360を使用してMTUを直接設定しました。

1
Iron Savior