IPv6(インターフェイスID)

 IPv6のインターフェイスID は、リンク上でホストを識別するために使用されます。インターフェイスID は、そのリンク上で一意である必要があります。

インターフェイスIDは、64ビットあり、手動で設定することも、自動で設定することもできます。

64ビットの値を一意に設定する仕組みには、「EUI-64」と「匿名」という仕組みが用意されています。

  • 手動
  • 自動(EUI-64、匿名)

EUI-64

 MACアドレスを基に、64ビットのインターフェイスIDを求める方式です。MACアドレスは、一意な値ですから、インターフェイスIDも一意になるというわけです。

 しかし、ここで、疑問が沸いてきます、MACアドレスは、48ビットです。インターフェイスIDは、64ビットですから、16ビット不足します。

そこで、「EUI-64」でインターフェイスIDを生成するには、以下のフローで64ビットとして形成します。

  • MACアドレス6バイトの、上位3バイトと下位3バイトをわけ、その間に「FFFE」を入れる。
  • 上位1バイト目の下位2ビット目(U/Lビット)を反転する。

分かりやすいように、下の図で、その形成方法を示します。

 

 例えば、ルータのF0のMACアドレスが、「000C.CE4B.B7A6」の場合のリンクローカルユニキャストアドレスをEUI-64形式で自動生成した場合は、次のようになります。

MACアドレス : 000C.CE4B.B7A6

MACアドレス6バイトの、上位3バイトと下位3バイトをわけ、その間に「FFFE」を入れます。

「00-0C-CE」+「FF-FE」+「4B-B7-A6」

上位1バイト目の下位2ビット目(U/Lビット)を反転します。

「00」 → 「02」

インタフェースIDは、

「02-0C-CE」+「FF-FE」+「4B-B7-A6」

になります。

リンクローカルユニキャストアドレスの上位64ビットは、「FE80::」ですから

「FE80」+「02-0C-CE」+「FF-FE」+「4B-B7-A6」

リンクローカルユニキャストアドレスは、

FE80::20C:CEFF:FE4B:B7A6

になります。

インターフェイスIDは、64ビットあり、手動で設定することも、自動で設定することもできます。

匿名アドレス

 「EUI-64」形式だとインターフェイスにMACアドレスが必要になります。ルータのシリアルインターフェイスには、MACアドレスがありません。その場合、64ビットのインタフェースIDを手動で設定するのは、面倒ですね!

 MACアドレスがないインターフェイスでも自動的にインタフェースIDを生成する方法があります。それが、匿名アドレスです。匿名アドレスでは、ランダムにインターフェイスIDを生成します。

 IPv6では、IPv4の固定アドレスに比べ、個人を特定できるケースが増加することから、プライバシー上の懸念が大きくなりますが、特定の端末やインターフェイスと関連付けられることのないランダムな数値を利用することで、ユーザが特定できないようになっています。

 ここで、疑問が沸いてきます。ランダムな数値生成を行うと、偶然、同じインターフェイスIDが割り当てられる可能性があります。

 しかし、IPv6では、IPアドレス構成が終わった時点で、同一リンク上で、他の端末が同じインターフェイスIDを使っていないかどうかを確認することになっています。

 同一リンク上で重複しなければ、他のリンク上で同じインターフェイスIDを持った端末が存在していても問題ありません。

実装によっては、MACアドレスを持つインターフェイスと同じインターフェイスIDを利用する場合もあります。

手動・自動のインターフェイスIDについて

 インターフェイスIDを手動で割り振る場合と、自動で割り振る場合のメリットとデメリットについて説明してゆきます。

 サーバやルータなどの常時稼動している機器のインタフェースIDは、手動で割り振った方が、管理上分かりやすいと思います。MACアドレスをベースとした「EUI-64」やランダムに生成する「匿名」は、サーバやルータの動作確認を行う際に、分かりにくく、少々不便です。

 また、固定で、割り振る場合は、匿名性を犠牲にすることになります。ホストのインターフェイスごとに、グローバルなインターネットに参加するIPアドレスが固定化すると、他のホストからアクセスしてもらうには、便利ですが、送信元がどのホストなのか簡単に分かってしまうことになります。