Part2までで,IPsecのしくみはお分かりいただけただろう。Part3では,パケット長問題やNAT越え問題など,実際にIPsec対応機器を使うときに陥りやすい問題と,その対応策について解説していこう。

 これまでの講義で,IPsecのしくみは理解できた。しかし,実際に使ってみると,うまくつながらないことがある。IPsec利用時によく遭遇するトラブルの原因と対策を確認しておこう。

例題1 パケット長問題

 IPsecを使って送られるパケットは,トンネルの区間で新しいIPパケットに包まれて送られる。オリエンテーションでも必修でも出てきたカプセル化である。

 当然のことながら,カプセル化後のパケットは元のパケットよりも長くなる。具体的には,新たなIPヘッダー(20バイト),ESPヘッダー(8バイト),認証データ(12バイト)が元のパケットの外側に付け加わる。

 また元のパケットは暗号化されたあと,長くなることはあっても短くはならない。この結果,IPsecゲートウエイ同士がやりとりするカプセル化されたパケットは,元のIPパケットよりも40バイト以上長くなる。

ICMPが遮断されると通信できない

 ネットワークは,それぞれの区間で流せるパケットの最大の長さが決まっている。ほとんどのIPsecゲートウエイは,LAN側,インターネット側ともイーサネットとつながっているだろう。この場合の最大パケット長は1500バイトだ。

 こんなとき,IPsecゲートウエイがLAN側のコンピュータから1500バイトのIPパケットを受け取ったとしよう。すると,ゲートウエイは受信パケットを暗号化,カプセル化して通信用トンネルを通して向こう側のゲートウエイに転送しようとする。しかし,カプセル化後のパケットは1500バイトを超えるので,そのままではインターネット側へ転送できない。

 すると,IPsecゲートウエイはインターネット側へ転送できる大きさにIPパケットを分割しようとする。しかし,元のIPパケットのヘッダー部分には,分割禁止と指定されていることが意外と多い。

 ただ,これだけでは問題はまだ顕在化しない。IPsecゲートウエイはパケットを捨てると同時に,LAN側の送信元端末に対して,もっと短いパケットにして送り直してもらうようにエラー・メッセージを返すからだ。そして,これを受信したLAN側端末が,カプセル化しても1500バイトに収まるパケットを送り直す。

 トラブルになるのは,このエラー・メッセージが送信元端末に届けられないときである。

 よくあるのは,送信元端末,あるいは端末とIPsecゲートウエイの間にあるルーターがエラー・メッセージを遮断してしまう場合だ(図1)。エラー・メッセージはICMPというプロトコルを使うのだが,ICMPパケットを通さないようにしているルーターやサーバー・マシンがある。

図1●IPsec通信に不可欠なパケット・サイズの調整に失敗することがある<br>カプセル化でパケットが長くなる分,端末からのパケット・サイズを小さくする必要がある。しかしICMPパケットがフィルタリングされているとうまく働かない。
図1●IPsec通信に不可欠なパケット・サイズの調整に失敗することがある
カプセル化でパケットが長くなる分,端末からのパケット・サイズを小さくする必要がある。しかしICMPパケットがフィルタリングされているとうまく働かない。
[画像のクリックで拡大表示]

 こうなると,IPsecゲートウエイが返したエラー・メッセージは送信元に届かないだけでなく,送信元は途中でパケットが捨てられたことにも気づかない。この結果,IPsecを使った通信が途切れてしまう。

単純な対策では完璧にならない

 このような場合の対策ですぐに思いつく方法は二つある。(1)ルーターなどの設定を変えてICMPパケットが通るようにする,(2)端末の設定を変えて最初から短めのパケットしか送らないようにするという手段だ。

 しかし,これらの手段では問題を根本から解決できないことがある。例えば,クライアントがIPsecトンネルを経由して向こう側のLANを通過し,そこからインターネット上のWebサーバーなどにアクセスする場合だ。こんなケースで,ICMPパケットを遮断したり大きなパケットを出しているのがインターネット上のルーターやサーバーだと,それらの機器の設定を変えてもらうのはほとんど不可能だろう。

指定を無視してパケットを分割する

 では,どうするか。最終手段として考えられるのは,パケットが分割禁止の指定になっていても,ゲートウエイが分割してしまう方法だ。実際,一部の製品が採用している。

 この手段が使えるIPsecゲートウエイだと,LAN側から1500バイトのパケットを受け取ると,パケットを暗号化したものにESPヘッダーと認証データを付け加える。そして,これを1480バイト以下になるように分割したのち,20バイトのIPヘッダーを付けてインターネット側へ転送する(図2)。

図2●IPsecゲートウエイがパケットを分割することもある<br>図1のような不具合が出ないように,パケットを勝手に分割するゲートウエイもある。
図2●IPsecゲートウエイがパケットを分割することもある
図1のような不具合が出ないように,パケットを勝手に分割するゲートウエイもある。
[画像のクリックで拡大表示]

 そして,受信側のIPsecゲートウエイが分割されたパケットを組み立てて1個のパケットに戻し,向こう側のLANへ転送するのである。

 ただし,この手法だとインターネットを流れるパケットの数が増え,細切れになるので,伝送効率が落ちてしまう。しかも,送信側と受信側のIPsecゲートウエイがパケットを分割したり,組み立てたりする必要が出てくるので,ゲートウエイに余計な負荷がかかる。このため,パケットを無理やり分割できる機能を持ったIPsecゲートウエイを販売しているメーカーも,この機能の利用をあまり推奨していない。