0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Azure×BGP】VNet A/Bの両方にGatewayを置くと何が起きる?AS Pathループ検出による通信全断の罠

0
Posted at

【Azure×BGP】VNet A/Bの両方にGatewayを置くと何が起きる?AS Pathループ検出による通信全断の罠

Azureでネットワーク設計を行っていると、以下のような構成を検討するケースがあります。

「ピアリング接続した VNet A と VNet B の両方に Gateway(ExpressRoute / VPN)を置き、同じオンプレミスネットワークに接続して冗長化したい」

一見するとマルチアクティブ構成で障害に強そうに見えますが、実際の現場では「BGPの伝搬不備で通信できない」「片方のVNetの通信が100%遮断された」というトラブルが多発します。

この原因の多くは、BGPプロトコルの標準機能である「AS Pathループ検出(AS Path Loop Detection)」にあります。

本記事では、この構成で発生する2つの具体的なトラブルパターン(迂回ルートの無効化/本命ルートの誤破棄による全断)のメカニズムを分かりやすく解説します。


1. 基礎知識:AS Pathループ検出とは?

BGP(Border Gateway Protocol)は、経路情報と一緒に「これまで通過してきたAS番号のリスト(AS Path属性)」をやり取りします。

ルータが新しい経路情報を受け取った際、そのリストの中に「自分自身のAS番号」や「すでに通過したAS番号の重複」が含まれていると、「ルーティングループ(無限循環)が発生している!」と判定し、危険を避けるためにその経路を自動破棄(ドロップ)します。

これが AS Path Loop Detection です。

今回は、以下の環境を例にして解説します。

  • オンプレミスルータのAS番号: 65001
  • Azure Gateway A / B のAS番号: 65515 (Azureデフォルト)
  • VNet B のアドレス空間: 10.20.0.0/16
[ VNet A ] (10.10.0.0/16) ── [ Gateway A ] (65515) ──┐
   │ (VNet Peering)                                  │ (ExpressRoute/VPN)
[ VNet B ] (10.20.0.0/16) ── [ Gateway B ] (65515) ──┴── [ オンプレミス ] (65001)


【パターン1】迂回(バックアップ)ルートが自動破棄される

まず起きるのが、「予備ルートとして期待していた経路がドロップされる」現象です。

発生ステップ

  1. 迂回ルートの自動広報
    VNet A と VNet B はピアリング接続されているため、Gateway A は「自分を通っても VNet B へ行ける」と判断し、迂回ルートをオンプレミス側へ広報します。
  2. AS番号の重複(スタック)
    この迂回ルートには、Gateway B と Gateway A の双方を通過した証として、Azureの内部AS番号が重複して記録(65515, 65515)されます。
  3. オンプレミス側での判定と破棄
    オンプレミスルータはこの経路を受信した際、AS番号の重複を見て「ルーティングループの危険がある経路」と判定し、自動的に破棄(ドロップ)します。

影響

Gateway B が障害等でダウンした際、「Gateway A 経由で VNet B へ迂回する」というバックアップ機能が一切動作しなくなります。


【パターン2】本命ルートまでもが誤破棄されて「通信全断」する

さらに恐ろしいのが、タイミングやBGP設定によって「メインの通信ルートそのものがループ判定されて消去され、通信が100%全断する」パターンです。

発生ステップ

  • ステップ1:GW A 経由で経路がオンプレに届く
    回線確立のタイミング等により、Gateway A 経由で VNet B(10.20.0.0/16)の経路がオンプレミスに届きます。

  • 学習経路: 10.20.0.0/16

  • AS Path: [ 65515 ]

  • ステップ2:オンプレミスが GW B へ経路を広報してしまう
    オンプレミスルータは、マルチホーム接続の標準動作として「GW A から学んだ経路」をもう一方の Gateway B へ教えようとします。この際、自身のAS番号(65001)を付与します。

  • GW Bへ送信される経路: 10.20.0.0/16

  • AS Path: [ 65001, 65515 ]

  • ステップ3:GW B がオンプレ経由のルートを採用・再広報する
    Gateway B がこのオンプレ側からの経路を誤って最良経路(ベストパス)として採用すると、自身のAS(65515)を付け直して再びオンプレミスへ送り返して(逆流させて)しまいます。

  • オンプレへ逆流する経路: 10.20.0.0/16

  • AS Path: [ 65515, 65001, 65515 ]

  • ステップ4:オンプレミスルータが自AS番号を発見し、本命ルートを消去
    GW B から届いた経路を見たオンプレミスルータは、通過リストの中に「自分自身のAS番号(65001)」を発見します。

🤖 オンプレミスルータの判定:
「過去に自分が送り出した経路が戻ってきた! これは危険な**循環障害(ループ)**だ!
VNet B(10.20.0.0/16)への経路情報をルーティングテーブルから即座に消去(ドロップ)する!

影響

オンプレミスルータから VNet B への正常な直接ルートまでもが「毒されたルート」として破棄され、オンプレミス ⇄ VNet B 間の通信が100%遮断(全断)します。


2. まとめと推奨構成

今回紹介した2つのトラブルは、ルータやプロトコルのバグではなく、「BGPルータがネットワークの事故を防ぐための防衛機能が正常に働いた結果」発生します。

そのため、ルータ側の設定変更で無理に回避しようとすると、本当のループ事故を防げなくなる運用リスクが残ります。

ベストプラクティス:Hub-Spoke構成への集約

この問題を根本から解決するには、Azureの設計をHub-Spoke(ハブ&スポーク)アーキテクチャへ変更するのが唯一にして最高の解決策です。

               OnPremises
                   |
              ExpressRoute
                   |
                Hub VNet
              ER Gateway
                   |
        +----------+----------+
        |                     |
     Spoke A               Spoke B
 (Use Remote GW)       (Use Remote GW)

  1. VNet B 側の Gateway を撤去し、Hub(VNet A)の Gateway 1台に集約する。
  2. Spoke(VNet B)はピアリングの Use Remote Gateway(リモートゲートウェイの使用) を有効化して共有する。

この構成にすることで、BGPの重複広報や経路の逆流(循環)が構造的に発生しなくなり、安全でシンプルなネットワークを構築することができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?