前回は、IPv6におけるネットワークプレフィックスについて解説した。今回は、個々のホストごとに割り当てるアドレス、すなわちインタフェースIDと、その際に関わってくるアドレス決定のメカニズムについて解説しよう。
インタフェースIDとEUI-64
前回の本連載で解説したように、IPv6では128ビットのアドレスのうち上位64ビットをネットワークプレフィックスとして使う。したがって、下位64ビットを個々のホストごとに異なるインタフェースIDとすることになる。
IPv6の特徴は、このインタフェースIDに対して自動構成のメカニズムを標準で用意した点にある。その際にインタフェースIDの重複が発生すると面倒なことになるので、LANアダプタのMACアドレスを基にして自動生成するようにしている。MACアドレスを使用する機器、たとえばイーサネットやIEEE802.11無線LANの機器は、すべて固有の、重複しないMACアドレスを持つのが建前になっている。したがって、MACアドレスを基にしてインタフェースIDを生成すれば、重複のないIPv6アドレスができるはずだ。
プレフィックスとして「001~111」を使用するすべてのIPv6ユニキャストアドレスは、EUI-64(Extended Unique Identifier-64)アドレスから派生する、長さ64ビットのインタフェースIDを使用するようRFC2373で規定している。ただし、MACアドレスの長さは48ビットしかないため、そのままでは長さが足りない。そこで、以下の処理を行って、長さ64ビットのインタフェースIDを生成する。
・3バイト目と4バイト目の間に「0xFFFE」を挿入して、長さを64ビットに増やす
・7ビット目(U/Lビット)を反転させて、「1」なら「0」、「0」なら「1」にする
なお、重複が起こらないように注意するという前提だが、手作業でインタフェースIDを指定することもできる。Windows Vista、Windows Server 2008、MacOS XではGUIで設定できるし、Windows XPやWindows Server 2003でもnetshコマンドを使えば設定可能だ。
IPv6のLINKLOCALアドレス
IPv4にはAPIPA(Automatic Private IP Addressing)という仕組みがあり、DHCPサーバからIPアドレスを受け取れなかったときに、代用としてLINKLOCALアドレスを利用するようになっている。いわゆる「169.254.*.*/16」のことで、この範囲内からIPアドレスを自動的に割り当てた上で、ARP(Address Resolution Protocol)ブロードキャストによって重複がないことを確認する仕組みになっている。ルータはLINKLOCALアドレスを中継しないため、同一ネットワーク内の通信しか行えない。
他のアドレス決定手段がない状態でも、LINKLOCALアドレスによるアドレス自動構成が可能だが、LINKLOCALアドレスはルータやレイヤー3スイッチによる中継の対象にならない。そのため、単一のクローズドなネットワークでしか通用しない。
IPv6でも、同様の仕組みを用意している。LINKLOCALアドレスがルータによる中継の対象にならない点も同様だ。
Windows VistaやWindows Server 2008の既定値では、IPv4と同様にIPv6アドレスの既定値も自動構成になっている。そして、LINKLOCALアドレスによる自動構成は常に機能するようになっているため、クローズドなネットワークでもIPv6による通信が機能できる。
IPv6のLINKLOCALアドレスは、「fe80::/64」を使用する。つまり、「fe80~」で始まるIPv6アドレスはLINKLOCALアドレスということになる。インタフェースIDは前述したようにMACアドレスから自動生成するので、人為的な設定作業は必要としない。
実際に、Windows VistaでIPv6アドレスの設定状況を確認してみよう。[ネットワークと共有センター]で[状態の表示]をクリックすると表示するダイアログで、さらに[詳細]をクリックすると、以下の画面を表示する。
「fc00~」はルータアドバタイズとEUI-64の組み合わせで構成したアドレス、そして「fe80~」がLINKLOCALアドレスだ。なお、ここには「一時的なIPv6アドレス」という表現が出てくるが、これについては次回に取り上げる。
もちろん、ルータアドバタイズによってネットワークプレフィックスを受け取ることができる場合には、それを使用したIPv6アドレスの構成も行うようになっている。