AWS Transit GatewayでAWSから複数のVIFへのルーティングを制御する

Transit Gatewayこそ至高
2023.05.01

複数のVIFからアドバタイズされるルートが0.0.0.0/0で困るな

こんにちは、のんピ(@non____97)です。

皆さんは複数のVIFからアドバタイズされるルートが0.0.0.0/0で困るなとなったことはありますか? 私はあります。

Direct Connectを介してオンプレミスからAWSへ受け取れるルートの数は100個までです。

Routes per Border Gateway Protocol (BGP) session on a private virtual interface or transit virtual interface : 100 each for IPv4 and IPv6

AWS Direct Connect quotas - AWS Direct Connect

100以上の経路となる場合は経路集約をして対応をします。しかし、Direct Connectのデリバリーパートナーが提供しているサービスの仕様によっては任意のプレフィックスで集約ができず、0.0.0.0/0でしか集約できない場合があります。

このように0.0.0.0/0でアドバタイズしてくるVIFが複数あると、VGWやDirect Connect Gatewayはどちらにルーティングするのか判断が付きません。

デフォルトルートをアドバタイズするVIFが複数ある場合の構成

そんな時はTransit Gatewayの出番です。

どういう構成を取る必要があるのか以降紹介します。

いきなりまとめ

  • 「アドバタイズされたルートとのロンゲストマッチ」以外、AWS側でオンプレミス間とのルーティングを制御する術がない
  • VIF毎にDirect Connect Gatewayを分離して、Transit Gatewayに接続することで対応が可能

Direct Connectのルーティングポリシー

本題に入る前にDirect Connectのルーティングポリシーをおさらいします。

「オンプレミスネットワーク から AWS への経路」と「AWS から オンプレミスネットワーク への経路」のルーティングは以下の順で決定します。

  • オンプレミスネットワーク から AWS への経路
    1. アドバタイズされたルートとのロンゲストマッチとなるパス
    2. Local Preferenceが最も大きいパス
    3. AS_PATHが最短であるパス
  • AWS から オンプレミスネットワーク への経路
    1. アドバタイズされたルートとのロンゲストマッチとなるパス
    2. BGPコミュニティタグの優先度が高いパス
    3. 発信元のリージョンまでの AWS Direct Connect ロケーションの相対距離が短いパス
    4. AS_PATHが最短であるパス (Direct Connect接続とVPCのリージョンが異なる場合はAS_PATHプリペンドは使用不可)
    5. MEDの値が小さいパス (MEDで優先制御可能ではあるが、Direct Connectで正式サポートされてはいないため非推奨)

参考

ここで重要なのが、いずれのパターンも「アドバタイズされたルートとのロンゲストマッチ」以外はAWS側でコントロールする術がないという点です。

そのため、一度VGWもしくはDirect Connect Gatewayにルーティングされると、上述のポリシーに従ってルーティングされます。

そんな時こそTransit Gateway

Transit Gatewayを使う理由

AWS側からは、VGWもしくはDirect Connect Gatewayに関連付けしているどのVIFにルーティングするかを制御できないことを確認しました。

そもそも、どちらのVIFも0.0.0.0/0をアドバタイズしてきた場合、BGPコミュニティタグやAS_PATHプリペンドを使用したとしても、0.0.0.0/0に対するActive/Standbyとなり、どちらかのVIFは普段使われないことになります。そうすると、Standby側のVIFに接続している拠点へ通信する際は、Active側のVIFを通るという遠回りな経路になってしまいます。

BGPコミュニティタグで制御する場合

このような場合は、VIF毎にDirect Connect Gatewayを分離して、片方もしくは両方のDirect Connect GatewayをTransit Gatewayに関連付けを行い、Transit Gateway route tableでDirect Connect Gatewayに静的ルートを定義することで対応が可能です。

Direct Connect Gatewayを分離した場合

Direct Connect Gateway内のルーティングは制御できないので、前段にTransit Gatewayを挟んでコントロールしようという発想です。

ちなみに2023/5/1時点でTransit Gatewayに関連付けできるDirect Connect Gatewayの数は20個です。

Number of Direct Connect gateways associated to a transit gateway : 20

AWS Direct Connect quotas - AWS Direct Connect

よっぽどのことがない限りDirect Connect Gatewayを1つのTransit Gatewayに20個アタッチすることはないと思いますが、気に留めておきましょう。

注意点 1. Propagationを有効活用できない問題

この構成を取る場合の注意点がいくつかあります。

まず一つ目がDirect Connect GatewayのTransit Gateway attachmentからPropagationを有効活用することができない点です。

どちらのDirect Connect GatewayでもPropagationを有効化すると、今回のケースは0.0.0.0/0が重複してしまいます。

Propagationを有効化した場合

そのため、Propagationを有効活用することができません。

Propagationではなく静的ルートを設定してあげるとなると、「Direct Connect Gatewayにルーティングしたいプレフィックスが複数ある」 × 「Transit Gateway route tableが複数ある」場合に大変です。

そのような場面は、Direct Connect GatewayにルーティングしたいCIDRをまとめたプレフィックスリストを作成し、Transit Gateway route tableにてプレフィックスリストのリファレンスを作成することで楽ができます。

試しにやってみます。

10.0.0.0/24192.168.1.0/24172.31.2.0/24のマネージドプレフィックスリストを用意します。

プレフィックスリスト

Transit Gateway route tableを選択してプレフィックスリストのリファレンスタブからリファレンスを作成をクリックし、用意したプレフィックスリストとルーティング先のTransit Gateway attachment IDを選択します。

プレフィックスリストのリファレンスを作成

プレフィックスリストのリファレンスを作成をクリックすると、プレフィックスリストのリファレンス一覧に追加されます。

プレフィックスリストのリファレンスの確認

ルートタブからルート一覧を確認すると、プレフィックスリストのリファレンスに追加したCIDRとTransit Gateway attachmentのルートが登録されていることが分かります。

Transit Gateway route tableのルートの確認

Transit Gateway あたりの静的ルートの数はデフォルトで10,000で、調整も可能なので、こちらの方法で問題ないかと考えます。

Transit Gateway あたりの静的ルート : 10,000

Transit Gateway のクォータ - Amazon VPC

注意点 2. Transit VIFが必要

そもそもですが、Transit GatewayとDirect Connect Gatewayを接続するためにはTransit VIFを用意する必要があります。

Q: AWS Transit Gateway にプライベート仮想インターフェイスをアタッチできますか?

いいえ、AWS Transit Gateway にプライベート仮想インターフェイスをアタッチすることはできません。

よくある質問 - AWS Direct Connect | AWS

Direct ConnectのデリバリーパートナーがTransit VIFを提供しているか確認しておきましょう。

注意点 3. 切り替え時のダウンタイム

Private VIFからTransit VIFへの切り替え作業はLocal PreferenceやAS_PATHを設定変更できない場合、切り替え時にダウンタイムが発生します。

Direct Connect GatewayとVPCの直結構成から、Direct Connect GatewayとTransit Gatewayの併用構成に変更する場合は以下記事が参考になります。

こちらの記事ではLocal Preferenceで優先パスを指定することができないシナリオを紹介しています。

Transit Gatewayこそ至高

VIFが複数ある場合にAWS側からルーティングを制御したいときはTransit Gatewayを使うことで対応できることを紹介しました。

Direct Connectのルーティングポリシーは普段なかなか意識しないので振り返ることができて良かったです。

AWS公式ブログに実際にLocal PreferenceやAS_PATHプリペンドを設定してルーティングを制御する記事がありました。併せてご覧いただくと、より理解が深まると思います。

やはり、柔軟性が神っているTransit Gatewayこそ至高ですな。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!