🛜

[AWS ANS対策]2つの Direct Connect ロケーションと 4つの Direct Connect 接続を使った構成

に公開

こんにちは、Hayatoです
現在 AWS Certified Advanced Networking – Specialty(ANS)の勉強中です。
勉強している中で最も難しいと感じているBGPの部分について理解を深めるために、今回はAWSの公式が発表しているAWS Direct Connect のトラフィックコントロールと大阪リージョンとの接続という記事を自分なりに噛み砕きながら説明していこうと思います。

前提

今回前提となる構成は以下の図になります。

  • Telehouse OSAKA2 (OSAKA2)
    2024年12月13日に開設された、大阪リージョンに属する初のAWS Direct Connect ロケーション

  • Equinix OS1 (OS1)
    関西地域のDirect Connect ロケーションであるものの、所属は東京リージョン

  • この構成の強み
    OS1 とOSAKA2 の2つのDirect Connect ロケーションと、4つのDirect Connect 接続を組み合わせて、データセンターレベルの障害にも対応できる可用性を実現できるところ

シナリオ1 アクティブ/スタンバイ構成

複数のDirect Connectを活用して可用性を高めるには、きめ細かいトラフィックコントロールが必要になります。
ここでは、理解しやすいよう4つのDirect Connect 接続にそれぞれ優先度を設定し、アクティブの接続が切断された場合、優先度順にフェイルオーバーを行うことを要件とします。

この図において、AWSのBGPルーターがカスタマールーターから受信した経路情報はDirect Connect GatewayやTransit Gatewayに経路情報として反映されます。
4つの回線のうち、どの回線がベストパスとして採用されるかについては、受信した経路情報のBGPアトリビュート(AS_PATHやローカルプリファレンス、MEDなど)に依存します。

注意点ですが、Direct Connect では、AWS ルーターのBGPアトリビュート値を明示的に設定をすることはできないため、カスタマールーターでBGPアトリビュートを設定する形になります。

シナリオ1-1 AWSからオンプレミスネットワークに向かうトラフィックのコントロール

では、具体的にどのようにアトリビュートを設定すべきか考える上で、BGPのベストパス選択アルゴリズムを振り返りましょう。
優先順位としては以下になります。

  1. ローカルプリファレンス
    • 値が大きい方が優先
    • AWSルーターで制御
    • カスタマールーターでBGP Communityタグを使って間接的に制御可能
  2. AS_PATH
    • 経路が短い方が優先
    • カスタマールーターでPrependを行うことで制御可能
  3. MED
    • 値が小さい方が優先
    • カスタマールーターで制御
    • 積極的な活用は推奨されていません

    プレフィックスの長さ、ローカル設定、AS_PATH が同じ場合、Multi-Exit Discriminator (MED) を使用してルーティングパスを決定できます。評価の優先度が低いため、MED 値を使用することはAWS では推奨されていません。
    参考ドキュメント

最もシンプルな方法は、カスタマールーターでAWSへ広告する経路にAS_PATH Prepend を使って優先度を操作することです。
AWS側で暗黙的に設定されているローカルプリファレンス値が全て同じであると仮定して、AS_PATH長が最も短い経路をベストパスとして決定させます。

この図のような方法は多くのケースで採用されてきたようです。

ただし、今回の構成ではこのままでは上手くベストパスは選択されません。
これは、OS1が東京リージョン、OSAKA2が大阪リージョンに属することに起因しています。
Direct ConnectではAWSからオンプレミスへのパスを最適化するため、ローカルプレファレンス値が暗黙的に設定されるのですが、
大阪リージョンから発信された通信は大阪リージョンに属するOSAKA2を優先するようにローカルプレファレンス値が設定されます。
つまり、先ほど記載したベストパス選択アルゴリズムではAS_PATHよりもローカルプレファレンス値が先に評価されるため、優先度3の経路がベストパスに採用されてしまいます。。。

では、OS1を優先したい場合はどうすればいいのかというと、BGP Community タグを使い、暗黙的に設定されるローカルプリファレンス値を上書きします。
カスタマールーターから受信した経路に、BGP Community アトリビュートの指定されたタグが設定されていると、AWS は以下のような優先順になるようローカルプリファレンスの値を上書きします。詳しくはこちら

  • 7224:7100 : 優先設定: 低
  • 7224:7200 : 優先設定: 中
  • 7224:7300 : 優先設定: 高

今回は4つの経路があるため、BGP Community タグとAS_PATH Prepend を組み合わせることで、意図した制御を行うことができます。
上の図ではBGP Community タグを使ってローカルプリファレンス値を調整し、全ての経路の優先度を揃えて、AS_PATH による評価で優先度1の接続をベストパスとして選択させるようにしています。

このように、Community タグと AS PATH Prepend によってAWS からオンプレミスネットワークへのベストパスをコントロールできます。
優先度1のBGPピアが切断された場合、優先度2にフェールオーバーし、
優先2が切断されたら優先度3に・・という形で、順にフェールオーバーさせることができます。

シナリオ1-2 オンプレミスネットワークからAWSに向かうトラフィックのコントロール

続いて、オンプレミスネットワークからAWS に向かうトラフィックのコントロールについてです。優先度の要件は、前述の逆向きの通信と同様とします。

Direct Connect では、カスタマールーターに対して広告する経路のBGP アトリビュートをカスタマイズすることはできません。
また、特別な設定があらかじめ行われていることもありません※1
したがって、AWS からの経路を受信するオンプレミスネットワークで自由にトラフィックコントロールを行うことができます。

下の図ではAWSから受け取った経路をWANサービスに伝搬する様子を表現しています。

※1
Public VIFについては、AWS が広告する経路にリージョン制御のための以下のようなCommunity タグがサポートされています。

  • 7224:8100 Direct Connect ロケーションと同じリージョンからの経路
  • 7224:8200 Direct Connect ロケーションと同じ大陸で別リージョンからの経路
  • タグなし Direct Connect ロケーションと別の大陸からの経路
    参考ドキュメント

シナリオ2 ロードバランス(ECMP)構成

Direct Connect は、Equal Cost Multi Path(ECMP) に対応しています。
ECMPとは、複数の経路が同じ優先度で存在する場合にトラフィックをその複数の経路に分散するルーティング手法です。
本シナリオは、すべてのDirect Connect 接続を等コストに設定し、トラフィックをロードバランスすることによって、突発的なトラフィック増に備えることを想定します。

上の図では全てを同じ優先度1としています。
なお、例としてOS1 の二つの接続を優先度1、OSAKA2の二つの接続を優先度2として、最大帯域を 2Gbps としてロードバランスさせることもできます。
要件により、さまざまな設計が可能です。

Direct Connect 接続が全て1Gbpsだった場合、シナリオ1では最大帯域幅は1Gbpsですが、ECMPを利用するとすべての回線を有効活用して最大4Gbpsまで対応することができます。
ただし、以下の理由から通常4Gbpsのトラフィックを利用することは推奨されません

  • ECMP によるロードバランスは各接続の最大帯域を考慮しない
  • ECMP によるロードバランスはネットワーク機器に実装により、ある程度の偏りが生じることが想定される
  • 障害やメンテナンス時に最大帯域が減少し、重要なトラフィックが欠損する可能性がある

そのため、突発的に 1Gbps を超えるトラフィックが発生する場合に備えた構成、として考えるのが現実的です。

また、ECMP構成では、送受信で異なる経路を通る可能性があります(非対称ルーティング)。
このような構成においては、以下のような機器や構成との相性に注意が必要です。

  • ステートフルファイアウォール
  • セキュリティ機器(IPS/IDS)
  • トラフィックフィルタリング製品

これらが双方向トラフィックを同一経路で監視・処理することを前提としている場合、非対称なパスによって通信が遮断されたり誤検知されるリスクがあります。

シナリオ2-1 AWSからオンプレミスネットワークに向かうトラフィックのコントロール

この例では、Community タグによってAWS が暗黙に設定するローカルプリファレンス値を上書きし、すべて優先設定:中にすることによって等コストに設定しています。
これにより、AWS からオンプレミスネットワークに向かうすべてのトラフィックは4つの接続にロードバランスされます。
シナリオ1で利用したAS_PATH Prepend を利用する必要はありません。

シナリオ2-2 オンプレミスネットワークからAWSに向かうトラフィックのコントロール

今回はWAN サービスを利用していることを想定しているため、利用しているサービスがECMP に対応していれば、特に優先度をつけずにWAN サービスにAWS からの経路を伝搬させることでECMP を実現できます。

まとめ

いかがでしたでしょうか。
この構成の考え方は、AWS ANS 試験だけでなく、実際のネットワーク設計や障害対策にも応用可能です。ぜひ皆さんの設計に活かしてみてください。
異なるDirect Connect ロケーションを利用したトラフィックについて理解する上でのポイントを再度下記にまとめてみました。
参考になれば幸いです。

  • Direct Connect では、AWS ルーターのBGPアトリビュート値を明示的に設定をすることはできないため、カスタマールーターでBGPアトリビュートを設定する
  • ベストパスとして採用される優先順位は高いものからローカルプリファレンス、AS_PATH、MEDとなる
  • ローカルプリファレンスは値が大きいほど、AS_PATH は経路が短いほど優先される
  • ローカルプリファレンスはAWS側で設定されているが、BGP Community タグを用いることでカスタマールーター側から間接的に制御可能
  • 構築しているAWSリソースとDirect Connect ロケーションが同じリージョンの場合は暗黙的に同じローカルプリファレンスが設定されているため特別な考慮は不要。
  • 異なるリージョンの場合はAWSが自動的に異なるローカルプリファレンスを設定するため、意図しない経路選択が行われる可能性がある
    • そのため、意図通りの経路制御を行うには、カスタマールーターで BGP Community タグを設定し、ローカルプリファレンスを上書きすることが重要になる
  • ECMPを利用することで優先度が同じ経路にトラフィックを分散することができる
     ただし、非対称ルーティングのリスクや障害時の帯域減少に注意が必要
GitHubで編集を提案

Discussion