要約
- Duplicate Address Detectionは生成と割当てを分離した。prefixとinterface identifierから値を作れても、linkの確認中はtentativeであり、通常のtrafficには使えない。
- probeはunspecified addressから送られる。限られた待機時間に競合が見えなければlocalな利用を始められるが、identity、所有権、世界的な一意性は証明しない。
- Optimistic DADは制約付きの先行利用を認め、Enhanced DADはnonceで自己反射と別の候補を区別した。どちらもneighbor認証ではない。
作れた値をすぐには名乗らない
stateless autoconfigurationは、address serverがなくてもhostを立ち上げられる仕組みだった。routerがprefixを知らせ、hostがinterface identifierを組み合わせる。routerがなくてもlink-local addressは作れる。だが同じlink上の二台が同じ値を作る可能性は残る。
RFC 4862は、その間にtentative stateを置いた。候補は通常の意味ではinterfaceに割り当てられていない。宛先となる一般packetは捨て、DADに必要なNeighbor Discoveryだけを受け取る。これは稼働中のidentityではなく、検査中の提案である。
DADは生成経路の権威を信じない。SLAAC、DHCPv6、手作業の設定のいずれでも実施され、routerもaddressを割り当てる前に通過することが期待される。設定者が正しくても、link上の現実とは衝突し得るからだ。
候補を証明書代わりにしないprobe
RFC 4861のNeighbor Solicitationを使い、tentative addressをTargetにしてsolicited-node multicastへ送る。質問の範囲は、衝突が実害を持つlocal linkに限られる。
Sourceは::、unspecified addressである。まだ割り当てられていない候補を、その候補自身の正当性の根拠にはできない。通常のaddress resolutionで使われるSource Link-Layer Address optionも付けない。
既存利用者はNeighbor Advertisementで応答できる。同時に同じ候補を試すnode同士は、互いのDAD solicitationを見つける。有効な片方だけでも割当ては中止される。link-local addressで失敗すれば、別のidentifierか手動設定が必要になる。
DupAddrDetectTransmitsの標準値は一回で、link仕様や管理設定が変更できる。ゼロならDADをしない。RetransTimerが間隔と最後の待ち時間を決める。ここで得られるのは有限時間の観測である。
沈黙は狭い実行許可にすぎない
failure indicationがないまま時間が過ぎると、addressはassignedになる。正確には「このlinkで、この観測窓に、到達可能な競合を見なかった」という結論だ。
multicast filter、分断、sleep中のnode、壊れたswitchも沈黙する。悪意あるneighborは偽のNAで設定を妨害できる。DADはglobal registryを照会せず、deviceを認証せず、reachabilityも保証しない。link-localの同じ値が別linkに存在しても問題ではない。
この限定こそ設計の強さである。実装に必要なlocal evidenceだけを共有し、参加したneighborに所有権や広いmandateを与えない。
Optimisticでも既存所有者を追い出さない
移動のたびに待つと通信再開が遅れる。RFC 4429はOptimistic stateを加え、DAD完了前の限定利用を可能にした。ただし別の適切なsourceがあれば避ける、deprecated addressに近い扱いである。
先行利用はneighbor cacheを奪わないよう制限される。AdvertisementのOverride flagを消し、optimistic addressから通常のNeighbor Solicitationを出さず、そのaddressからのRouter Solicitationにlink-layer optionを付けない。確認が終わるまで、直接neighborへ行かずrouter経由になる場合もある。
つまりOptimistic DADは検査の省略ではない。失敗時に戻れる行為だけを先に許し、既存利用者のstateを上書きし得る行為を遅らせる。
自分の問いが競合に見えた
circuit loopback試験やaccess networkの構造は、送ったDAD frameを同じinterfaceへ戻すことがある。routerは自分のprobeを別nodeの主張だと誤認し、loop解除後もIPv6だけDAD-failedに残り得た。
RFC 7527は各probeに新しいrandom nonceを入れ、localに保存する。同じTarget、同じnonceが戻れば自己反射として記録し、捨てる。異なるnonceなら別の候補としてduplicateを扱う。新しい値でprobeを続ければ、loopが消えた後に自動回復できる。
nonceの権限は小さい。攻撃者は値を書き換えたり偽NAを送れたりするため、RFCは対抗策としてSecure Neighbor Discoveryを示す。nonceが答えるのは「これは私の今のprobeか」であって、「相手は誰か」ではない。
情報源と限界
この記事が引用する標準はNeighbor Discoveryの RFC 4861、base DADの RFC 4862、early useの RFC 4429、reflection recoveryの RFC 7527である。規範と報告済み障害は確認できるが、現在の普及率、衝突率、vendor実装の品質は示さない。
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
