【入門編】 インターネットゲートウェイ(IGW)におけるTCP MSSクランプとMTU管理 – クラウドインフラと仮想化ネットワーク実践ガイド

なぜ「大きな荷物」は届かないのか?AWSのMTUとMSSクランピングを紐解く

クラウドエンジニアの皆さん、こんにちは!

皆さんは、AWSでVPCを構築しているとき、「特定のサイトだけなぜか表示されない」「SSH接続が途中で固まる」といった、いわゆる「通信の断絶」に頭を抱えたことはありませんか?

実はこれ、多くの場合「パケットのサイズ」が原因です。今日は、AWSのVPCからインターネットへ飛び出すパケットたちが、なぜ「1500バイト」という壁に苦しむのか、そしてそれをどうやって回避するのかを、郵便配達に例えて解説していきます。

—

1. 郵便配達で考える「MTU」と「パケット分割」

私たちが普段インターネットで行っている通信は、小さな封筒(パケット)をたくさん送ることで成り立っています。

  • MTU (Maximum Transmission Unit): 1つの封筒に入れられる「最大サイズ」のことです。
  • AWSのジャンボフレーム: AWSのEC2インスタンス間(VPC内)では、通常「9001バイト」という大きな封筒が使えます。これは一度にたくさん運べるので非常に効率が良いですよね。

しかし、問題は「インターネット」という広い世界に出るときに起こります。インターネットの標準規格では、封筒のサイズは「1500バイト」と決まっているのです。

もし、9001バイトの巨大な荷物を抱えたままインターネットゲートウェイ(IGW)に行こうとするとどうなるでしょう?
ゲートウェイは「このままじゃ通れないよ!」と、巨大な荷物を小さく切り刻んで(フラグメンテーション)、1500バイト以下の封筒に詰め直さなければなりません。

これが繰り返されると、ルーターに過度な負担がかかり、パケットが捨てられたり、通信が極端に遅くなったりするのです。

—

2. 「MSSクランピング」という賢い解決策

パケットが途中で切り刻まれるのを防ぐには、そもそも「最初から1500バイトに収まるサイズの荷物だけを作る」のが一番です。

これを通信の開始時に交渉するのが「TCP MSS(Maximum Segment Size)」です。

  • MSS: 封筒の中身(データ部分)の最大サイズ。
  • MSSクランピング: 通信の握手(3ウェイ・ハンドシェイク)の途中で、「うちは1500バイト以上は無理だから、これより小さくしてね!」と強制的に値を書き換えて通知する技術です。

AWSのIGWへ向かう通信でトラブルが起きやすいのは、VPN接続や特定のプロキシを経由する際、ヘッダー情報が付与されて「実質的に運べるデータ領域」がさらに小さくなってしまうからです。

—

3. 実践!LinuxでMSSを調整してみよう

もし、あなたのEC2インスタンスで「特定の通信だけが通らない」という現象に遭遇したら、まずはiptablesを使ってMSSを調整してみましょう。

以下のコマンドは、外部へ出ていくTCPパケットに対して、「MSSを1360バイトに制限する」という設定です。(VPNやオーバーヘッドを考慮して、余裕を持って1360程度に設定するのが現場の定石です)

# 外部へ出ていくTCPパケットのMSSを1360バイトに制限する
sudo iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360

# 設定が反映されたか確認する
sudo iptables -t mangle -L -v

ポイント:
なぜ1460ではなく1360なのか?それは、VPNトンネルなどの付加情報(オーバーヘッド)がヘッダーに加わることで、実質的な有効領域が削られるためです。インフラ現場では、こうした「数バイトの余裕」が命取りになることがあります。

—

4. 現場で役立つチェックリスト

もし皆さんの環境で通信トラブルが起きたら、以下の順序で確認してみてください。

1. Pingのサイズ指定でテストする:
ping -M do -s 1472 [宛先IP]
(-M doはパケット分割を禁止するオプションです。これで通らなければMTUに問題があります)
2. TCPのMSS値をパケットキャプチャで見る:
tcpdump を使って、SYNパケットの中の mss 値を確認します。
3. セキュリティグループではなく「経路」を疑う:
AWSではセキュリティグループの制御が注目されがちですが、ネットワーク層のMTU不一致は、ログに何も残らない「沈黙の不具合」になりがちです。

—

まとめ:ネットワークは「思いやり」

ネットワークトラブルの多くは、こうした「巨大な荷物をそのまま運ぼうとする」ことによる摩擦から生まれます。

MSSクランピングを設定することは、相手のルーターに「ごめんね、大きな荷物は送らないから、受け取りやすいサイズにするね」という思いやりを伝えることでもあります。

クラウドのインフラは、物理的な制約を隠蔽してくれますが、インターネットの境界線では、今も昔と変わらぬ「1500バイトのルール」が厳然として存在しています。この境界線を意識できるようになれば、皆さんも立派なネットワークエンジニアの仲間入りです!

それでは、また次回の記事でお会いしましょう。ハッピー・クラウド・ライフ!

コメント

タイトルとURLをコピーしました