本文へジャンプ

ローカルな環境でIPv6を使う


RFC 4193 一意なローカルIPv6アドレス

IPv6をインターネットのグローバルアドレスとは別に使用する場合に、IPv4のときのプライベートアドレスのように使用できるアドレスが必要です。当初この目的にサイトローカルと呼ばれるアドレスが候補だったのですが、最近サイトローカルアドレスの使用は推奨しないことに決まりました。サイトローカル廃止については、RFC 3879を参照。

一意なローカルIPv6アドレスの構造
1111 110 1*1 グローバルID(40bit) サブネットID(16bit) インタフェースID(64bit)
*1) このビットが0の場合、将来定義(仕様外)となります。

グローバルIDは、疑似ランダムなアルゴリズムを使用して割り当てることにより極力一意性を保つ仕様となっていますが、絶対に一意であることは保障されません(とはいえ、RFC 4193で推奨される方法で割り当てれば衝突の可能性は極めて低いです)。
サブネットIDは、任意に割り付けることができるので、構築するサイトのネットワーク構成に応じてIDを振ります。

一意なローカルIPv6アドレス用グローバルIDの作成

RFC 4193には、グローバルIDを生成する疑似アルゴリズムとして、NTPタイムスタンプとEUI-64識別子を結合し、SHA-1でハッシュ値を生成し、その下位4バイトを使用する方法を掲示しています。EUI-64 識別子はMACアドレスから導出することができます。

NTPタイムスタンプは、1900年1月1日0時0分0秒を基準点とした64bitの固定小数点形式で、LSBが2-32[秒]となります。


ツール

Javaで作成したグローバルID生成ツールです。MACアドレスを取得する機能がJDK 6よりJava標準に追加されたので、JDK 6以上で実行可能です。実行可能JAR形式です。 上記JARファイルをダウンロードし、Java SE 6以上のJavaVMで実行すると下記画面が表示されます。最初は空欄ですが、現在日時/MAC取得ボタンを押すと、RFC 4193に記載のアルゴリズムによってグローバルIDを作成します。


参考・参照