要約

  • IPv6のサイトローカル接頭辞FEC0::/10は、グローバル接頭辞なしで内部アドレスを使えたが、アドレスだけでは所属サイトが分からなかった。
  • RFC 4193は、ローカルで生成する一意性の高い接頭辞に置き換え、到達範囲は各ネットワークのルーティングに委ねた。

分析

アドレスの残り半分はホスト側にあった

アプリがFEC0::1234:5678:9ABCを記憶して接続する。複数のネットワークにつながるホストや移動端末では、その16進表記だけでは足りないことがあった。どのサイトに向かうのか、%1のようなスコープ識別子も指定する必要がある。同じサイトでも、別のホスト環境では%2になる場合がある。アドレスは持ち運べそうに見えて、足りない部分はホストのローカル状態に置かれていた。

これが、IPv6のサイトローカル・ユニキャストアドレスの取引条件だった。2003年4月のRFC 3513は、グローバル接頭辞なしでサイト内に使うFEC0::/10を定義した。その後ろに54ビットのサブネットIDと64ビットのインターフェースIDが続く。ルーターは、このアドレスを送信元または宛先に持つパケットをサイトの外へ転送しない。ネットワークはグローバルに経路広告するブロックを得る前から、内部でIPv6を使えた。

ただし、そのアドレスは「どのサイトだからローカルなのか」を示さない。FEC0::1は二つのサイトに同時に存在できる。2004年9月のRFC 3879は、アプリが別のサイト識別子を管理し、アドレスをホストに依存しない宛先として記憶したり、DNSからそのまま学んだりできない問題を挙げた。IPアドレスを他の利用者へ渡すアプリは、その曖昧さまで運んでしまう。

「サイト」という言葉に、異なる境界の仕事をまとめて背負わせていた。企業ネットワーク、キャンパス、地理的な拠点、ルーティングドメイン、ファイアウォール区画、管理上の境界は一致するとは限らない。RFC 3879はセキュリティ、到達性、ルーティング、QoS、管理、予算などの境界を並べ、ひとつの範囲で全部を満たすのは難しいと指摘した。DMZも、ある目的には内側で、別の目的には外側になり得る。パケットのアドレスは一つでも、組織の境界図は一枚ではない。

ルーターにも同じ問題が移る。同じサイトローカル宛先の意味が、パケットの入ってきたインターフェース次第で変わるなら、複数サイトを結ぶルーターにはサイト別の経路と特別な転送テーブル処理が要る。トンネルや仮想ルーティングで処理はできても、「サイト」が全ネットワークに共通する単位にはならない。

この方式の利点は本物だった。グローバル接頭辞を持たなくても内部アドレスを使え、境界ではルーターが遮断できる。IPv6作業部会は2003年に置き換えへ傾いた。RFC 3879は3月の一定の合意と7月の確認を記す一方、合意は全会一致にはほど遠かったとも述べる。2004年9月のRFCはFEC0::/10を廃止したが、置き換えが標準化されるまでは既存の実装と導入環境で使い続けてよいとした。将来のIETF標準化作業なしに、この接頭辞を別用途へ再割り当てすることも認めなかった。

2005年10月、RFC 4193が代替策を示した。Unique Local IPv6アドレスはFC00::/7を使い、ローカルに割り当てる場合は40ビットのGlobal IDを擬似乱数で生成する。その後ろに16ビットのサブネットID、64ビットのインターフェースIDが続く。ここでの「Global」は接頭辞の一意性を指し、グローバルインターネットから到達できるという意味ではない。RFCが示すのは高い一意性の確率であり、保証ではない。ULAはローカル通信用で、限られたサイト間では経路制御できるが、インターネット全体で経路広告されるものではない。

ネットワークを統合する場面で差が出る。独立に生成したULA接頭辞が衝突する確率は低いため、合併や限定的な相互接続でも、インターフェースを付け替えずに済む可能性が高い。ただし、サイト間の通信には経路設定が要る。アドレスに普遍的な「サイト」の定義を埋め込まず、どこまで運ぶかは各ネットワークが決める。

2006年2月のRFC 4291は、この廃止をIPv6アドレス体系に反映した。新しい実装はFEC0::/10の旧来の特別な扱いをサポートしてはならない。RFCの流れは設計変更を説明するが、現在どれほど残っているかは数えていない。普及率を知るには、現行ホスト、ルーターまたはトラフィックの調査が要る。

出典