H O M E > ネットワークのおべんきょしませんか? Cisco CCNA/CCNP/CCIE、ネットワークスペシャリスト試験の勉強にピッタリ > 2005年6月
(所属カテゴリー:IPv6---投稿日時:2005年6月25日)
IPv6アドレスは64ビットのプレフィクスと64ビットのインタフェースIDをあわせたものです。プレフィクスは細かく言うと、もうちょっとわかれるんですがIPv4でいうところのネットワークアドレスです。そして、インタフェースIDは、IPv4でいうところのホストアドレスです。つまり、インタフェースIDで、ネットワーク上のホストを識別します。
インタフェースIDは、手動で設定することができます。でも、64ビットもの値を手動で設定するのはけっこう面倒なことになります。手動で設定する方法に加えて、自動的に一意なインタフェースIDを生成する仕組みがあります。この仕組みをEUI-64といいます。あと、EUI-64の他に匿名アドレスとして自動的にインタフェースIDを生成する方法もあります。
つまり、インタフェースIDの決め方は、
EUI-64は、ホストのMACアドレスをベースにしてインタフェースIDを生成します。MACアドレスは一意なので、MACアドレスを基にしてインタフェースIDを生成すれば、一意なインタフェースIDができるわけです。
MACアドレスは、3バイトのベンダーIDと3バイトのシリアル番号から成り立っているので全部で48ビットです。インタフェースIDの64ビットには足りません。そのため、16ビットを追加します。EUI-64は、MACアドレスを真ん中で割って、その間に16ビット分の「FF:FE」を追加します。これで、64ビットになります。
そして、さらにMACアドレスの上位1バイトのうち下位2ビット目のビットを反転させます。このMACアドレスの上位1バイトの下位2ビット目をUniversal/Localビットといいます。
たとえば、MACアドレスが「00-0B-5D-4B-D8-90」(ぼくのノートパソコンのMACアドレスです)だった場合、IPv6アドレスのインタフェースIDは、3バイトずつ分けて、間にFFFEを入れて、
「00-0B-5D」 + 「FF-FE」 + 「4B-DB-90」
です。そして、U/Gビットを反転させるので、
「02-0B-5D」 + 「FF-FE」 + 「4B-DB-90」
となります。これをIPv6アドレスの表記にしたがって16ビットごとに16進数に変換して「:」で区切ると、
「020B:5DFF:FE4B:D890」
です。
このように、64ビットものインタフェースIDをMACアドレスをもとに一意に自動的に生成できます。
ただ、ルータやサーバなどの常時稼動しているような機器の場合、インタフェースIDは手動で設定したほうがいいでしょう。MACアドレスをベースにしたEUI-64形式だとインタフェースIDはすごくわかりにくくなってしまいます。ルータやサーバなどの状態を確認するためにping等を行うときに、わかりにくいインタフェースIDはトラブルの元になります。
ですから、常時稼動するような機器では、わかりやすいインタフェースIDを手動で設定したほうがいいです。
ルータのシリアルインタフェースや、普通のパソコンからダイアルアップした場合のPPP接続では、MACアドレスがないです。そういった場合は、手動で設定する必要があるのでしょうか?
MACアドレスがないインタフェースに対しても、自動的にインタフェースIDを生成する仕組みがあります。これを匿名アドレスといいます。とても簡単なことで、ランダムにインタフェースIDを生成するだけです。
また、MACアドレスがあるインタフェースでもセキュリティ上、匿名アドレスを利用することも考えられます。EUI-64形式だとIPv6アドレスをみれば、MACアドレスがわかってしまいます。そのため、MACアドレスの偽装などのセキュリティ上の問題が発生する可能性が出てきますね。そうしたことがないように、あえて匿名アドレスでインタフェースIDを設定することがあります。