128bitもあるIPv6アドレスを手動で各ノードに割り当てるのは簡単ではない。アドレス割り当てを自動化するステートレス設定とは?
前回は、同一ネットワーク・セグメント上に接続されたIPv6ノード同士でどうやってL2のアドレス(MACアドレスなど)を見つけるかという、L2アドレスの解決メカニズムについて解説した。今回は、IPv6アドレスをノードに割り当てる方法について解説する。
IPv6では128bit幅のIPアドレスを利用することはすでに述べたが、各ノードのネットワーク・インターフェイスに対してこれらのアドレスをいちいち手動で設定するのでは(IPアドレスを割り当てたり、ルート情報、DNSサーバ情報などを割り当てるのでは)、管理が非常に大変である。IPv4の場合は、当初は手動で設定していたが、管理が面倒だったり、IPアドレス衝突などのトラブルも起こったため、IPアドレスの設定を自動化したり(RARPやBOOTP、DHCPなどを使う)、衝突を避けたりする手順(アドレスが使用中でないかどうかをまずARPで確認する、など)が開発され、利用されるようになった。
IPv6ではこれらの経験を踏まえ、アドレス設定を自動化したり、衝突を検出する機能などが最初からIPv6プロトコルの一部として仕様が決定されている。またアドレス長が128bitと長くなって取り扱いが面倒になっていることもあり、DHCPサーバを使わないような小規模なネットワークであっても、なるべく手動設定を使わなくて済むような機能も用意されている。
IPv6におけるIPv6アドレスの設定方法は、大きく分けると次のように3種類ある。
設定方法 | 備考 | ||
手動設定 | ・各ノードの各インターフェイスに対して、手動で割り当てる ・ルータとして使われるノードなどではこの手動割り当てを行う |
||
自動設定 | ステートレス設定 | ・DHCPサーバがない環境でも、IPv6ネットワークに接続するだけで自動的にインターフェイス・アドレスを生成し、割り当てる ・ノードが接続されているネットワークのアドレス(プリフィックス)を自動的に取得し、それに合うIPv6アドレスを自動生成する ・デフォルト・ゲートウェイ情報も自動的に取得し、設定する ・ただしDNSサーバなどの情報は設定できない |
|
ステートフル設定 | ・各ノードに割り当てるIPv6アドレスをDHCPサーバで管理し、割り当てる ・どのノードにどのIPv6アドレスを割り当てたか、どのアドレスを割り当てるかなどはDHCPサーバ側で管理できる。 ・DNSサーバ・アドレスや(DHCPで配布可能な)各種追加情報なども自動設定できる |
||
IPv6におけるアドレス設定方法 IPv6アドレスの構造やプリフィックスなどについては、第1回を参照していただきたい。 |
ステートフル設定については次回解説することにして、今回は手動設定とステートレス設定について見ていこう。
非常に面倒だし、通常は行う必要はないが、IPv6でもユーザーが手動でアドレスを割り付けることが可能である。以下、Windows 7での設定例を示しておく。
IPv6アドレスを手動設定するには、IPv4の場合と同様に、まずコントロール・パネルからネットワーク・アダプタの一覧を開き、ネットワーク接続のアイコンを右クリックして、プロパティ画面を表示させる。
ネットワーク・インターフェイスにバインドされているIPv6プロトコルを選択して、[プロパティ]ボタンをクリックする。すると次のようなダイアログが表示されるので、IPv6アドレスや関連するパラメータなどを手動入力する。
ここではIPv6アドレスとプリフィックス長、デフォルト・ゲートウェイ・アドレスをだけを入力してみたが、必要ならDNSサーバのアドレスなども入力する(IPv6対応のDNSについては本連載の第7回を参照)。ちなみに第1回で述べたように、「2001:db8::」はサンプル用のIPv6アドレスである。
手動設定後のipconfigの実行結果は次の通りである。
最初からあるリンク・ローカル・アドレス(fe80::〜。これは必ず設定される)のほかに、手動で設定したIPv6アドレスも利用可能になっている。
IPv4の場合も同様だが、ノードにIPアドレスを(自動でも手動でも)設定する場合、そのアドレスがほかのノードに設定されているIPアドレスと衝突(重複)しているとネットワークは正しく動作しない。このような事態を避けるため、現在のIPv4の実装では、IPアドレスを有効にする前に衝突していないかどうかをチェックするのが普通である。そこでIPv6ではこの手順(DAD:Duplicate Address Detectionという)を標準化し、プロトコルの一部として、衝突の検出と回避が規定されている。
以下はアドレスの衝突が発生した場合のパケットのキャプチャ例である。IPv6アドレスを設定しようとしているノードは、まずICMPv6の「Neighbor Solicitation(NS。タイプ番号=135番)」をマルチキャスト送信して(第3回を参照。送信元のIPv6アドレス・フィールドは「::」とする)、応答がないかどうかを調べる。NSは、L2アドレスの解決を要求するコマンドだ。もし応答が返ってくれば、そのIPアドレスは使用中であると判断し、IPv6アドレスの設定/有効化を中止する。
この例では、(1)のノードが重複したIPv6アドレスを設定しようとしている。これに対して、すでに割り当て済みのノードが「Neighbor Advertisement(NA。タイプ番号=136番)」の応答を返している((2))。
すると送信元のノードはIPv6アドレスが衝突していると判断し、アドレスの割り当て/有効化を中止する。例えばWindows 7なら次のような表示が出るので、衝突したことが分かる。
Copyright© Digital Advantage Corp. All Rights Reserved.