今でもちょいちょい訊かれることが多いため、メモ程度にまとめておきます。
参考URL:
GRE および IP セキュリティでの IP フラグメンテーション、MTU、MSS、および PMTUD の問題の解決
http://www.cisco.com/cisco/web/support/JP/100/1006/1006439_pmtud_ipfrag-j.html ■MTU値の計測
一般的にイーサネットでは標準フレームサイズとして1,500bytesで通信をおこないます。そのためMTU(Maximum Transmission Unit, 最大伝送ユニット)値として1500が設定されていることになります。
フレッツ回線の場合PPPoE接続のため46bytesを使用するため、MTUは1454となります。さらにNTT西日本のフレッツ光プレミアムでは、IPv6を使用するCTUの仕様で1438になります。この辺は一般的なブロードバンドルータだと自動で設定されるので周知の通り。
ただし、CATV回線やマンション敷設のVDSL等の場合、さらにケーブルモデムやVDSLモデムの仕様でMTUが低く設定されている可能性があります。
この場合、PCをWAN回線に直結し、pingコマンドでフレーム数を計測します。
ping www.yahoo.co.jp -f -l "フレーム数 - 28"
pingコマンドではIPヘッダ部(20bytes)とTCP(ICMP)ヘッダ部(8bytes)を併せて28bytesが必要なので、実際に計測するフレーム数から28を引いて設定します。
MTU:1500の場合
ping www.yahoo.co.jp -f -l 1472 でping応答あり、同1473で「DF(分割禁止)が設定されています」のエラー。
MTU:1454の場合(フレッツ回線)
ping www.yahoo.co.jp -f -l 1426 でping応答あり、1427でエラー。
MTU:1300の場合(VDSL、CATVなど)
ping www.yahoo.co.jp -f -l 1272 でping応答あり、1273でエラー。
■ルータへのMSS値の設定
設定例(Path MTU:1454の場合)
■ルータへのMSS値の設定
MSS(TCP Maximum Segment Size, 最大セグメントサイズ)値は、実際にTCP/IPで受け取るデータ量で、CiscoルータではLAN側インターフェースで「ip tcp adjust-mss」コマンドにより、MTUから各種ヘッダのサイズを引いたサイズを設定します。
標準でMSSはIPヘッダ(20bytes)とTCPヘッダ(20bytes)の合計40bytesをMTUから除いた値となります(MTU:1454の場合、MSSは1414)。
ただし、ルータがVPNなどでトンネリングや暗号化を行う場合、ルータ間の通信では必要なヘッダが付加されますのでMSSでは相当分を差し引いて設定する必要があります。
■CiscoルータでのMSSの設定例
標準でMSSはIPヘッダ(20bytes)とTCPヘッダ(20bytes)の合計40bytesをMTUから除いた値となります(MTU:1454の場合、MSSは1414)。
ただし、ルータがVPNなどでトンネリングや暗号化を行う場合、ルータ間の通信では必要なヘッダが付加されますのでMSSでは相当分を差し引いて設定する必要があります。
■CiscoルータでのMSSの設定例
(コマンド例)
interface Vlan 1
ip tcp adjust-mss 1314
通常のMSS値=MTU値-40、だが、VPNの場合、さらにIPsecやGREのヘッダを引いた値を設定する必要があります。
設定例(Path MTU:1454の場合)
VPNなしの場合のMSS値: 1454 - 40 = 1414
VPNありの場合のMSS値
①IPSecカプセリング&暗号化により付加されるヘッダ
・IPsec(ESP-AES-SHA1): 12 (SHA1) + 16 (AES) + 8 (ESP) + 20 (IPv4) = 56
・IPsec(ESP-AES-SHA1): 12 (SHA1) + 16 (AES) + 8 (ESP) + 20 (IPv4) = 56
・IPsec(ESP-3DES-SHA1): 12 (SHA1) + 8 (3DES) + 8 (ESP) + 20 (IPv4) = 48
②GREトンネルにより付加されるヘッダ
・GREトンネル: 24
IPsec + GRE トンネルVPNでのMSS値 1454 - ① - ② - 40
1454 - 56 - 24 - 40 = 1334
ただし、CiscoではGRE + IPSecでの差し引き分を100bytes(フレーム数1500の場合MTUは1400)にすることを推奨しているため、おなじくフレッツの場合
1454 - 100 - 40 = 1314
を割り当てればよいと考えられます。
なお、詳細は割愛しますが、この値(差し引き分100bytes)を割り当てておけば、GRE + IPSecの場合のほか、DMVPNなどの他のVPNソリューションを使用した場合も対応できるようです。