Part2では,第1講:トンネルの識別,第2講:パケットの検証,第3講:通信相手の認証,第4講:暗号鍵の交換,第5講:トンネルの作成――の順に, IPsecのしくみを解説していく。すべての講義を読めば,IPsecのすべてが細部まで理解できるはずだ。

 この必修で取り上げる内容は五つ。最初の二つはトンネルの使い方に関係するしくみだ。そして後半の三つが,トンネルができるまでを解説する。本来の処理の流れからすると順番が逆になるが,取っつきやすい内容から解説することにした。

 簡単にそれぞれの講義の内容を紹介しておこう(図1)。第1講は,トンネルが複数あったとき,IPsecゲートウエイがそれをどのように区別するかを解説する。IPsecでは,1台のIPsecゲートウエイに同時に何本もトンネルが作られることがある。どんなときに複数のトンネルができ,ゲートウエイがそれらのトンネルをどのように区別するかを確認する。

図1●五つのポイントを押さえていこう
図1●五つのポイントを押さえていこう

 第2講は,IPsecゲートウエイがインターネット側から受信したパケットを検査する方法だ。正規のパケットと不正なパケットをどのように見分けるかを探っていく。

 第3講はIPsecゲートウエイ同士が互いに認証するしくみ。そして第4講がトンネルを作るのに必要な暗号鍵を安全に交換する方法だ。

 最後の第5講は,第3講と第4講で得た知識を踏まえて,トンネルが作られる様子に詳しく迫っていく。どのような手順を経て,実際の通信ができる状態になるかを解説する。

第1講 トンネルの識別

 IPsecでは,仮想的なトンネルのことをSA(エスエー) という。このトンネルには,実際の通信パケットを通す通信用トンネル(IPsec SA)と,通信用トンネルを作るための制御データなどをやりとりする制御用トンネル(ISAKMP(アイサキャンプ) SA)がある。また,通信用トンネルは,一方通行の通信しかできない。したがって,1対のIPsecゲートウエイの間には,1本の制御用トンネルと,上りと下りの通信用トンネルの合計3本が少なくとも確立される。実際には,通信用トンネルは2本以上できることがある(詳細は後述)。

 この際,通信パケットを暗号化する暗号鍵は,トンネルごとに異なるものを使う。つまり,送信側のIPsecゲートウエイは,どのトンネルにパケットを通すかを決めて,それに合った暗号鍵でパケットを暗号化する。受信側のゲートウエイも,受信パケットがどのトンネルから出てきたかを判断して,そのトンネル用の暗号鍵で復号する。つまり,送信側,受信側のどちらのIPsecゲートウエイも,暗号鍵を選ぶためにトンネルを区別する必要がある。

パケットにID番号を付けて区別

 ゲートウエイがトンネルを区別する方法は単純だ。トンネルにID番号を割り振るのである。このID番号はSPI(エスピーアイ) と呼ばれ,32ビットの長さである。そしてゲートウエイ同士でやりとりするパケットに,このSPIを書き込む(図2)。こうすれば,受信側のゲートウエイは,パケットを受信したとき,どのトンネルから出てきたものか,すぐにわかる。

図2●IPsecトンネルはIDで区別する<br>複数のトンネルがあっても,IDでトンネルを区別するので混乱はしない。暗号鍵もIDごとに使い分ける。
図2●IPsecトンネルはIDで区別する
複数のトンネルがあっても,IDでトンネルを区別するので混乱はしない。暗号鍵もIDごとに使い分ける。
[画像のクリックで拡大表示]

 もう少し詳しく見ていこう。送信側のIPsecゲートウエイは,受信側ゲートウエイのIPアドレスとSPIをセットにして,このセットに対応する暗号鍵を管理している。例えば,送信側ゲートウエイのIPアドレスがA,受信側がBで,両者の間に3本の通信用トンネル(SPIは便宜上,1000,2000,3000とする)があったときを想定しよう。

 このとき,送信側ゲートウエイAは送信時に使う暗号鍵として,BあてでSPIが1000のトンネル用,BあてでSPIが2000のトンネル用,BあてでSPIが3000のトンネル用を保管している。そして,SPIが3000のトンネルにパケットを転送するときには,対応する暗号鍵を使ってパケットを暗号化し,SPIが3000だとパケット中に明記する。

 一方,受信側のIPsecゲートウエイでは受信用の暗号鍵がSPIと結びついて保管されている。つまり,SPIが1000のトンネル用暗号鍵,SPIが2000用の暗号鍵…,といった具合だ。したがって,SPIが3000と明記されたIPパケットを受信側ゲートウエイが受信したら,それに対応する暗号鍵を使って暗号パケットを復号できる。

あて先別に違うトンネルができる

 では,なぜ複数の通信用トンネルができるのだろうか。ゲートウエイが1対1で通信するなら,上り用と下り用の2本のトンネルがあれば済みそうだ。

 それはIPsecの規格で,あて先や送信元IPアドレス,TCPUDP などの通信プロトコル,あるいはポート番号などの違いで,通信用トンネルを別に設けることになっているからだ。実際,どんなときに通信用トンネルが複数に分かれるかは,IPsecゲートウエイの設定によって異なるが,典型例を紹介しておこう。

 その典型例とは,受信側IPsecゲートウエイの向こうに,二つのネットワークがあるときだ。ゲートウエイがあて先のネットワークを区別してトンネルを使い分けるためである。 例えば,ネットワークX(使っているIPアドレスは192.168.1.0~192.168.1.255)と,ネットワークY(10.1.2.0~10.1.2.255)があったとしよう(図3)。すると,ネットワークX用トンネルと,ネットワークY用トンネルができる。

図3●送信側,受信側のゲートウエイの動き<br>ゲートウエイ内でセレクタという機能が働き,SPIに対応したルールや暗号鍵を見つける。
図3●送信側,受信側のゲートウエイの動き
ゲートウエイ内でセレクタという機能が働き,SPIに対応したルールや暗号鍵を見つける。
[画像のクリックで拡大表示]

 送信側IPsecゲートウエイは,ネットワークXあてのパケットを受け取ると,ネットワークX用に設けた通信用トンネルにパケットを転送する。この判断を下すのが,セレクタという機能である(図3左)。

 一方,受信側IPsecゲートウエイは,受信パケットのSPIを読み取って,対応する暗号鍵で中のパケットを取り出す。さらに,受信側ゲートウエイ内で動いているセレクタが,「ネットワークX用のトンネルから出てきたのだから,あて先アドレスは192.168.1.xのはず」と考え,実際の受信パケットと照合する。そして,つじつまが合っていれば,LAN側に転送する。

ポイント

●暗号鍵はトンネルごとに異なる。

●IPsecゲートウエイは複数のトンネルを区別するために,やりとりするパケット中にSPIという識別番号を付ける。

●同じゲートウエイとの間でも,その先が複数のネットワークに分かれていたりすると,トンネルが複数できる。