🚛 ジャンボフレーム&MTU問題

大きなトラックが狭いトンネルを通れない問題を完全図解!

📌 結論:両方とも根本原因になりうる!

ジャンボフレーム(MTU 9001)で「Don't Fragment」フラグが設定されている場合、
インターネット経由VPN経由の両方で転送失敗が発生します

🌐
A1. パブリックインターネット経由
インターネットの標準MTUは1500バイト
9001バイトのパケットは通過できず、
Don't Fragmentフラグにより分割もできない
パケットドロップ!
🔒
A2. Site-to-Site VPN経由
VPNはオーバーヘッドがあるため
実効MTUは約1300~1400バイト
9001バイトのパケットは通過できず、
パケットドロップ!
⚠️ A1もA2も両方とも正解(根本原因)です!

🚛 トラックとトンネルで理解するMTU問題

📦 MTU = トラックの最大積載サイズ

MTU(Maximum Transmission Unit)とは、1回で送れるデータの最大サイズです。
これを「トラックに積める荷物の最大サイズ」に例えましょう!

✅ VPC内の通信(成功)

🚛
大型トラック
荷物サイズ: 9001
➡️
🏗️
VPCトンネル
高さ制限: 9001
➡️
✅ 通過OK!

❌ インターネット経由(失敗)

🚛
大型トラック
荷物サイズ: 9001
➡️
🚇
インターネットトンネル
高さ制限: 1500 😱
➡️
❌ 通過NG!
🚫 Don't Fragmentフラグ = 「荷物を分割するな!」という指示
このフラグがあると、トラックを小さく分けることができず、立ち往生してしまいます

📏 各経路のMTUサイズ比較

☁️
VPC内(ジャンボフレーム)
最大 9001 バイト ✅ 大きなデータOK
🌐
インターネット(標準)
1500

⚠️ ジャンボフレームの約17%のサイズしか通らない!

🔒
Site-to-Site VPN
~1300

⚠️ VPNオーバーヘッドがあるため、さらに小さい!

🚫 Don't Fragment(DF)フラグとは?

「このパケットは分割しないでください」という指示をIPヘッダーに設定するフラグです

📦
9001バイトのパケット
(DFフラグ付き)
➡️
🚧
MTU 1500の経路
(インターネット)
➡️
🤔
分割したいけど
DFフラグがある...
➡️
💥
パケット破棄!
ICMP「Fragmentation Needed」送信

🏠 たとえ話でいうと...

「この大きな荷物は絶対に分けないで配送してください!」という指示がついた荷物を、
小さなトンネルしかない道で運ぼうとしている状態です。

分割が禁止されているため、配送員は「配達不能」として返送するしかありません。

🗺️ 経路別:転送成功・失敗マップ

🖥️
EC2インスタンス
MTU: 9001(ジャンボフレーム)
☁️
VPC内の通信
MTU: 9001 バイト

同じVPC内のEC2間では
ジャンボフレームがサポート

✅ 転送成功
🌐
インターネット経由
MTU: 1500 バイト

パブリックインターネットは
標準MTUのみサポート

❌ 転送失敗
🔒
Site-to-Site VPN
MTU: ~1300 バイト

VPNオーバーヘッドにより
さらにMTUが小さくなる

❌ 転送失敗

⚙️ 問題発生のメカニズム

1
EC2がジャンボフレームでパケット送信
1,024MB以上のファイルを9001バイト単位で分割して送信開始
⬇️
2
パケットがMTU境界に到達
インターネットやVPNゲートウェイなど、MTUが小さい経路に到達
⬇️
3
フラグメンテーションを試みる
ルーターがパケットを小さく分割しようとするが...
⬇️
4
DFフラグにより分割不可
「Don't Fragment」フラグが設定されているため、分割できない
⬇️
💥
パケットがドロップ!
ファイル転送が失敗し、クライアントに届かない

💡 解決策

📏

MTUを調整する

外部と通信する場合は、MTUを標準の1500バイトに設定します。

# Linux でMTUを変更
sudo ip link set dev eth0 mtu 1500
✂️

DFフラグを無効化

Don't Fragmentフラグを外して、パケットの分割を許可します。

# アプリケーション側で
# ソケットオプションを変更
🔍

Path MTU Discoveryを活用

経路上の最小MTUを自動検出し、適切なサイズでパケットを送信します。

# ICMPがブロックされていないか確認
# セキュリティグループを確認
🔌

Direct Connectを使用

プライベートVIFでMTU 9001、トランジットVIFでMTU 8500のジャンボフレームをサポート。ただしVPNと同じルートを共有しないこと!

# 注意: VPNと同じルートを
# アドバタイズすると1500に制限
🚇

Transit Gateway使用時の注意

Transit GatewayはMTU 8500が上限です。9001ではありません。

# TGW経由の場合
sudo ip link set dev eth0 mtu 8500
📋

EC2インスタンスタイプ確認

C1、CC1、T1、M1はジャンボフレーム非対応。現行世代のインスタンスを使用してください。

# 対応確認
aws ec2 describe-instance-types \
--query "InstanceTypes[*].NetworkInfo"

🔌 AWS Direct Connect のジャンボフレーム詳細

AWS公式ドキュメントより:Direct Connectの仮想インターフェイス別MTU制限

🏠

プライベート仮想インターフェイス

MTU: 9001 (ジャンボフレーム)

VPCへの接続用。仮想プライベートゲートウェイまたはDirect Connectゲートウェイにアタッチ可能。

🚇

トランジット仮想インターフェイス

MTU: 8500 (ジャンボフレーム)

Transit Gateway経由での接続用。9001ではなく8500が上限なので注意!

🌐

パブリック仮想インターフェイス

MTU: 1500 (標準のみ)

AWSパブリックサービスへの接続用。ジャンボフレームはサポートされません

⚠️ 重要:VPNと共存時のMTU制限

同じルートをアドバタイズする異なるMTU値を使用する2つのプライベート仮想インターフェイスがある場合、
または同じルートをアドバタイズするSite-to-Site VPNがある場合には、

🚫 自動的に 1500 MTU が使用されます!

→ これが今回の問題の重要なポイント!Direct Connectがあっても、VPNが同じルートを持つと1500に制限される可能性があります。

📋 EC2インスタンスタイプ別ジャンボフレーム対応

✅ 対応するインスタンス

C1、CC1、T1、M1以外のすべてのEC2インスタンスタイプ
(現行世代のほとんどのインスタンス)

❌ 非対応のインスタンス

C1、CC1、T1、M1
これらの古いインスタンスタイプではジャンボフレームがドロップされます

🔧 技術詳細:イーサネットフレームサイズ

Direct Connectがリンクレイヤーでサポートするフレームサイズ:

標準: 1522バイト = 14(イーサネットヘッダー) + 4(VLANタグ) + 1500(IPデータグラム) + 4(FCS)
ジャンボ: 9023バイト = 14(イーサネットヘッダー) + 4(VLANタグ) + 9001(IPデータグラム) + 4(FCS)

📊 経路別MTU比較表(詳細版)

経路 MTUサイズ ジャンボフレーム対応 9001バイトパケット
🏠 VPC内(同一リージョン) 9001 バイト ✅ 通過
🔗 VPCピアリング(同一リージョン) 9001 バイト ✅ 通過
🌉 Transit Gateway 8500 バイト ❌ 要調整(8500以下に)
🌐 インターネットゲートウェイ 1500 バイト ❌ ドロップ
🔒 Site-to-Site VPN ~1300-1400 バイト ❌ ドロップ
🔌 Direct Connect(プライベートVIF) 9001 バイト ✅ 通過
🔌 Direct Connect(トランジットVIF) 8500 バイト ❌ 要調整(8500以下に)
🔌 Direct Connect(パブリックVIF) 1500 バイト ❌ ドロップ
⚠️ DX + VPN共存(同一ルート) 1500 バイト ❌ 強制制限 ❌ ドロップ

※ Direct Connectでジャンボフレームを使用するには、オンプレミス側のルーター設定も必要です
※ 同じルートにVPNがある場合は自動的に1500 MTUに制限されます(AWS公式ドキュメントより)

❓ よくある質問

🤔 なぜUIは正常に表示されるのにファイル転送だけ失敗するの?
HTMLファイル(1,024バイト)は小さいため、1パケットで送信できます。
1,024バイトはMTU 1500バイト以下なので、どの経路でも問題なく転送できます。
一方、1,024MB以上のファイルは多数のパケットに分割され、そのうち9001バイトのパケットがMTU境界で問題を起こします。
🤔 クラスタープレイスメントグループとは何ですか?
同じラック内にEC2インスタンスを配置して、低レイテンシ・高スループットを実現する機能です。
HPC(高性能コンピューティング)やビッグデータ処理など、インスタンス間通信が多いワークロードに最適です。
同一AZ内に配置されるため、ジャンボフレーム(MTU 9001)が完全にサポートされます。
🤔 VPNのMTUがインターネットより小さいのはなぜ?
VPNにはカプセル化のオーバーヘッドがあるためです。
IPsec VPNでは、元のパケットにVPNヘッダー(約100~200バイト)が追加されます。
そのため、実際に送れるデータ部分のMTUは1300~1400バイト程度に制限されます。
🤔 Direct Connectでもジャンボフレームが使えないケースは?
AWS公式ドキュメントによると、以下のケースでは1500 MTUに制限されます:

1. パブリック仮想インターフェイスを使用する場合(ジャンボフレーム非対応)
2. 同じルートをアドバタイズするSite-to-Site VPNがある場合(自動的に1500に制限)
3. 異なるMTU値を使用する2つのプライベートVIFが同じルートを持つ場合
4. オンプレミス側のルーターがジャンボフレームに対応していない場合
5. C1、CC1、T1、M1インスタンスとの通信(これらはジャンボフレーム非対応)
🤔 Transit GatewayとDirect Connectゲートウェイの違いは?
MTUサイズが異なります!

プライベートVIF(Direct Connectゲートウェイ経由):MTU 9001まで対応
トランジットVIF(Transit Gateway経由):MTU 8500まで対応

Transit Gatewayは複数VPCのハブとして便利ですが、ジャンボフレームのサイズが8500バイトに制限される点に注意してください。
9001バイトのパケットはTransit Gateway経由では通過できません。
🤔 SiteLinkとは何ですか?
Direct Connect POPs間を直接接続するオプション機能です。

AWSグローバルネットワークを使って、リージョンを経由せずにオンプレミス拠点間を接続できます。
SiteLinkは仮想インターフェイスの種類に応じて、最大8500または9001のジャンボフレームMTUサイズをサポートします。
※AWS GovCloud (US)および中国リージョンでは使用できません。

📚 AWS公式ドキュメント

📖

Direct Connect - ジャンボフレームの設定

AWS Direct Connectでジャンボフレームを使用する際の設定方法、MTUサイズの考慮事項、 仮想インターフェイスでのMTU設定について詳しく解説されています。

🔗 AWS公式ドキュメントを見る
💡
学習のヒント: Direct Connectはジャンボフレーム(MTU 9001)をサポートしていますが、 オンプレミス側のネットワーク機器も同様に設定する必要があります。 エンドツーエンドでMTUが一致していることが重要です。

🎓 まとめ

🚛
ジャンボフレーム
MTU 9001バイトの大きなパケット
VPC内では高速通信が可能
外部通信では問題発生の可能性
🚫
Don't Fragmentフラグ
パケット分割を禁止するフラグ
MTUが小さい経路では
パケットがドロップされる
🛣️
経路によるMTU差
VPC内: 9001バイト ✅
インターネット: 1500バイト ⚠️
VPN: ~1300バイト ⚠️
🎯 試験のポイント:

ジャンボフレーム + Don't Fragmentフラグ + 外部通信 = 転送失敗

✅ A1(インターネット経由)も A2(VPN経由)も
両方とも根本原因になりうる正解です!

Created by SSuzuki1063

AWS SAP Learning Resources