Juniper の MTU 設定でハマった話
コンテンツ
Juniper の EX, MX の間の MTU 設定でハマった話.原因が分かるまで結構苦労したのでメモ.
原因
結論だけ書くと MX の特殊な設定方法と EX の MTU 誤表示.
- {MX/EX} Junos OS does not increase the MTU size when one of the ports is configured in trunk mode
- weird MTU size on “show interface”
現象
次のように EX と MX を trunk port で接続していた.
Host1–EX xe-0/0/0–xe-0/0/1 MX—Host2
Host1 と Host2 の間で ping
を通るが,ファイル転送などが出来ない.同じブロードキャストドメインなのでファイアウォールなどは関係ない,というよく分からん状況.
色々調べてみるとパケットのサイズが大きいと MX 側でパケットがドロップしているらしいことが分かった.
設定
EX側の次のような設定.
|
|
MX側の次のような設定.
|
|
MTUの値を show interface
で確認するとどちらのインターフェイスも Ethernet MTU が 1514 に設定されている.そう, MTU の不一致は発生していないように見える.
だがちょっと待って欲しい.普通の Ethernet MTU (フレームサイズ)は 1518 バイトである.内訳は次の通り.
- 宛先MAC, 6バイト
- 送信MAC, 6バイト
- タイプ, 2バイト
- ペイロード, 1500バイト
- チェックサム(FCS), 4バイト
実は Junos では FCS の 4 バイト分を除いて表示している(多分,チェックサム計算はNICで実行される,ハードウェアオフロードされる,のでソフトウェア側では無視する実装になっているのだろう).だから 1514 = 1518 - 4 で正しいように見える.
だが,ちょっと待って欲しい.このインターフェイスは trunk ポートなので vlan タグの分の 4 バイトが余計に必要である.つまり MTU は 1518 として設定されているはずである.だが,そうなっていない.何が起こっているのか.
原因
原因は MX にある.EX の MTU は 1514 と表示されているだけで,実際は 1518 が設定されている(この不具合は修正済みかも).
実は MX はインターフェイスを trunk に設定しても MTU を自動的に増加しない(どうも EX は trunk を設定すると MTU を自動で増加させるようだ,というか,それが普通だろう).
従って, MX 側で MTU を手動で設定するか vlan-tagging
を追加すれば良い.
|
|
その他 ping で MTU をチェック方法
次のコマンドでサイズ 1500 の IP パケットが作成できる.
ping -M do -s 1472 8.8.8.8
オプション -M do
で Don’t Fragment (DF) ビットを1にセット, オプション -s
でICMPペイロードのサイズを指定する.これでサイズ 1500 のIPパケットができる,内訳は次である.
- IP ヘッダ, 20 バイト
- ICMP ヘッダ, 8 バイト
- ICMP ペイロード, 1472 バイト
以上.
作成者 Toru Mano
最終更新時刻 2023-01-01 (c70d5a1)