要約
- RFC 4456の route reflector は、通常の iBGP が禁じる内部経路の再広告を限定的に許す。
ORIGINATOR_IDとCLUSTER_LISTが、その例外に発信元と通過履歴を与える。 - local identity との一致は advertisement を無視する根拠になる。同一 cluster の冗長 RR では正しいが、無関係な reflection domain へ値を再利用すると正当な経路が「戻ってきた経路」に見える。
- raw UPDATE、判定理由、client role、候補、neighbor 別出力、FIB、packet を結ぶ必要がある。Established は NLRI の生存証明ではない。
同じ数字を二つの地域へ配った
東西に独立した reflection domain があり、それぞれ二台の冗長 RR を持つとする。東側の二台は10.0.0.42を共有する。同じ logical cluster を表すためであり、一台が既に反射した経路を他方が再び回さないという正当な設計である。
統合用の設定ひな型が、その値を西側にも投入した。階層設計では東西は別のままだが、protocol identity は同一と宣言した。東の client から来た経路には10.0.0.42が記録されている。西の RR は local value を見つけ、その経路を無視する。
TCP reset も NOTIFICATION も必要ない。KEEPALIVE は続き、originator の RIB にも経路は残る。session dashboard だけなら正常である。ところが一つの prefix は、選択処理より前の比較で消えている。
これは mechanism を示す合成例であり、実障害の主張ではない。重要なのは、loop-prevention label が topology の意味を正しく表す場合にだけ安全だという点である。
Full mesh を破るための例外
通常の iBGP speaker は、ある内部 peer から学んだ経路を別の内部 peer へ広告しない。AS_PATH による外部ループ防止が使えない領域で再配布を止める単純な規則だが、大規模 AS に full mesh を要求する。
Route reflection は client/non-client role でこの負担を減らす。Non-client から得た best path は clients へ、client から得た best path は clients と non-clients へ送れる。他の RR も internal peer であり、どちらの role にもなり得る。
Role は protocol 内で合意されない。両端の session が成立しても、互いの関係を異なる graph として設定できる。OPEN が示すのは AS と Identifier であって、client membership に対する共同署名ではない。
基礎的な reflection は候補も減らす。RR が best path を選び、その結果を配る。ORR は client の IGP 視点を代行し、ADD-PATH は条件付きで複数候補を伝えるが、どちらも戻り経路を見分ける identity rule を無効にしない。
Originator と cluster の記憶
ORIGINATOR_IDは type 9の optional non-transitive attribute で、長さは4 octet である。RR が最初に反射するとき、AS 内で経路を起こした speaker の BGP Identifier を保存する。既存値を作り直してはならず、自分の Identifier を受け取った router は経路を無視すべきだ。
CLUSTER_LISTは type 10で、通過した cluster identities を順序付きで持つ。各 RR は反射時に local CLUSTER_IDを先頭へ追加する。受信側が local value をリスト中に見つければ、その information は同じ cluster へ戻ったものとして扱う。
二つの属性は認証ではない。前者は最初の internal originator への帰還を、後者は reflection domain への帰還を検出する。外部 origin の権限、router の所有、interface の到達性は証明しない。
RFC 6286では BGP Identifier は AS 内で unique な nonzero 4-octet value であり、割り当て済み IPv4 address である必要はない。点区切り表示を資産や location と読み替えてはならない。Cluster ID も論理的な値であり、等号が route acceptance へ作用するからこそ厳密に管理する。
正しい共有と偽の等価性
同じ cluster に複数の redundant RR を置く場合、RFC 4456は共通 cluster ID を認める。互いを同じ防御領域の member と扱い、既処理の経路を捨てるためである。共有そのものは bug ではない。
問題は、その equivalence class を越えて値が広がることにある。設定の複製、router ID 再利用、inventory 統合、per-neighbor override、途中の hierarchy migration が別領域を同一に見せる。Protocol は人間の意図を読まず、受信値と local value だけを比較する。
ORIGINATOR_IDでは、同一 AS の二台が BGP Identifier を重複させると、一方の経路を他方が自分の戻りとして拒否できる。実 packet loop の観測は前提ではない。Symbol collision だけで到達性に対する decision が成立する。
従って global uniqueness という一語では足りない。BGP Identifier は AS-wide unique である。Cluster ID は、真に同じ冗長 cluster の member 間では共有し、異なる domain を結ぶ valid path 上では衝突させない。
Malformed と semantic match を分ける
Local cluster ID を含む well-formed UPDATE は壊れた message ではない。正しい構造の情報が loop rule を発動したのである。RFC 7606が扱う malformed attribute とは別の事象だ。Telemetry は parser error、import policy、originator match、cluster match、best-path loss を別々に残さなければならない。
Hard reject がなくても属性は tie-break へ入る。ORIGINATOR_IDは対応する段階で advertising speaker の BGP Identifier として使われ、さらに短いCLUSTER_LISTが優先される。List なしは長さ0である。
この長さは物理距離でも delay でも trust でもない。Reflection history の表現長にすぎない。Renumbering により prefix count を維持したまま best path が変わる可能性があるため、candidate set、選択理由、neighbor 別 Adj-RIB-Out を比較する。
ORR は選択視点、ADD-PATH は候補開示を扱う。RFC 3345/7964の oscillation は情報圧縮や MED が繰り返し選択を揺らす問題である。False cluster match は安定した absence を作れる。Transport authentication が証明するのは受信 byte の相手であり、cluster map の正しさではない。
証拠を一つの ledger へ
AS、VRF、AFI/SAFI ごとに BGP Identifier、global/explicit/per-neighbor cluster IDs、client direction、redundancy group、hierarchy level、software release、change owner を保存する。共有値には「どの機器が、なぜ同一 cluster を代表するか」という理由が必要だ。
対象 NLRI には raw UPDATE、ORIGINATOR_ID、ordered CLUSTER_LIST、比較した local values、syntax result、exact disposition を付ける。次に candidate rank、Loc-RIB、neighbor 別 advertised view、downstream Adj-RIB-In、FIB next hop、packet measurement をつなぐ。
Config は意図、UPDATE は観測 state、comparison は権限行使、RIB は control decision、FIB は転送 program、packet は service outcome である。一つの画面で全層を代表させない。
数字より先に graph を試す
Migration 前に directed client/non-client graph と冗長 cluster を宣言する。各 valid source-to-client path を simulation し、目的地より前に自分の originator/cluster identity へ遭遇しないことを確認する。
Canary は全 client class、redundant pair、hierarchy、AFI/SAFI、vendor、release を横断する。Membership だけでなく order を検査し、各反射が既存 sequence の先頭へ期待値を足したか確認する。説明できない共有、session event のない prefix loss、version 間の構築差があれば停止する。
Rollback は config 復元で終わらない。Bounded replay または re-evaluation で downstream RIB を置き換え、候補と packet が戻ったことまで証明する。
情報源
- RFC 4456 — BGP Route Reflection
- RFC 4271 — BGP-4
- RFC 6286 — AS 内で一意な BGP Identifier
- RFC 7606 — UPDATE error handling 改訂
- RFC 9107 — Optimal Route Reflection
- RFC 7911 — 複数 path の広告
- RFC 7964 — Persistent route oscillation の解決
- RFC 3345 — Persistent route oscillation 条件
- FRRouting — BGP
- Juniper — BGP Route Reflectors
- Cisco 8000 — BGP Route Reflectors
- Lu Heng — 最小初期仕様
- Lu Heng — 現実の層と象徴権力
- Lu Heng — Running code の優先
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
