IPv6 ULA 生成

一意ローカル IPv6 アドレス(fd00::/8)を生成。ランダムな 40 ビット全局 ID 付きで、サイトの /48 プレフィックスも表示。

グローバル不要のプライベート IPv6。 fd00::/8 範囲で一意ローカルアドレスを作成。ランダムな 40 ビット全局 ID でサイト間のプレフィックス衝突を防ぎ、64 ビットインターフェース ID で残りを埋めます。暗号乱数でローカル生成。

サイト /48 プレフィックス

ユニークローカルアドレスの実務

fd00::/8 の役割

ユニークローカルアドレス(ULA)は RFC 1918 のプライベートアドレスに相当する IPv6 の仕組みで、自分のネットワーク内部ではルーティングできるものの、公衆インターネットに運ばれることはありません。RFC 4193 はこの目的で fc00::/7 を予約し、2 つに分割しています。一般利用向けに定義されているのは fd00::/8 だけで、40 ビットのグローバル ID はプレフィックスを必要とする人が自分でランダムに選びます。もう一方の fc00::/8 は中央割り当て用に予約されましたが、その登録機関は結局作られなかったため、実際に目にする ULA はすべて fd で始まります。

構造は固定です。8 ビットの fd、40 ビットのグローバル ID、16 ビットのサブネット ID、64 ビットのインターフェース識別子と続きます。先頭 48 ビットがそのサイトの所有するプレフィックスであり、ULA ジェネレーターが単一アドレスではなく /48 を返すのはこのためです。

グローバル ID をランダムにすべき理由

この 40 ビットの乱数が、衝突を防ぐ唯一の仕組みです。fd00:1::fd12:3456:789a:: のような覚えやすいプレフィックスを選べば、それは他の人にとっても覚えやすい値です。ネットワークの統合、取引先との VPN 構築、企業買収といった場面で、衝突リスクは一気に現実のものになります。2^40 の候補から本当にランダムに選べば、2 つのサイトが衝突する確率は無視できます。

このジェネレーターはブラウザの暗号論的乱数源から 40 ビットを取得するため、値は予測不能であなた固有のものになります。なおアドレス自体は秘密ではありません。乱数性の目的は衝突回避であり、何かを隠すことではありません。

/48 の中でサブネットを設計する

16 ビットのサブネット ID は 65,536 個の /64 ネットワークを与えます。IPv6 では /64 が単一 LAN セグメントの標準サイズであり、それ以上細分化すべきではありません。SLAAC やプライバシーアドレスなど複数の仕組みがホスト部 64 ビットを前提としています。ここで節約しようとしないでください。IPv6 の空間は十分に広く、サブネット ID を VLAN ごと、拠点ごと、環境ごとといった意味のある単位に対応づけるほうが、決して枯渇しない空間を節約するよりはるかに価値があります。

最後に、ULA はグローバルアドレスの代替ではありません。一般的な設計ではグローバルにルーティング可能なアドレスと併用し、ISP から割り当てられたプレフィックスが変わっても内部サービスの番号付けが安定するようにします。

オープンソースに関する注記:crypto.getRandomValues を用いバニラ JavaScript で実装。サードパーティライブラリは使用していません。

よくある質問

ULA は何のためのものですか?
ユニークローカルアドレスは、RFC 1918 のプライベートアドレスに相当する IPv6 の仕組みです。自分のネットワーク内では経路制御できますが、公衆インターネットには決してルーティングされません。
なぜプレフィックスは /48 なのですか?
RFC 4193 は先頭 8 ビットを fd に固定し、続く 40 ビットにランダムなグローバル ID を入れます。この 48 ビットがサイトプレフィックスで、残る 16 ビットがサブネット、64 ビットがインターフェース識別子になります。
グローバル ID は本当にランダムでなければいけませんか?
必要です。将来 2 つのネットワークを統合したときに衝突しにくいのは、ランダム性があるからです。fd00::/48 のような連番や覚えやすい値では設計の意図が失われます。
fc00::/8 と fd00::/8 の違いは何ですか?
fd00::/8 はローカルで自ら割り当てるプレフィックス用で、生成すべきなのはこちらです。fc00::/8 は中央割り当て用に予約されましたが、そのレジストリは結局作られませんでした。
ULA とグローバルプレフィックスを同時に使えますか?
使えます。インターフェースが両方を持つのは一般的で、ULA は ISP のプレフィックス変更にも影響されない安定した内部アドレスを、グローバルアドレスは外向き通信を担当します。
生成したプレフィックスをどこかに登録する必要はありますか?
ありません。レジストリ自体が存在しないため、40 ビットの乱数が重要になります。統計的な一意性だけが重複を防ぐ唯一の手段です。