私は Proxmox PVE ホストを実行しており、VXLAN を使用して、その上で実行されているマシンをラボ内のさまざまなネットワークに接続しようとしています。しかし、理解できない奇妙な MTU 関連の問題が発生しています。
まず、私のセットアップです。基本的なレイアウトは、PVE ホスト上の仮想マシンがブリッジ経由で VXLAN トンネルに接続するというものです。トンネルの反対側には、VXLAN エンドポイント (EP) として機能するラボ内の物理マシンがあります。このマシンは、ブリッジ経由でイーサネット ポートの 1 つに VTEP に接続し、次に、VM を配置しようとしているネットワークを保持するスイッチに接続します。
PVE ホスト (例として 1 つの VM と 1 つの VXLAN) の場合:
___________ __________ __________ ___________
| VM eth0 | | Bridge | | VXLAN | | Host eno1 |
| 192.168.. |___| ---- |___| VNI 1 |___| 10... |___ to LabNet
| MTU 1500 | | MTU 1550 | | MTU 1550 | | MTU 1600 |
|___________| |__________| |__________| |___________|
ラボ内 (例として、1 つのトンネル + 1 つのラボ デバイスを持つエンドポイント):
___________ __________ __________ __________ ___________
| LabDevice | | EP eth1 | | Bridge | | VXLAN | | EP eth0 |
| 192.168.. |___ lab switch etc ___| ---- |___| ---- |___| VNI 1 |___| 10... |___ to PVE Host
| MTU 1500 | | MTU 1500 | | MTU 1550 | | MTU 1550 | | MTU 1600 |
|___________| |__________| |__________| |__________| |___________|
さて、PMTUD はここでは実際には機能しないことがわかりました。なぜなら、L2 であるため、これらのデバイスのほとんどはレポートを返すことができないからです。そのため、VXLAN オーバーヘッドを処理する必要があるデバイスの MTU を増やしました (1550 ではなく 1600 であることは関係ありません。現状を正確に説明したいだけです)。
しかし、MTU の不一致/ICMP ブラックホールの問題がまだ発生しています。
問題 1) チェーン内の何かが、1450 の MTU のみをサポートすると主張しています。VM から LabDevice に SSH 経由で接続しようとすると、接続がハングしてタイムアウトします。ping -M do -s 1450
どこかの何かを介して MTU をテストすると、通常のフラグメンテーションが必要です... というメッセージが返され、最大 MTU の 1450 が保存され、その後の SSH 接続試行が機能します (保存された MTU1450 エントリがタイムアウトするまで)。PVE ホストには MTU が 1450 に設定されているデバイスがありますが、そのいずれも VM に接続されていません。
問題 2) PMTUD は、トンネルに関係のないデバイスでも機能しません。VM eth0 の MTU を下げて、LabDevice から VM には大きすぎるが他はすべて問題ない値で ping -s... を実行すると、私の理解では VM が ICMP フラグメント化が必要... メッセージで応答できるはずであるにもかかわらず、応答がゼロになります。
少し関連していますが、エンドポイントに接続されたデバイスが縮小された MTU を検出できるようにするために、PVE ホストとエンドポイント デバイスで何かできることはありますか? ジャンボ フレームを送信できないラボがいくつかあるため、それらのラボ内のすべてのデバイスでより低い MTU を設定する必要がないようにしたいのです。
編集: おそらく関連があります: 現在、マルチキャストは実行していませんが、 経由でリモート IP を設定していますbridge fdb ...
。また、VM ホストでは、VM はブリッジに直接接続されるのではなく、何らかの veth マジック経由で接続されます。