1. Introduction (はじめに)
Neighbor Discovery (ND) [RFC4861] は、同じリンク上のIPv6ノード(ホストとルーター)が互いに通信し、学習するために使用するメカニズムを規定しています。Stateless Address Autoconfiguration (SLAAC) [RFC4862] は、これらのNDメカニズムに基づいて構築され、ノードが独自のIPv6アドレスを設定できるようにします。ノードがNDで遭遇する可能性のある問題を分析する際には、SLAACを考慮に入れて、ライフサイクル全体で交換されるNDメッセージを確認すると役立ちます。
ホストの場合、全体的な手順は以下の通りです:
-
LLA DAD(リンクローカルアドレス重複アドレス検出): ホストはLink-Local Address (LLA)を形成し、マルチキャストNeighbor Solicitations (NS)を使用してDuplicate Address Detection (DAD)を実行します。
-
ルーター発見(Router Discovery): ホストはマルチキャストRouter Solicitations (RS)を送信して、リンク上のルーターを発見します。ルーターはRouter Advertisements (RA)で応答し、サブネットプレフィックスやその他の情報を提供します。ホストはRAを受信すると、そのルーターのNeighbor Cache Entry (NCE)をインストールします。対照的に、ルーターはこの時点でホストのNCEをインストールできません。なぜなら、ホストのグローバルIPアドレスがまだ不明だからです。ルーターが後でホストのグローバルアドレスにパケットを転送する必要がある場合、アドレス解決を実行し、ホストのNCEをインストールします。
-
GUA DAD(グローバルユニキャストアドレス重複アドレス検出): ホストはGlobal Unicast Address (GUA) [RFC3587]またはUnique Local Address (ULA) [RFC4193]を形成し、マルチキャストNSを使用してDADを実行します。説明を簡潔にするため、本文書ではGUAとULAをさらに区別しません。
-
ネクストホップ決定とアドレス解決(Next-hop Determination and Address Resolution): ホストがパケットを送信する必要がある場合、まずネクストホップがルーターかリンク内ホスト(宛先)かを決定します。ネクストホップがルーターの場合、ホストはすでにそのルーターのNCEを持っています。ネクストホップがリンク内ホストの場合、マルチキャストNSを使用して宛先ホストのアドレス解決を実行します。その結果、送信元ホストは宛先ホストのNCEをインストールします。
-
ノード到達不能検出(Node Unreachability Detection, NUD): ホストはユニキャストNSを使用して、NCEを持つ別のノードがまだ到達可能かどうかを判断します。
-
リンク層アドレス変更通知(Link-layer Address Change Announcement): ホストのリンク層アドレスが変更された場合、マルチキャストNeighbor Advertisements (NA)を使用して、新しいリンク層アドレスを他のノードに通知できます。
ルーターの場合、手順は似ていますが、ルーター発見はありません。代わりに、ルーターはホストが持たないRedirect手順を実行します。ルーターはRedirectを送信して、ノードのトラフィックのより良いネクストホップをノードに通知します。
NDは多くのメッセージでマルチキャストを使用し、すべてのノードからのメッセージを信頼します。さらに、ルーターはこれらのホストにパケットを転送する必要がある場合、オンデマンドでホストのNCEをインストールする可能性があります。これらは問題につながる可能性があります。具体的には、さまざまなND問題と緩和ソリューションが20以上のRFCで公開されています:
- "IPv6 Neighbor Discovery (ND) Trust Models and Threats (IPv6近隣探索信頼モデルと脅威)" [RFC3756]
- "SEcure Neighbor Discovery (SEND) (セキュア近隣探索)" [RFC3971]
- "Cryptographically Generated Addresses (CGA) (暗号生成アドレス)" [RFC3972]
- "Neighbor Discovery Proxies (ND Proxy) (近隣探索プロキシ)" [RFC4389]
- "Optimistic Duplicate Address Detection (DAD) for IPv6 (IPv6の楽観的重複アドレス検出)" [RFC4429]
- "IPv6 in 3rd Generation Partnership Project (3GPP) Evolved Packet System (EPS) (第3世代パートナーシッププロジェクト進化パケットシステムにおけるIPv6)" [RFC6459]
- "IPv6 for Third Generation Partnership Project (3GPP) Cellular Hosts (第3世代パートナーシッププロジェクトセルラーホスト用IPv6)" [RFC7066]
- "IPv6 in the context of TR-101 (TR-101のコンテキストにおけるIPv6)" [TR177]
- "Address Resolution Protocol (ARP) Mediation for IP Interworking of Layer 2 VPNs (レイヤ2 VPNのIP相互運用のためのアドレス解決プロトコル仲介)" [RFC6575]
- "Operational Neighbor Discovery Problems (運用近隣探索問題)" [RFC6583]
- "Neighbor Discovery Optimization for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) (低電力ワイヤレスパーソナルエリアネットワーク上のIPv6の近隣探索最適化)" [RFC6775]
- "Registration Extensions for IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Neighbor Discovery (低電力ワイヤレスパーソナルエリアネットワーク上のIPv6近隣探索の登録拡張)" [RFC8505]
- "Address-Protected Neighbor Discovery for Low-Power and Lossy Networks (低電力有損ネットワークのアドレス保護近隣探索)" [RFC8928]
- "IPv6 Backbone Router (IPv6バックボーンルーター)" [RFC8929]
- "Architecture and Framework for IPv6 over Non-Broadcast Access (非ブロードキャストアクセス上のIPv6のアーキテクチャとフレームワーク)" [SND]
- "Duplicate Address Detection Proxy (重複アドレス検出プロキシ)" [RFC6957]
- "Source Address Validation Improvement (SAVI) Framework (送信元アドレス検証改善フレームワーク)" [RFC7039]
- "IPv6 Router Advertisement Guard (IPv6ルーター通知ガード)" [RFC6105]
- "Implementation Advice for IPv6 Router Advertisement Guard (RA-Guard) (IPv6ルーター通知ガードの実装アドバイス)" [RFC7113]
- "Enhanced Duplicate Address Detection (拡張重複アドレス検出)" [RFC7527]
- "The Scalable Address Resolution Protocol (SARP) for Large Data Centers (大規模データセンター向けスケーラブルアドレス解決プロトコル)" [RFC7586]
- "Reducing Energy Consumption of Router Advertisements (ルーター通知のエネルギー消費削減)" [RFC7772]
- "Unique IPv6 Prefix per Host (ホストごとの一意のIPv6プレフィックス)" [RFC8273]
- "Transparent Interconnection of Lots of Links (TRILL): ARP and Neighbor Discovery (ND) Optimization (大量リンクの透過的相互接続:ARPと近隣探索の最適化)" [RFC8302]
- "Gratuitous Neighbor Discovery: Creating Neighbor Cache Entries on First-Hop Routers (無償近隣探索:ファーストホップルーターでの近隣キャッシュエントリ作成)" [RFC9131]
- "Operational Aspects of Proxy ARP/ND in Ethernet Virtual Private Networks (イーサネット仮想プライベートネットワークにおけるプロキシARP/NDの運用面)" [RFC9161]
- "Using DHCPv6 Prefix Delegation (DHCPv6-PD) to Allocate Unique IPv6 Prefixes per Client in Large Broadcast Networks (大規模ブロードキャストネットワークでクライアントごとに一意のIPv6プレフィックスを割り当てるためのDHCPv6プレフィックス委任の使用)" [RFC9663]
本文書は、これらのRFCを(執筆時点で)1つの参照にまとめ、よりアクセスしやすくしています。また、本文書は問題の3つの原因を特定し、これらの原因に対処し、潜在的なND問題を防ぐための3つのホスト分離方法を定義しています。
1.1. Terminology (用語)
本文書は[RFC4861]で定義された用語を使用します。追加の用語をこのセクションで定義します。
MAC(Media Access Control、メディアアクセス制御): リンクローカルアドレスとの混同を避けるため、本文書ではリンク層アドレスを「MACアドレス」と呼びます。
ホスト分離(Host Isolation): ホストを異なるサブネットまたはリンクに分離すること。
L3分離(L3 Isolation): Unique Prefix per Host (UPPH) [RFC8273] [RFC9663]を割り当てて、すべてのホストが異なるサブネットにあるようにすること。共有メディア上でホストごとに一意のプレフィックスを割り当てることができるため、異なるサブネットのホストが同じリンク上にある可能性があります。
L2分離(L2 Isolation): ホストがLayer 2 (L2)で他のホストに直接到達できないようにする措置を講じて、すべてのホストが異なるリンクにあるようにすること。Multi-Link Subnet [RFC4903]の存在により、異なるリンクのホストが同じサブネットにある可能性があります。したがって、L2分離はL3分離を意味せず、L3分離もL2分離を意味しません。
L3+L2分離(L3+L2 Isolation): L3分離とL2分離を同時に適用して、すべてのホストが異なるサブネットと異なるリンク上にあるようにすること。
部分的L2分離(Partial L2 Isolation): L3 NDプロキシ[RFC4389]デバイスを使用して、その背後にあるホストを同じサブネット内の他のホストに代表させること。サブネット内で、NDマルチキャスト交換は複数の小さなスコープにセグメント化され、各スコープはNDプロキシデバイスによって代表されます。