【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】迂回(バックアップ)ルートが自動破棄される
まず起きるのが、「予備ルートとして期待していた経路がドロップされる」現象です。
発生ステップ
-
迂回ルートの自動広報
VNet A と VNet B はピアリング接続されているため、Gateway A は「自分を通っても VNet B へ行ける」と判断し、迂回ルートをオンプレミス側へ広報します。 -
AS番号の重複(スタック)
この迂回ルートには、Gateway B と Gateway A の双方を通過した証として、Azureの内部AS番号が重複して記録(65515, 65515)されます。 -
オンプレミス側での判定と破棄
オンプレミスルータはこの経路を受信した際、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)
- VNet B 側の Gateway を撤去し、Hub(VNet A)の Gateway 1台に集約する。
- Spoke(VNet B)はピアリングの
Use Remote Gateway(リモートゲートウェイの使用)を有効化して共有する。
この構成にすることで、BGPの重複広報や経路の逆流(循環)が構造的に発生しなくなり、安全でシンプルなネットワークを構築することができます。