第 4 章 階層的 Mobile IP と NAT, DNS の連携による実現手法
4.6 実装
っている。FAおよびHAにおけるMNのすべての登録情報は、基本的にmipdによって管理さ れる。一方、ホームアドレスと気付けアドレスなど、データ転送に必要な情報要素につい ては、カーネル内のデータとしても保持される。カーネル内の関数(mobileip_xxx())は、カ ーネル内のデータとして保持されるMNの登録エントリを参照して、パケットのキャプチャ、
トンネリングおよび転送をサポートする。提案手法を実現する上においても、このような Monarchプロジェクトの実装方式を踏襲し、以下のような実装を行った。
4.6.2 デーモンプロセス
提案手法の実装において、デーモンプロセスmipdを以下のように拡張した。
(1) グローバルアドレス管理機能 (NAT機能)
Mobile IP手順との連携による効率的なNAT機能を実現するため、NAT専用の独立した
ソフトウェアモジュールではなく、Mobile IPソフトウェアにNAT機能を追加する手法を 採用した。HA においては、mipdがグローバルアドレス・プールを管理し、MNがデータ 通信を開始する際に、該当するMNに対してグローバルアドレスを割り当てる。またmipd は、HA-GFA 間で新たに導入した、アドレス割当要求、アドレス割当応答、アドレス割当 通知などのアドレス管理に関するメッセージの処理も行う。
(2) Mobile IPメッセージ処理
Mobile IPの登録要求(RRQ) / 登録応答(RRP)メッセージに加え、階層的Mobile IPの局 所登録要求(RRRQ) / 局所登録応答(RRRP)メッセージの処理機能を実現した。
(3) MN登録エントリ管理機能
HAにおけるMNの登録情報であるモビリティ・バインディング・エントリ(ホーム・リ ストと呼ぶ)、およびFAにおけるMNの登録情報であるビジターリスト・エントリに加え て、階層的Mobile IPの局所登録エントリ(Regional Registration entry: RR entry)の管理 機能を追加した。mipdは、UNIXのRAWソケット・インタフェースを介して、カーネル 内で保持される登録エントリの管理を行っており、本インタフェースに局所登録エントリ の管理機能を追加した。これらの登録エントリ管理機能と、上述のメッセージ処理機能を 合わせて、起動時の設定によって、同一ソフトウェアにより、HA、GFA、FA のいずれと しても動作させることができる。
(4) ライフタイム管理機能
HA登録ライフタイムに加えて、局所登録ライフタイムおよびグローバルアドレス・ライ フタイムの管理機能を導入した。4.5.2節で示したように、グローバルアドレス・ライフタ
イムに関するアドレス割当延長メッセージの処理機能を実現した。
(5) AAA連携機能
GFA / HAとAAAサーバとの連携機能も新たに追加した。GFA / HAは、MNのMobile IP 登録処理に合わせて、AAAサーバに認証要求メッセージを送信し、AAAサーバからの認証 応答メッセージを処理する。AAAサーバのプロセス自体は、GFA / HAと同一ホスト上で も、別のホスト上でも動作させることができる。
(6) DNS連携機能
HAにおいて、NAT機能と連携し、論理名による着信を実現するためのDNS連携機能を 追加した。DNS 連携機能は、グローバルアドレスの割り当てに関するアドレス割当要求 / 応答などのメッセージの処理機能もサポートする。
4.6.3 データ構造
FA、GFA、HAの各モビリティ・エージェントは、それらに登録されている移動端末を管
理するデータ構造を持つ。これらのデータ構造は、個々のMNに対応するエントリを持ち、
それぞれのエントリは表 4-1に示すデータ要素から構成される。表 4-1は、各データ要素が、
それぞれFA、GFA、HAによって管理される必要があるか否かを示している。表 4-1に示す ように、通常のMobile IPの処理に必要なデータ要素に加えて、MNのプライベートアドレ スのサポートとNAT機能のサポートのために必要なデータ要素を新たに定義し、実装を行 った。デーモンプロセスmipdは、これらすべてのデータ要素を管理するが、ユーザパケッ トのトンネリングやアドレス変換に必要なデータ要素に関しては、カーネル内のデータと してもキャッシュが保持され、効率的なデータ転送を実現している。
カーネル内で管理されるデータ構造を以下に示す。
z vl_entry (FAで管理)
vl_entry (ビジターリスト・エントリ)は、MNのホームアドレス(プライベートアドレス) およびリンクアドレス(MACアドレス)を保持する。提案手法の実装において、FAからGFA への逆方向トンネリングをサポートするために、GFAアドレスもエントリに追加した。さ らに、4.5.1節で示したプライベートアドレスの重複に対応するため、MNに対応するHAの アドレスも保持する。
z rr_entry (GFAで管理)
rr_entry (局所登録エントリ)は、提案手法の実装のために新たに導入したものである。本
表 4-1 FA/GFA/HAで管理されるデータ要素
データ要素 FA GFA HA
MNホームアドレス
(プライベートIPアドレス)
Yes†‡ Yes†‡ Yes‡
MN MACアドレス Yes‡ No No
FAアドレス(LCoA) - Yes†‡ No GFAアドレス(GCoA) Yes†‡ - Yes†‡
HAアドレス Yes‡ Yes†‡ - HAに対するMN登録ライフタ
イム
Yes Yes† Yes
GFA に対するMN登録ライフ タイム
Yes† Yes† No
MN に割り当てられたグロー バルIPアドレス
No Yes†‡ Yes†‡
MN に割り当てられたグロー バルIPアドレスのライタイム
No Yes† Yes†
† mipdに新たに導入されたデータ要素。
‡ カーネル内のデータ構造においても参照されるデータ要素。
エントリは、MNのホームアドレス(プライベートアドレス)、FAアドレス(局所気付けアド
レスLCoA)、HAアドレス、および割り当てられたグローバルアドレスを保持する。
z hl_entry (HAで管理)
hl_entry (ホームリスト・エントリ)は、MNのホームアドレス(プライベートアドレス)と
対応する気付けアドレス(ここではGFA アドレスであるグローバル気付けアドレスGCoA) を保持する。さらに提案手法の実装においては、NAT機能をサポートするために、MNに 割り当てられたグローバルアドレスも保持する。
4.6.4 カーネル関数
MonarchプロジェクトによるMobile IP実装に基づくUNIXカーネル内の関数について は、以下の機能拡張を行った。
z mobileip_rtrequest()
本関数は、hl_entryやvl_entryなどのカーネル内データ構造の管理をサポートする。本関 数は、RAWソケット・インタフェースを介してmipdプロセスから間接的に呼び出される。
提案手法の実装においては、GFAにおけるrr_entryの管理機能や、mipdが割り当てたグロ ーバルアドレスをカーネル内のデータエントリに登録する機能などを追加した。
z ipip_input(), mobileip_input()
これらの関数は、カーネルがIPパケットを受信した際に呼び出される。FAにおいて、も
しvl_entry内にトンネリングされてきたパケットの宛先アドレスと一致するものが見つか
れば、mobileip_input()は、対応するMNのMACアドレス宛にパケットを転送する。提案手
法の実装においては、これらの関数において、GREトンネリングをサポートするとともに、
プライベートアドレスの重複に対応するための機能(4.5.1節参照)を追加した。
z mobileip_forward(), mobileip_tunnel()
HA において、MN 宛のパケットがキャプチャされると、mobileip_forward()により処理 される。mobileip_foward()は、IPヘッダのTTL (Time To Live)を削減し、mobileip_tunnel() を呼び出す。mobileip_tunnel()は、hl_entryを参照して、宛先のMNに対応するエントリが 見つかれば、そのエントリの気付けアドレス(HAのケースではGCoA)宛にパケットをトン ネリングする。NAT機能および階層的なモビリティ管理機能をサポートするため、これら の関数に対して、プライベートアドレス/グローバルアドレス変換機能およびGREトンネ リング機能を追加した。GFAにおいては、mobileip_tunnel()は宛先 MNに割り当てられた グローバルアドレスをプライベートアドレスに変換し、GREヘッダでカプセル化を行って LCoAに対応するFAに転送する。また、FAからGFAへの逆方向トンネリングをサポート するための機能追加も行った。FA は、MN から送信されたパケットをキャプチャすると、
vl_entryをチェックし、対応するGFA宛にトンネリングを行う。