IPv6 (Internet Protocol Version 6) は,拡張可能なヘッダ構造,アドレスの自動構成,セキュリティ (IPsec),トンネリングなどの機能を通じて移動性 (mobility) をサポートするように設計されています。 Mobile IPv6 はこれらの機能の上に構築され,モバイル・ノードが,ノードの IP アドレスを変更することなしにリンク間を移動できるようにする動作を定義しています。 このようにして,モバイル・ノードが他のネットワークに移動しても,透過的にモバイル・ノードとの間でパケットのルーティングができます。
Mobile IPv6 の実装には,次のような制限があります。
TruCluster システムではサポートされていません。
IETF Internet Draft for
Mobility Support in IPv6
(draft-ietf-mobileip-ipv6-15.txt
) のセクション 4.4 で規定されているように Binding Update 認証はサポートしていません。
これには,セクション 5.6 で定義されている Authentication Data Sub-option も含みます。
このため,この実装の使用は,攻撃を受けるおそれのないテスト環境に限定されます。
これは,認証されていないバインドを受け入れて,システムの統一性が失われる可能性があるためです。
この章の内容は次のとおりです。
問題解決については,10.4 節
を参照してください。
5.1 Mobile IPv6 の経緯
通信の分野では,移動性の強化がトレンドになっています。 携帯電話はすでに,ビジネスや個人の通信形態を変革しています。 コンピュータ,特にラップトップ・コンピュータやハンドヘルド・コンピュータも移動性を備えていますが,これらはまだ携帯電話のような連続的な接続性は備えていません。
今日では,WAP (Wireless Application Protocol) や GPRS (General Packet Radio Service) を使用する基本的なデータ・サービスがあります。 しかし,次のようなトレンドによって,声とデータをフルに利用できるモバイル通信の要求が生まれています。
3G (第 3 世代) ネットワークの開発
ビデオ,音声,画像など,大容量でさまざまなタイプのコンテンツのインターネット上での利用
ワイヤレス契約者とインターネット・ユーザの増大
音声およびデータの機能を備えた集合型デバイスの開発
Mobile IPv6 環境では,ノードには次のような役割があります。
取り付け位置をリンク間で変更することができ,変更後もホーム・アドレスから到達できる IPv6 ノード (ホストまたはルータ)。
モバイル・ノードと通信するピア IPv6 ノード。 コレスポンデント・ノード (ホストまたはルータ) は,モバイル・ノードでも静止ノードでもかまいません。 Mobile IPv6 の Tru64 UNIX 実装を使用すると,システムをコレスポンデント・ノードにすることができます。
モバイル・ノードが現在の気付アドレス (care-of address) を登録する,モバイル・ノードのホーム・リンク上にあるルータ。
これらのノードの相互関連を理解するには,次の用語に関する理解が必要です。
モバイル・ノードがホーム・リンク上またはホーム位置にある場合の,モバイル・ノードの IPv6 アドレス。 このアドレスのサブネット・プレフィックスはホーム・ネットワークのサブネット・プレフィックスになります。 モバイル・ノードは,常にホーム・アドレスで参照できます。 ホーム・アドレスは変わりません。
モバイル・ノードが外部リンクまたはホーム以外の位置にある場合の IPv6 アドレス。 このアドレスのサブネット・プレフィックスは外部ネットワークのサブネット・プレフィックスになります。 モバイル・ノードには複数の気付アドレスが設定できますが,モバイル・ノードのホーム・エージェントに登録した気付アドレスは,1 次気付アドレスと呼ばれます。
モバイル・ノードのホーム・アドレスと気付アドレスの対応付け。 この対応付には存続期間もあります。 各ノードは全バインディングのキャッシュを維持します。 バインディング・キャッシュの内容を表示する方法については,11.4 節 を参照してください。
図 5-1 は,以下のシナリオを示します。
モバイル・ノードはホーム・リンク上にあります。 これは定位置と考えられます。 コレスポンデント・ノードからモバイル・ノードのホーム・アドレスに送られたパケットは,一般的な IP ルーティング・メカニズムによって配信されます。
モバイル・ノードは外部リンクに移動しています。 ノードは,現在ホームから離れていると見なされます。 モバイル・ノードはホーム・エージェントに Binding Update を送信し,その気付アドレスを通知します。 コレスポンデント・ノードからモバイル・ノードのホーム・アドレスに送られたパケットは,ホーム・エージェントに横取りされモバイル・ノードへトンネリングされます。 モバイル・ノードはパケットを受信すると,コレスポンデント・ノードへ Binding Update を送信します。 コレスポンデント・ノードはホーム・アドレスと気付アドレスの間にバインディングを作成します。 これで,ホーム・ネットワークを通さずにモバイル・ノードと直接通信できるようになります。
このようなルート最適化により,一般に三角ルーティングと呼ばれるルーティングが排除され,モバイル・ノードのホーム・エージェントとホーム・リンクでの輻輳が排除され,ホーム・エージェント,ホーム・リンク,ホーム・リンクにつながる中間のネットワークで障害が発生した場合の影響も少なくなります。
モバイル・ノードがホームから離れている場合,モバイル・ノードは必ずホーム・アドレス・オプションを送信して,受信側に自分のホーム・アドレスを通知します。 このようにして,受信側はそのパケットが所属する接続を正確に識別できるようになります。
モバイル・ノードがホーム・リンクに戻ります。 ホーム・リンク上で,モバイル・ノードはホーム・エージェントとコレスポンデント・ノードに Binding Update を送信し,バインディングをクリアします。
ここでは,Mobile IPv6 を構成する前に必要な作業について説明します。
また,システムを PIv6 ホスト・ノードまたはルータとして構成する必要があります。
詳細は
3.7 節
を参照してください。
5.4.1 カーネルでの IPv6 サポートの確認
Mobile IPv6 サポートは,IPv6 サブセットの一部として含まれています。 次のコマンドを入力して,IPv6 サブセットがインストールされていることを確認します。
# sysconfig -q ipv6
ipv6:
サブシステム属性が表示されない場合は,3.6.1 項
で述べた手順に従って IPV6 オプションの選択とインストールを行います。
サブセットのインストールについての詳細は,
setld
(8)5.4.2 カーネルでの Mobile IPv6 サポートの確認
次のコマンドを入力して,Mobile IPv6 サポートがカーネルに構成されていることを確認します。
# sysconfig -q ipv6 mobileipv6_enabled
mobileipv6_enabled
属性が定義されていない場合,カーネルに Mobile IPv6 は構成されていません。
正しいカーネルを実行しているか確認してください。
正しいカーネルを実行している場合は,doconfig
コマンドでカーネルを再構成します。
詳細は
3.6.1 項
を参照してください。
mobileipv6_enabled
が定義されていても 1 が設定されていない場合は,次のコマンドで再構成します。
# sysconfig -r ipv6 mobileipv6_enabled=1 mobileipv6_enabled: reconfigured
これで,システムはコレスポンデント・ノードとして動作できるようになります。
コレスポンデント・ノードはルータとしてパケットを転送することもできます。
システムをルータとしても使用する場合は,5.5 節
を参照してください。
5.5 Mobile IPv6 の構成
ここでは,IPv6 ノードをコレスポンデント・ノードとして構成する方法,および IPv6 ルータとして動作するコレスポンデント・ノードとして構成する方法を説明します。
5.5.1 コレスポンデント・ノードの構成
カーネルに IPv6 サポートが組み込まれていることが確認できれば,システムはコレスポンデント・ノードとして機能し,ホーム・エージェントを通してモバイル・ノードと通信できるようになり,Binding Update をモバイル・ノードから受信した後は,モバイル・ノードと直接通信できるようになります。 これ以上の構成は不要です。
IPv6 インストール後の作業については,3.8 節
を参照してください。
5.5.2 コレスポンデント・ノードおよびルータの構成
コレスポンデント・ノードを IPv6 ルータとしても動作させる場合は,次の手順で操作します。
システムを IPv6 ルータとして構成します。 詳細は 3.7.2 項 を参照してください。
システムのブート時に,ip6rtrd
デーモンが Mobile IPv6 環境で機能するようにします。
まず,次のコマンドを実行してデーモンのフラグを取得します。
# rcmgr get IP6RTRD_FLAGS
次に,-m オプションをフラグに追加します。 直前のコマンドでフラグが表示されなかった場合は,次のコマンドでフラグに -m オプションを追加します。
# rcmgr set IP6RTRD_FLAGS "-m"
/etc/ip6rtrd.conf
ファイルを編集して,Router Advertisement の間隔を次のように変更します。
# # Sample ip6rtrd configuration file # interface interface-name { MinRtrAdvInterval 0 /* Min = seconds */ MinRtrAdvIntervalMsec 500 /* + milliseconds */ MaxRtrAdvInterval 1 /* Max = seconds*/ MaxRtrAdvIntervalMsec 500 /* + milliseconds */ }
これにより,IPv6 ルータは要求によらないマルチキャストの Router Advertisement を 0.5 〜 1.5 秒おきに送信し,モバイル・ノードの移動を早く検出できるようにします。
詳細は
ip6rtrd.conf
(4)
次のコマンドで IPv6 を再起動します。
# /usr/sbin/rcinet restart inet6
IPv6 インストール後の作業については,3.8 節
を参照してください。
5.6 Mobile IPv6 環境のモニタリング
Mobile IP 環境をモニタリングするには,次のものを使用します。
tcpdump
コマンド
netstat
コマンド
IPv6 デーモンのログ・ファイル
tcpdump
ユーティリティは,IPv6 パケットの取り込み,解析,出力を行います。
Binding Update および Acknowledgement オプションは,IPv6 パケットの IPv6 Destination Option ヘッダに含まれています。
tcpdump
を使用するには,カーネルに PACKETFILTER オプションを構成する必要があります。
詳細は
packetfilter
(8)
可能なパケットをすべて表示するには,インタフェースを Promiscuous および Copyall モードに構成してから,次のように
tcpdump
コマンドを実行します。
# pfconfig +p +c interface # tcpdump -i interface -s 1500 [-x] [ipv6]
詳細は
tcpdump
(8)5.6.2 netstat の使用
netstat
-b
コマンドを使用すると,現在の移動バインディングとその属性がモニタリングできます。
コマンドの出力例を次に示します。
# netstat -b
Mobile IPv6 Binding Cache Home Address Care-of Address Flags Refs Sequence# Lifetime testhome testcoa A 1 1 43 [1] [2] [3] [4] [5] [6]
上記の例では,次のことがわかります。
モバイル・ノードは,ホーム・アドレス
testhome
を持っています。
[例に戻る]
現在,気付アドレス
testcoa
に到達できます。
[例に戻る]
Binding Update に対して肯定応答を行うように要求しました (A フラグ)。 [例に戻る]
このバインディング・データ構造には,現在 1 つの参照があります。 [例に戻る]
Binding Update でシーケンス番号に 1 を設定しています。 [例に戻る]
このバインディングの存続期間は 43 秒残っています。 存続期間が満了すると,エントリはキャッシュから削除されます。 [例に戻る]
netstat
-bs
コマンドを使用すると,移動バインディングに関する統計情報がモニタリングできます。
コマンドの出力例を次に示します。
# netstat -bs Mobile IPv6: 1 entry in binding cache 1 add 0 deletes 0 changes 0 frees 3 lookups
詳細は
11.4 節
および
netstat
(1)5.6.3 IPv6 デーモンのログ・ファイル
ip6rtrd
デーモンは,情報イベントと重要なイベントを
/var/adm/syslog.dated/date/daemon.log
ファイルに記録します。
詳細は
11.9 節
を参照してください。
ip6rtrd
デーモンのデバッグ情報のロギングを有効にするには,次のコマンドを実行します。
# rcmgr set IP6RTRD_FLAGS "-d -l -m /usr/tmp/ip6rtrd.log" # /usr/sbin/rcinet restart inet6