KUSONEKOの見る世界

IPsec 備忘録

※注意!私の調査結果に基づく内容なので間違っている場合があります

ESP Tunnel Mode + NAT traversal のパケットフォーマット

ESP Tunnel Mode + NAT traversal のパケットフォーマット
  • ESP Header
    Security Parameters Index (SPI) : 4 byte
    Sequence Number : 4 byte
    サイズは固定。
  • ESP IV (Initial Vector)
    暗号化アルゴリズムによりサイズが異なる。
    暗号化アルゴリズム サイズ
    DES/3DES 8 byte
    AES(-CBC) 16 byte
    AES-GCM 8 byte
    ChaCha20 8 byte
  • ESP Trailer
    Padding : 0~255 byte
    Padding Length : 1 byte
    Next Header : 1 byte
    Paddingは、暗号化アルゴリズムが要求するバイト数に調整するため変動する。
    上図のEncryptedの合計サイズが以下になるよう調整される。
    暗号化アルゴリズム Encryptedの合計サイズ Paddingの取りうる範囲
    DES/3DES 8 byte の整数倍 0~7 byte
    AES(-CBC) 16 byte の整数倍 0~15 byte
    AES-GCM 4 byte の整数倍 0~3 byte
    ChaCha20 4 byte の整数倍 0~3 byte
  • ESP Authentication
    完全性アルゴリズムによりサイズが異なる。
    完全性アルゴリズム サイズ
    MD5/SHA1 12 byte
    SHA256 16 byte
    SHA384 24 byte
    SHA512 32 byte
    AES-GCM with a 16 octet ICV(IANA 20) 16 byte
    Poly1305 16 byte

最適MTU/MSS

ESP Trailerに挿入されるPadding

上記の情報を元に、回線の推奨MTUからヘッダやトレーラを引いていけば、最適なMTUを計算できるが、挿入されるPaddingに注意する必要がある。
Paddingは、DES/3DESであれば8バイト、AES(-CBC)であれば16バイトというように整数倍になるように挿入される。
この整数倍を考慮しないと、Paddingが挿入され、MTUを超え、フラグメントされて非効率な通信となってしまう。
そのため、回線のMTUを超えない整数倍になるよう内部のMTUを調整する必要がある。

計算方法

  1. 暗号化対象(上図のEncriptedの部分)が回線MTUを超えない最大の整数倍になる値を出す
  2. そこからPaddingが0となるよう Padding Length、Next Headerのバイト数を引く
上記踏まえ、具体的な計算方法としては、以下となる。
  1. 回線MTUから暗号化対象以外のバイト数を引く
  2. その値を超えない暗号化アルゴリズムが要求する整数倍を出す
  3. その値から Padding Length、Next Headerのバイト数を引いて、最適MTUを出す
  4. 最適MTUからIP Header、TCP Header分の40を引いて、最適MSSを出す

IPsec最適MTU/MSS計算機

IPsecの最適MTU/MSS計算機を作成した。

各項目を選択して、Calculateボタンを押すと、最適MTU/MSSが表示される。

回線のMTUを手動で入力したい場合は、"インターネット/回線の種類"で"手動入力"を選択し、"インターネット回線/WAN MTU"に手動でバイト数を入力する。

方式では、PCからIKEv2接続する場合は、Remote Access Clientを選択する。
GREを使わないVTI方式も、リモートアクセスと同じと思われるため併記している。
VTI、L2TP/IPsec、GRE over IPsec は、実機で確認が出来ていない。

インターネット/回線の種類
WAN Connection Type
:
暗号化方式
Encryption Algorithms
:
完全性アルゴリズム
Integrity Algorithms
:
方式
Type
: Remote Access Client / IPsec Tunnel Interface (VTI)
L2TP/IPsec
GRE over IPsec
NAT traversal:


インターネット回線/WAN
MTU
: byte
外側/Outer
IP Header
: byte
外側/Outer
UDP Header
: byte
ESP Header: byte
ESP IV:: byte
GRE
: byte
ESP Trailer: byte (Padding)
byte (Padding Length + Next Header)
ESP Authentication: byte

最適 (Optimal) MTU: byte
最適 (Optimal) MSS: byte

参考