PPPoEの上にVLANを重ねて、その上にIPsecまで通したら、結局MTUはいくつにすればいいのか。 1500から何バイト引くのか、毎回メモを見ながら手で計算していませんか。 このツールは、通すカプセル化にチェックを入れるだけで、実効MTUとTCP MSS、MSSクランプに設定する値を一度に出します。
使い方
- ベースMTUを決めます。プリセット(1500、1492、1480、9000)から選ぶか、「カスタム」にして直接入力します。
- 実際にその経路で通すカプセル化(PPPoE、VLAN、GRE、VXLAN、WireGuard、IPsec ESP)にチェックを入れます。
通らないものまで入れると値が小さく出すぎます。残りは2手順です。
- IPバージョン(TCP区間)を選びます。IPv4ならIPヘッダ20バイト、IPv6なら40バイトで計算されます。
- 下に出る「実効MTU」「TCP MSS」「MSSクランプ推奨値」を、ルーターやファイアウォールの設定に使います。
開いた直後はPPPoEとVLANにチェックが入っています。
仕組み・計算式
実効MTUは「ベースMTU − 選んだオーバーヘッドの合計」です。TCP MSSは「実効MTU − IPヘッダ − TCPヘッダ20バイト」で求めます。IPヘッダは、IPv4が20バイト(RFC 791)、IPv6が40バイト(RFC 8200)です。
MSSの定義はもともとRFC 879にあり、RFC 6691が「MSSにはIPやTCPのオプションの分は含まれない」と整理しています。TCPの現行仕様はRFC 9293です。このツールのTCP MSSは、オプション無しの素のヘッダで計算した値です。
ツールが引くオーバーヘッドは次のとおりです。
- PPPoE は8バイトです。PPPoEヘッダ6バイトとPPPプロトコルID2バイトで、ペイロードは最大1492バイトです(RFC 2516)。
- VLAN は802.1Qタグの4バイトです(IEEE 802.1Q)。
ここから下は、外側にIPヘッダがもう1つ付くトンネル系です。
- GRE は外側IPヘッダ込みで24バイトです(RFC 2784)。
- VXLAN は外側IP、UDP、VXLAN、内側Ethernetヘッダ込みで50バイトです(RFC 7348)。
- WireGuard は外側がIPv4の場合で60バイトです。
ここまでが固定値です。IPsec ESPだけは性格が違います。ESPのSPIとシーケンス番号は4バイトずつ、パディング長と次ヘッダは1バイトずつと決まっています(RFC 4303)。ところがIV、パディング、ICVは暗号方式で変わります。そこでこのツールは、AES-CBCとHMACの代表的な組み合わせを想定した目安として、トランスポートモード53バイト、トンネルモード73バイトを使います。
ベースMTUは68以上65535以下で受け付けます。68はIPv4の最小MTUです(RFC 791)。
計算例
すべて、実際に script.js の計算ロジックを node で動かして確かめた値です。IPv4で、TCPオプション無しの前提です。
例1: PPPoE+VLAN(初期表示) ベースMTU 1500、PPPoEとVLANにチェックを入れると、オーバーヘッド合計は12バイトです。実効MTUは1488、TCP MSSは1448になりました。PPPoEだけなら1492と1452です。1492はRFC 2516の最大ペイロードと一致します。
例2: フレッツのPPPoE(1454 / 1414) フレッツ回線では、MTU 1454、MSS 1414という値が案内されることが多いと思います。ただし1500からPPPoEの8バイトを引いても1492にしかなりません。結論から言うと、1454は引き算では出ない値なので、直接入力します。試したのは次の入力です。
- プリセットを「カスタム」にして、ベースMTUに1454を直接入力する
- カプセル化のチェックは全部外す
- 結果は、実効MTU 1454、IPv4のTCP MSS 1414になりました
IPv6にすると同じ1454でもMSSは1394です。1414はIPv4専用の数字です。
例3: IPsec ESPのトンネルモード ベースMTU 1500、ESPのトンネルモード(目安73バイト)を選ぶと、実効MTUは1427、IPv4のTCP MSSは1387でした。IPv6では1367です。PPPoEも足すと、実効MTUは1419、MSSは1379になります。
境界の例 ベースMTU 68で何も選ばなければ、実効MTUは68、MSSは28です。ベースMTUを100にしてWireGuard(60バイト)を選ぶと、実効MTUは40まで下がり、MSSは0になります。MSS欄は「計算不可」の表示になります。実効MTUが0以下になる組み合わせ(ベースMTU 68でGREとVXLANを両方選ぶと、74バイト引いて−6になります)や、ベースMTUが68未満の入力は、エラーメッセージになります。
よくある間違い
MTUとMSSを同じものとして設定してしまう。 ルーターの設定項目に「1452」と入れるとき、それがMTUなのかMSSなのか、迷ったことはありませんか。MTUはIPパケット全体の上限、MSSはTCPのデータ部分の上限で、IPv4ならMSSはMTUより40バイト小さくなります。MTUの欄にMSSの値(1452など)を入れると、本来より40バイト小さいMTUになります。逆にMSSの欄にMTUの値を入れると、クランプが効かず、問題が残ったままになります。
ESPのオーバーヘッドを固定値だと思う。 正直なところ、数字が固定値にならないESPは、一番扱いにくい部分です。ESPはパディングの量が暗号ブロックの長さとパケットサイズで変わり、ICVの長さも方式によって違います。53や73という数字は目安であって、実機の値とずれることがあります。安全側に倒したい場合は、計算値から数バイト余裕を見て、実際の経路で確かめます。
ICMPをまとめて遮断してPMTUDを壊す。 経路MTU探索(RFC 1191、IPv6はRFC 8201)は、ICMPのエラーが送信元に届くことを前提に動きます。ICMPを全部落とすと、大きなパケットだけが黙って消えます。ところがpingや小さなWebページは通るので、気づくまでに時間がかかります。MSSクランプはTCPのSYNだけを書き換えるので、UDPには効きません。クランプを入れてもICMPの許可は残してください。
VLANタグで必ずIPのMTUが減ると思う。 802.1Qのタグは、Ethernetフレームに4バイト足されます。機器が1522バイトまでのフレームを通せるなら、IPのMTUは1500のままです。このツールは単純に4バイト引くので、機器の仕様と見比べてください。
確かめるには、実際に経路でpingを打ちます。ICMPヘッダの8バイトとIPヘッダの20バイトで28バイトを使うので、ペイロードは「MTU − 28」になります。MTU 1492なら1464です。
- Windows:
ping -f -l 1464 宛先(-f は分割禁止、-l はデータ長) - Linux:
ping -M do -s 1464 宛先(-M do で分割禁止)
1464が通って1465が通らなければ、その区間のMTUは1492です。1454の回線なら、通る限界のペイロードは1426になります。
よくある質問
Q. MSSクランプ推奨値とTCP MSSが同じ数字なのはなぜですか?
A. MSSクランプは、この値を超えるMSSをSYNパケットの中で書き換える処理だからです。IPv6の経路なら、IPv6側で出した値を使ってください。
Q. IPv6でも同じ計算式ですか?
A. 引き算の流れは同じで、IPヘッダだけ40バイトです。ベースMTU 1500でオーバーヘッドなしなら、IPv4のMSSは1460、IPv6は1440でした。外側がIPv6になるトンネルは、このツールの値より大きく引かれる場合があります。IPv6の最小MTUは1280バイトです(RFC 8200)。
Q. 計算結果をそのまま設定すれば、必ず通りますか?
A. 言い切れません。ESPの値は目安で、TCPオプション(タイムスタンプなど)を使えば1パケットのデータはさらに減ります。設定後は、上のpingで境界を確かめてください。
関連ツール
最終更新・根拠の確認日: 2026-10-05 · カテゴリ: ネットワーク