要約

  • BGP 話者は TCP 179 を待ち受けながら能動接続も行う。双方が同時に開始すると、一つの設定済みピアリングに二つの完全な TCP 接続が生じ、RFC 4271 は一方の終了を求める。
  • BGP Identifier が大きい話者の開始した接続を残す。外部ピアの Identifier が同じ場合、RFC 6286 は AS 番号が大きい側の開始接続を残す。
  • これは決定的な順序付けであって認証ではない。AS 内で一意かつ安定した番号、輸送認証、勝者を事前予測するカナリアが必要である。

保守終了時に A は B へ、B は A へ同時に TCP を開く。各試行が相手の listener に届き、送信元と宛先が反転した二つの四タプル、二つの TCP シーケンス空間、二つの BGP FSM、二つの OPEN が短時間共存する。

これは TCP simultaneous open ではない。交差した SYN が一つの TCP 接続へ収束する場合と違い、既に独立した接続が二つある。BGP はタイマー、OPEN 交渉、更新履歴を合成できず、両方を残せば一つのピアリングに二つの権限ができる。

遅延の競争ではなく共通規則で選ぶ

RFC 4271 は、同じ話者について一方の送信元と宛先が他方の宛先と送信元に一致するとき、接続衝突とする。通常は OPEN が遠端 BGP Identifier を示してから、別々の FSM を同じ衝突集合に結び付ける。

Identifier を四オクテットの符号なし整数として比較し、大きい値の話者が開始した接続だけを残す。ローカル値が小さければ、ローカルは既存 OpenConfirm 接続を閉じ、遠端が開始した新しい接続を受け入れる。そうでなければ新しい方を閉じ、既存を保つ。

「既存」「新規」は各端の局所視点で反転するが、同じ比較により双方は同じ輸送を選ぶ。大きい番号は優れたルータや強い組織を意味しない。パケット到着の偶然に決定権を渡さないための順序鍵である。

RFC 4486 はこの終了に Cease サブコード 7 Connection Collision Resolution を割り当てる。通知は閉鎖理由を説明するが、正しい接続が残った証明ではない。残った四タプルを OPEN、KEEPALIVE、経路交換まで追う必要がある。

並行セッションのすべてが衝突ではない

異なるアドレス対で意図的に複数ピアリングを構成できる。ループバックとインターフェースのセッションは別のポリシー対象かもしれない。遠端 ASN だけで一つにまとめれば冗長性を壊し、エフェメラルポートだけで分ければ一つの衝突を二ピアと誤認する。

台帳はローカルアドレス、遠端アドレス、ルーティングインスタンス、ピアポリシーを一組として記す。active/passive も TCP の一時的役割である。Established 後の BGP 意味は、どちらが 179 番ポートを使ったかで変わらない。

RFC 6286 は識別子を IPv4 から切り離した

RFC 6286 は BGP Identifier を AS 内で一意な非ゼロ四オクテット整数へ改め、有効な IPv4 unicast アドレスである要件を除いた。旧方式で選んだ値も引き続き有効である。

異なる AS では同じ値を合法的に使える。外部衝突で Identifier が等しければ、AS 番号の大きい話者が開始した接続を残す。これは外部ピアだけの補足で、同じ AS 内の重複は一意性違反である。confederation 全体は一つの AS として扱う。

外部同値を安全に使えるのは双方が改訂手順を実装している場合だけだ。相互対応の証明なしに同じ番号を許せば、最も決定性が必要な入力で実装が食い違う。

四オクテットの値は複数の状態に入る

Identifier は衝突だけでなく、集約者の識別、Route Reflection 属性、一部の最終経路比較にも現れる。変更は表示名の変更ではなく、セッション、反射経路の同一性、診断の連続性を動かし得る。

FRRouting は明示的な bgp router-id を提供し、インターフェース情報がないと自動値が無効な 0.0.0.0 になり得ると説明する。BIRD も非ゼロかつ AS 内一意を要求するが、既定選択は異なる。製品名から共通値を推測せず、プロセスと VRF ごとに固定・棚卸しするべきだ。

仮想ルータの clone、交換機、遅れて現れるインターフェースは重複や変化を作る。AS、インスタンス、設定値、OPEN 観測値、割当元、一意性範囲、予定寿命を記録する。

決定的な整理も振動し得る

一度の衝突は正常である。二つの socket が現れ、同じ計算で一つが閉じ、一つが Established になる。すべての Cease を障害と数えれば誤警報になる。

逆に最終 Established だけを見ると反復を隠す。不安定な Identifier、予測勝者を遮断する firewall、異なる設定、listener を再起動する自動化は「二接続―廃棄―勝者失敗―再試行」の輪を作る。各回で経路撤回、CPU、ログ、TCP 状態が増える。

規則が保証するのは、どちらが残るべきかについての一致だけである。認証、firewall、KEEPALIVE、経路ポリシーは保証しない。二 socket と二 OPEN を一事件に束ね、再発、勝者失敗、Identifier drift、経路 churn を監視する。

順序鍵は認証証明書ではない

OPEN 内の Identifier は主張であって暗号学的身元ではない。RFC 4272 は、正しい時機に必要な TCP/BGP 手順を完了し、勝つ Identifier を選べる第三者が合法接続を廃棄させ得る限定的攻撃を説明する。任意の OPEN だけでは足りず、TCP シーケンス、時機、ピア許可、認証が障壁になる。

RFC 2385 の TCP MD5 と RFC 5925 の TCP-AO は設定鍵の下で輸送 segment を守る。UPDATE ポリシーを検証せず、合法ピアの重複設定も防がない。鍵の対象アドレス、保管者、rotation、重複期間、失敗警報を Identifier 変更と共に統制する。

カナリアは観測前に勝者を答える

最初に一つのピアリング境界、アドレス、AS、Identifier、鍵を確定し、別アドレス対が意図的セッションでないことを確認する。低影響環境で双方を同時開始させ、SYN、四タプル、OPEN、FSM を捕捉する。

結果を見る前に Identifier、または対応済み外部同値なら AS で勝者を計算する。Cease 7、socket 閉鎖、FSM 破棄、retry を記録し、予測接続が Established へ進むことを示す。

その後、期待する import/export 経路、重複や異常撤回の不在、FIB、必要なら packet を検証する。rollback は既知の一意値、鍵、一つの文書化アドレス対へ戻すことであり、clear の反復ではない。