最初に押さえる4つのポイント

最長プレフィックスマッチが最優先
/24は/16より常に優先。BGP属性の比較はその後
AS_PATH Prependingで優先度制御
AS番号を水増しして特定VIFの優先度を下げる
Local Preferenceは「自分側」の制御
オンプレ→AWSの出方向トラフィックを制御
MEDは「相手側」への提案
AWS→オンプレの入方向の優先度をAWSに提案

たとえ話:2本の高速道路とカーナビ

BGPルーティングの仕組みを、「自宅から会社へ通じる2本の高速道路ルートとカーナビ」にたとえて可視化します。

2本の高速道路のたとえで理解するBGPルーティング 🏠 自宅 (オンプレミス) 🏢 会社 (AWS VPC) 高速道路A(VIF 1) 料金所 ×1 🚗 高速道路B(VIF 2) 料金 料金 料金 料金所 ×3(AS_PATH Prepending) 🛰 カーナビ(BGP) 「料金所が少ないルートAを 推奨します」 対応関係 ルートA = VIF 1(Active) ルートB = VIF 2(Standby) カーナビ = BGPプロトコル 料金所 = AS_PATH

図1: 2本の高速道路のたとえ — カーナビ(BGP)が料金所(AS_PATH)の少ないルートを自動選択

たとえ話マッピング:高速道路 ↔ AWS Direct Connect 🚗 高速道路のたとえ ☁ AWS Direct Connect 🏠 自宅 オンプレミスネットワーク 🏢 会社 AWS VPC 🛣 高速道路ルートA / B VIF 1 / VIF 2(仮想インターフェース) 🛰 カーナビ BGPプロトコル 💧 通過する料金所の数 AS_PATH長(短いほど優先) ドライバーの好み設定 Local Preference(高いほど優先) 📍 番地レベルの住所 最長プレフィックスマッチ(/24 > /16)

図2: たとえ話の対応一覧 — 高速道路の各要素がAWS概念にそのまま対応

アーキテクチャ全体像:2つのVIF構成

2つのVIFによるDirect Connect BGP構成 🏠 オンプレミス カスタマールーター AS 65000 DXロケーション VIF 1 Active VIF 2 Standby BGPピアリング×2 ☁ AWS クラウド VGW Virtual Private GW AS 64512 VPC 10.0.0.0/16 Public Subnet Private Subnet 優先 待機

図3: 2つのVIF構成の全体像 — VIF 1がActive、VIF 2がStandby

BGPルート選択:カーナビの判断基準

最重要ルール
最長プレフィックスマッチが全てに優先。BGP属性の比較は、同一プレフィックス長のルート間でのみ行われます。
BGPルート選択 — 優先順位マップ 上にあるほど優先度が高い。同一の場合のみ次のステップへ進む 📍 STEP 0 最長プレフィックスマッチ 最も具体的な宛先が全てに優先(例: /24 は /16 に常に勝つ) たとえ: 「東京都千代田区丸の内1丁目」は「東京都」より詳しいので優先 優先度:最高(絶対) STEP 1 Local Preference(最高値を優先) 自分側のルーターで設定 → 出方向(オンプレ→AWS)を制御 たとえ: ドライバーが「ルートAを使う」と設定 優先度:高 💧 STEP 2 AS_PATH(最短を優先) 通過するAS数が少ないルートを選択。Prependingで操作可能 たとえ: 料金所が少ないルートを自動選択 優先度:中 📩 STEP 3 MED(最低値を優先) 相手ASへの「提案」値。入方向の制御に使用 たとえ: 道路標識の推奨ルート表示 優先度:低 STEP 4+ Origin / eBGP優先 / Router ID 等のタイブレーク ここまで全て同一の場合の最終判定 ✓ ベストパス決定! 同一プレフィックスなら ↓ 同一なら ↓ 同一なら ↓ 同一なら ↓

図4: BGPルート選択の優先順位マップ — STEP 0が絶対優先、以降は段階的に評価

方向別トラフィック制御 — 出方向 vs 入方向

BGPの制御手段は、制御する方向によって使い分けが必要です。

トラフィック方向別の制御手段 ★ 出方向(オンプレ → AWS) 🏠 オンプレミス 🚗 ☁ AWS 制御手段: Local Preference 自分のルーターで確実に制御可能 値が高い = 優先度が高い 📩 入方向(AWS → オンプレ) ☁ AWS 🚗 🏠 オンプレミス 制御手段: AS_PATH Prepending + MED Prependingが最も確実(相手のポリシーに依存しない) MED = 相手への提案。採用されるとは限らない

図5: 出方向はLocal Preference(自分で確実に制御)、入方向はAS_PATH Prepending(最も確実)

2つのVIF構成の運用シナリオ

Active / Standby

普段はルートAのみ。ルートBは障害時の迂回路

  • VIF 2側でAS_PATH Prepending(AS番号を2〜3回繰り返し)
  • Local Preferenceを差別化(VIF1=200, VIF2=100)
  • VIF 1障害時に自動フェイルオーバー
  • コスト最適化に有効

Active / Active

両方のルートを常時使用して負荷分散

  • プレフィックスを分割して広告(/17前半+/17後半)
  • Transit GatewayならECMP対応
  • 帯域幅を最大化
  • 両接続を常に有効活用

Active/Standby — AS_PATH Prependingの仕組み

AS_PATH Prependingで経路長を操作 VIF 1(Active)— AS_PATH長 = 1 AS 65000 AS 64512 ✓ 料金所1つ 🚗 ← こちらが選ばれる! VIF 2(Standby)— AS_PATH長 = 3(Prependingで水増し) AS 65000 AS 64512 AS 64512 AS 64512 ❌ 料金所3つ ↑ この2つがPrependingで追加

図6: AS_PATH Prependingの仕組み — VIF 2のAS番号を水増しして「遠回り」に見せる

Active/Active — プレフィックス分割による負荷分散

Active/Active: プレフィックス分割で負荷分散 🏠 オンプレミス VIF 1 — 前半サブネット担当 10.0.0.0/17 → 50% VIF 2 — 後半サブネット担当 10.0.128.0/17 → 50% ☁ VPC: 10.0.0.0/16 前半: 10.0.0.0/17 後半: 10.0.128.0/17

図7: プレフィックスを/17で分割して2つのVIFに均等分散

設定例:AWS CLI / ルーター設定

VIF作成(AWS CLI)

# VIF 1(プライマリ)
aws directconnect create-private-virtual-interface \
  --connection-id dxcon-abc12345 \
  --new-private-virtual-interface \
    virtualInterfaceName="VIF-Primary",\
    vlan=100,asn=65000,\
    amazonAddress="169.254.100.1/30",\
    customerAddress="169.254.100.2/30",\
    virtualGatewayId="vgw-0123456789abcdef"

# VIF 2(スタンバイ)
aws directconnect create-private-virtual-interface \
  --connection-id dxcon-def67890 \
  --new-private-virtual-interface \
    virtualInterfaceName="VIF-Standby",\
    vlan=200,asn=65000,\
    amazonAddress="169.254.200.1/30",\
    customerAddress="169.254.200.2/30",\
    virtualGatewayId="vgw-0123456789abcdef"
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  PrimaryVIF:
    Type: AWS::DirectConnect::VirtualInterface
    Properties:
      ConnectionId: dxcon-abc12345
      VirtualInterfaceName: VIF-Primary
      Type: private
      Vlan: 100
      Asn: 65000
  StandbyVIF:
    Type: AWS::DirectConnect::VirtualInterface
    Properties:
      ConnectionId: dxcon-def67890
      VirtualInterfaceName: VIF-Standby
      Type: private
      Vlan: 200
      Asn: 65000

AS_PATH Prepending設定(Cisco IOS)

! VIF 1(プライマリ)- 通常設定
router bgp 65000
 neighbor 169.254.100.1 remote-as 64512

! VIF 2(スタンバイ)- AS_PATH Prepending
 neighbor 169.254.200.1 remote-as 64512
 neighbor 169.254.200.1 route-map PREPEND-OUT out

route-map PREPEND-OUT permit 10
 set as-path prepend 65000 65000
# VIF 2(スタンバイ)- AS_PATH Prepending
set protocols bgp group DX-STANDBY
  neighbor 169.254.200.1 peer-as 64512
  neighbor 169.254.200.1 export PREPEND-POLICY

set policy-options policy-statement PREPEND-POLICY
  term prepend then
    as-path-prepend "65000 65000"
    accept

ベストプラクティス vs アンチパターン

ベストプラクティス

  • AS_PATH PrependingでActive/Standbyを明確に制御
  • BFDを有効化して高速フェイルオーバー(サブ秒検知)
  • 異なるDXロケーションに冗長VIFを配置
  • BGPセッション状態を常時モニタリング
  • Active/Active時はプレフィックス分割で負荷分散

アンチパターン

  • 2つのVIFに同一設定でフェイルオーバーを期待(不確定動作)
  • AS_PATH Prependingの回数を過度に増やす(3回程度で十分)
  • MEDだけで入方向を制御(AWS側のLocal Preferenceに上書きされうる)
  • 両VIFを同じ物理接続上に構成(単一障害点)
  • BFD無効のまま運用(フェイルオーバーに最大90秒)

トラブルシューティング

BGPセッションが確立しない
ASN、ピアIP、VLAN ID、MD5パスワードの不一致が原因
✓ VIFステータスが「available」か確認。設定値を照合
フェイルオーバーが遅い
BFD無効時はHold Timer(90秒)で検知に最大90秒
✓ BFDを有効化してサブ秒検知を実現
想定外のVIFにルーティング
AS_PATH長やLocal Preferenceが期待値と異なる
✓ BGPテーブルで各属性値を確認。プレフィックス長も確認
非対称ルーティングが発生
行きと帰りで異なるVIFを通過している
✓ 出方向(LP)と入方向(Prepending)を両方設定

ANS-C01 試験対策

💡 頻出パターン①

「Active/Standbyを実現するには?」→ AS_PATH Prepending。スタンバイ側のAS_PATHを長くする。

💡 頻出パターン②

「/16と/24が同時広告されたらどちらが選択?」→ 常に/24(最長プレフィックスマッチ)。AS_PATHに関係なく。

💡 頻出パターン③

「出方向の制御手段は?」→ Local Preference。「入方向は?」→ AS_PATH Prepending / MED

⚠ ひっかけ①

「AS_PATHが最優先」は誤り。Local Preferenceの方が先に評価。さらにその前に最長プレフィックスマッチ。

⚠ ひっかけ②

MEDは同一隣接ASからのルート間でのみ比較。異なるASからのルートでは比較されない(デフォルト)。

⚠ ひっかけ③

「BFD有効でBGP不要」は誤り。BFDはBGPの障害検知を高速化する補助機能であり代替ではない。

よくある質問(FAQ)

はい可能ですが、物理接続が単一障害点になります。高可用性のためには異なるDirect Connect接続(できれば異なるDXロケーション)に配置を推奨します。
VGWではECMP非対応です。Transit Gatewayを使用すればECMPが利用可能です。VGWでのActive/Activeはプレフィックス分割が必要です。
2〜3回で十分です。過度なPrependingはBGPメッセージを肥大化させ、一部ISPでフィルタリングされる可能性もあります。
BFDなし = 最大90秒、BFDあり = サブ秒(300ms〜1秒)。本番環境ではBFD有効化を強く推奨します。

用語集

VIF(Virtual Interface)
DX上の仮想接続。Private / Public / Transit の3種類
VGW
VPC側のDX接続ポイント。BGPピアの対向
AS_PATH
ルートが通過したAS一覧。短い方が優先
Local Preference
iBGP内の優先度値。高い方が優先。出方向制御用
MED
隣接ASへの入口推奨値。低い方が優先。提案値
BFD
サブ秒で障害検知するプロトコル。BGPフェイルオーバー高速化
ECMP
同一コスト複数経路に分散。Transit Gatewayで対応
AS_PATH Prepending
自AS番号を繰り返し追加して経路優先度を下げるテクニック

Direct Connect BGP チートシート

ルート選択の優先順位

最長プレフィックスマッチ → Local Preference(最大) → AS_PATH(最短) → Origin → MED(最小) → タイブレーク

出方向の制御

Local Preference 使用。VIF1=200(高)、VIF2=100(低)。自分のルーターで完結。

入方向の制御

AS_PATH Prependingが最確実。スタンバイVIFで自AS番号を2〜3回Prepend。

高速フェイルオーバー

BFD必須。BFDなし=最大90秒。BFDあり=サブ秒で検知。

Created by SSuzuki1063

AWS SAP Learning Resources