【VPN】 IPsecフラグメントの問題と対策 その5
■IPsec化の前にフラグメントをする場合
島田君:
ちわー。
今夜もIPsecの実践的な技術について教えて。
マスター:
今回はIPsec化の前にフラグメントをする方法について解説するよ。
島田君:
待ってました。
マスター:
ここまでの話は、GREでカプセリングした後やIPsec化後にフラグメントが発生するから、色々と問題が出てきたんだよね。
実はCiscoでは2004年頃にはその問題に気づいていて対策を取ってるんだ。
島田君:
何?まじで?
マスター:
LAF(Lool Ahead Fragmentation)といって、IOSは12.2(13)Tから対応している機能だよ。
パケットをIPsec処理する際に、元のパケット長に84byte(ESPオーバヘッドの最大値)を追加したパケット長をチェックし、これがPath MTUサイズを超えていればIPsec処理前にフラグメントを実行するというものだよ。
このLAFにより、受信側の処理パフォーマンスが7200VXRを使った場合に12Mbpsから70Mbpsに向上したという報告もある。
島田君:
なんだ、最初からこれを使えばよかったんじゃないの?
マスター:
そうとも限らないんだよ。
なぜかというと、LAFはトンネルモードでしか機能せず、トランスポートモードでは使えないからなんだ。
ヘッダ効率の面からはトンネルモードよりもトランスポートモードのほうが良いので、最適なIP MTU値を手動で計算したほうが良い場合もあるでしょ。
マスター:
といっても、いちおうLAFについても説明を入れておくよ。
LAFはcrypto ipsec df-bit { clear | set | copy }の設定と、入力されるパケットのDFビットの状態に大きく依存するよ。
島田君:
df-bitの後ろのclear,set,copyは、それぞれ、オリジナルのIPヘッダからIPsecのIPヘッダへDF
ビットをどうするかを決めるコマンドという理解で良いよね?
マスター:
いいよ。
例えば、入るパケットのDFビットが1で、crypto ipsec df-bit clear ならば、IPsecのIPヘッダのDFビットは0になるということを表しているよ。
コマンドとしては、crypto ipsec fragmentation before-encryption で、デフォルトでEnableになっているよ。
また、Ciscoの新しいIPsecの手法であるVTI (Virtual Tunnel Interface) でもデフォルトでこの機能はEnableになっている。
動きを調べた結果を示すよ。
(図)Cisco VTI 暗号化アルゴリズム:AES トンネル IP MTU=1427byte(自動的に計算される)
![]()
上記の例の場合、PC-Bから送信するデータサイズが1428byte以上だと、IPsecの処理前にフラグメントされる。
すなわち、フラグメントされたパケットそれぞれがIPsec化されるので、受信側ルータ(Router-C)はIPsecの複合化処理をするだけでよく、フラグメントの再構築は受信端末(PC-C)に任せることができる。
そのため、受信側ルータ(Router-C)は負荷が軽い。
島田君:
Cisco以外はどうなの?
マスター:
NEC IXシリーズとYAMAHA RTXシリーズでも調べたよ。
NEC IXシリーズは、Ver7.5.59以降でpre-fragmentコマンドが設定できるようになり同様の動きをするし、YAMAHA RTXシリーズは動作確認したVer8.2.40ではやはりIPsec化前にフラグメントする機能が備わっていたよ。
島田君:
IPsecを使う場合、帯域よりも通信効率を重視する場合はGRE over IPsecトランスポートモードを使って、通信効率よりもパフォーマンスを重視する場合はLAFが使えるGRE over IPsecトンネルモードやVTIを使うと良いってことだね。
マスター:
その通り。
島田君:
勉強になったよ。
これでIPsecについては中上級になったんじゃない?
マスター:
何を言ってるんだい。
IPsecに関しては、まだまだ知っておくべき事は山ほどあるよ。
中上級と呼べるにはまだ先は長いよ。
島田君:
りょうかい...。
