Transit GatewayとDirect Connect Gatewayを使ってオンプレミス と AWS 間を接続する方法

記事タイトルとURLをコピーする

こんにちは!イーゴリです。

Transit GatewayとDirect Connect Gatewayを使ってオンプレミス と AWS 間を接続する方法をご紹介したいと思います。

f:id:swx-korotkov:20220228154435p:plain

構成図

f:id:swx-korotkov:20220228161745p:plain

Direct Connect Gatewayの作成

f:id:swx-korotkov:20220301190203p:plain

[Direct Connect ゲートウェイの設定]の画面で、下記の設定を行った後、[Direct Connect ゲートウェイを作成する]をクリックします。

f:id:swx-korotkov:20220224123204p:plain

  • 名前:<適切な名前>(私の場合、「prod-dxgw」)
  • Amazon 側の ASN:私の場合、「64512」を入力します。

f:id:swx-korotkov:20220224123401p:plain

Transit VIFの作業

f:id:swx-korotkov:20220301190038p:plain

Transit VIFの用意

プライベート仮想インターフェイス(Private VIF)だとDirect Connect GatewayとTransit Gatewayの併用構成をすることはできないため、事前にトランジット仮想インターフェイス(Transit VIF)を用意する必要がありますので、選んだAWS Direct Connectを提供しているデリバリーパートナーにお問い合わせください。

Transit VIFの承諾

デリバリーパートナー側でトランジット仮想インターフェイス(Transit VIF)を用意するので、AWSコンソール上([Direct Connect]>[仮想インターフェイス])で、用意された対象の仮想インターフェイスをクリックします。

f:id:swx-korotkov:20220224121950p:plain

「仮想インターフェイスのタイプ」が「transit」であることを確認し、[承諾する]をクリックします。

f:id:swx-korotkov:20220224122356p:plain

[仮想インターフェイスを承諾する]の画面で、Transit VIFと関連付けたいDirect Connect Gateway を選択して、 仮想インターフェイスを[承諾する]をクリックします。

「状態」が「Available」になっていることと「BGPステータス」が「up」になっていることを確認します。

下記の①②③が想定通りになったか、確認します。

  1. Transit VIFの状態が「pending」から「down」に変更されて、最終的に「Available」となっている
  2. BGPのステータスが「Available」となっている
  3. 「Amazon側のASN」は承諾する前の状態のASNからDirect Connect GatewayのASNに切り替わっている

f:id:swx-korotkov:20220228162857p:plain

待機時間:15分程度

Transit Gatewayの作成

f:id:swx-korotkov:20220301185325p:plain

[Direct Connect]>[トランジットゲートウェイ]>[トランジットゲートウェイを作成する]をクリックします。

f:id:swx-korotkov:20220228163318p:plain

[Transit Gateway を作成]の画面で、下記の設定を行った後、[Transit Gateway を作成]をクリックします。

  • 名前タグ:任意ですが、「prod-tgw」を入力します。
  • Amazon 側の自律システム番号 (ASN):64513 (※)
  • DNS サポート情報:✅
  • VPN ECMP サポート:✅

自分でルートテーブルの関連付け及びルートテーブル伝播をコントロールしたいため、下記項目からチェックを外します。

  • デフォルトルートテーブルの関連付け:◻
  • デフォルトルートテーブル伝播情報:◻

「マルチキャストサポート情報」の箇所で、デフォルトのまま◻を残します。

  • マルチキャストサポート情報:◻

f:id:swx-korotkov:20220228163537p:plain

f:id:swx-korotkov:20220228163711p:plain

※作成したDirect Connect Gatewayと重複しないように「64513」を入力します。

ASNの重複については下記の記事をご参考ください。

blog.serverworks.co.jp

Transit Gatewayの「状態」が「Available」となったことを確認します。

f:id:swx-korotkov:20220228164523p:plain

Direct Connect GatewayとTransit Gatewayの関連付け

f:id:swx-korotkov:20220301185230p:plain

[Direct Connect]>[Direct Connect ゲートウェイ]>対象のDirect Connect Gatewayをクリックし、[ゲートウェイの関連付け]タブの[ゲートウェイを関連付ける]をクリックします。

[ゲートウェイを関連付ける]の画面で、下記の通り設定し、[ゲートウェイを関連付ける]をクリックします。

  • ゲートウェイ:[対象トランジットゲートウェイ] (私の場合、「prod-twg」)
  • 許可されたプレフィックス:172.16.0.0/16(AWS側のCIDRを指定)

f:id:swx-korotkov:20220228164402p:plain

上記の設定を行ったら、Direct Connect Gateway用のアタッチメントが作成されますが、そのTransit Gateway Attachmentのタグ名がないため、運用の時に分かりやすくするために、タグ名を付けましょう!

[VPC]>[Transit Gateway接続]>対象のTransit Gateway Attachmentのタグとして「prod-tgw-attach-dxgw」を付けます。

f:id:swx-korotkov:20220228165113p:plain

Transit Gateway Attachment用のサブネットの用意

f:id:swx-korotkov:20220301184723p:plain

事前にTransit Gateway Attachment用のサブネットを用意しましたが、Transit Gateway Attachment用のサブネットがない場合、作成することをAWSは推奨しています。

理由は下記となります。

質問: VPC をアタッチするときに指定するサブネットをアタッチ専用のサブネットとする必要性について、もう少し具体例を挙げて説明していただきたいです。そのサブネットの内部のEC2 インスタンスのルーティングに影響あるとのことでしたが、どのような影響があるのか?などを教えていただきたいです。

回答: Transit Gateway (TGW) のアタッチメントがついているサブネットと同一のサブネットに EC2 インスタンスが存在する場合に、その EC2 インスタンスはTGWと同じルーティングテーブルを参照します。 例えば インライン監査用の VPC の TGW の ENI がある Subnet 上に EC2 インスタンスを設置してしまうと、その EC2 インスタンスは必ずインライン監査のミドルボックス ENI に吸い込まれてしまい、EC2 インスタンスの意図するルーティングテーブルを作れなくなってしまいます。こういったことを防ぐために、TGW 専用のサブネットを作ることをお薦めしています。 こちらおよびこちらの資料を併せてご参照ください。

aws.amazon.com

サブネットのマスクは短くても問題ないため、短いプライベートサブネット(CIDR: 172.16.0.0/27)を事前に作成しました。

172.16.0.0/24のCIDRをTransit Gateway Attachment用のサブネットの予備として用意したため、2つ目のTransit Gateway Attachment用のサブネットが必要になる場合、また172.16.0.0/24から余ったCIDRを取ります。

例:

# Transit Gateway Attachment用のサブネットのCIDR 使用状態
1 172.16.0.0/27 今回利用するサブネット
2 172.16.0.32/27 予備(未作成)
3 172.16.0.64/27 予備(未作成)
4 172.16.0.96/27 予備(未作成)
5 172.16.0.128/27 予備(未作成)
6 172.16.0.160/27 予備(未作成)
7 172.16.0.192/27 予備(未作成)
8 172.16.0.224/27 予備(未作成)

Transit Gateway Attachment用の作成 (VPC側)

f:id:swx-korotkov:20220301184548p:plain

[VPC]>[Transit Gateway 接続]>[Transit Gateway アタッチメントを作成]をクリックします。

f:id:swx-korotkov:20220228170258p:plain

[Transit Gateway アタッチメントを作成]の画面で下記の設定を行った後、[Transit Gateway アタッチメントを作成]をクリックします。

詳細

  • 名前タグ - オプション:prod-tgw-attach-vpc
  • Transit Gateway ID:prod-tgw
  • アタッチメントタイプ:VPC

f:id:swx-korotkov:20220228170457p:plain

VPC アタッチメント

  • DNS サポート情報:✅
  • IPv6 サポート:◻ チェックなし
  • VPC ID:prod-vpc-tgw

  • ap-northeast-1a ✅ | サブネット ID:prod-subnet-tgw-private-1a

f:id:swx-korotkov:20220228170835p:plain

Resource typeがVPCのTransit Gateway Attachmentとして作成されていることを確認します。 状態が「Pending」→「Available」になったことを確認します(3分程度待機)。

f:id:swx-korotkov:20220228171412p:plain

Transit Gateway Route Tableの作成

f:id:swx-korotkov:20220301184119p:plain

VPC用Transit Gateway Route Tableの作成

[VPC]>[Transit Gateway ルートテーブル]>[Transit Gateway ルートテーブルを作成]をクリックします。

f:id:swx-korotkov:20220228172213p:plain

[Transit Gateway ルートテーブルを作成]の画面で、下記の設定を行った後、[Transit Gateway ルートテーブルを作成]をクリックします。

  • 名前タグ - オプション:任意ですが、私の場合、「prod-tgw-rtb-vpc」を入力します。
  • Transit Gateway ID:prod-tgw(前回作成したトランジットゲートウェイ)

f:id:swx-korotkov:20220228172401p:plain

上記が完了しましたら、下記の静的か動的のいずれかの方法でルートを作成します。

方法①:静的のルーティングの作成

VPC用のルートテーブル(prod-tgw-rtb-vpc)の[ルート]のタブをクリックします。

f:id:swx-korotkov:20220228172954p:plain

[静的ルートを作成]をクリックします。

f:id:swx-korotkov:20220228173025p:plain

[静的ルートを作成]の画面で、下記の設定を行った後、[静的ルートを作成]をクリックします。

  • CIDR:<オンプレミス環境のCIDRを入力>(私の場合、「10.0.0.0/16」)
  • タイプ:アクティブ
  • アタッチメントを選択:DXGWのアタッチメントを指定 (私の場合、「prod-tgw-attach-dxgw」)

f:id:swx-korotkov:20220228173422p:plain

ルート一覧で、対象のルートが追加されたことを確認します。

f:id:swx-korotkov:20220228173600p:plain

方法②:動的のルーティングの作成(伝播設定)

prod-tgw-rtb-vpcの[伝播]のタブをクリックし、[伝達を作成]をクリックします。

f:id:swx-korotkov:20220228173925p:plain

[伝達を作成]の画面で、伝達するアタッチメントとしてDXGWのアタッチメントを指定し(prod-tgw-attach-dxgw)、[伝達を作成]をクリックします。

f:id:swx-korotkov:20220228174124p:plain

VPC用のルートテーブル(prod-tgw-rtb-vpc)の[ルート]のタブでルートタイプが「伝達済み」と記載されていることを確認します。

f:id:swx-korotkov:20220228184806p:plain

Direct Connect Gateway用Transit Gateway Route Tableの作成

[VPC]>[Transit Gateway ルートテーブル]>[Transit Gateway ルートテーブルを作成]をクリックします。

f:id:swx-korotkov:20220228172213p:plain

[Transit Gateway ルートテーブルを作成]の画面で、下記の設定を行った後、[Transit Gateway ルートテーブルを作成]をクリックします。

  • 名前タグ - オプション:任意ですが、私の場合、「prod-tgw-rtb-dxgw」を入力します。
  • Transit Gateway ID:prod-tgw(前回作成したトランジットゲートウェイ)

f:id:swx-korotkov:20220228174513p:plain

上記が完了しましたら、下記の静的か動的のいずれかの方法でルートを作成します。

方法①:静的のルーティングの作成

VPC用のルートテーブル(prod-tgw-rtb-dxgw)の[ルート]のタブをクリックします。

f:id:swx-korotkov:20220228182826p:plain

[静的ルートを作成]をクリックします。

f:id:swx-korotkov:20220228183142p:plain

[静的ルートを作成]の画面で、下記の設定を行った後、[静的ルートを作成]をクリックします。

  • CIDR:<AWS側のVPCのCIDRを入力>(私の場合、「172.16.0.0/16」)
  • タイプ:アクティブ
  • アタッチメントを選択:prod-tgw-attach-vpc (VPCのアタッチメントを指定)

f:id:swx-korotkov:20220228183427p:plain

ルート一覧で、対象のルートが追加されたことを確認します。

f:id:swx-korotkov:20220228183629p:plain

方法②:動的のルーティングの作成(伝播設定)

prod-tgw-rtb-dxgwの[伝播]のタブをクリックし、[伝達を作成]をクリックします。

f:id:swx-korotkov:20220228183810p:plain

[伝達を作成]の画面で、VPCのアタッチメントを指定し(prod-tgw-attach-vpc)、[伝達を作成]をクリックします。

f:id:swx-korotkov:20220228184133p:plain 

VPC用のルートテーブル(prod-tgw-rtb-vpc)の[ルート]のタブでルートタイプが「伝達済み」と記載されていることを確認します。

f:id:swx-korotkov:20220228184922p:plain

Transit GatewayのルートテーブルとTransit Gateway Attachmentの関連付け

f:id:swx-korotkov:20220301184053p:plain

VPC用のTransit GatewayのルートテーブルとTransit Gateway Attachmentの関連付

[VPC]>[Transit Gateway ルートテーブル]>[prod-tgw-rtb-vpc]>[関連付け]>[関連付けを作成]をクリックします。 f:id:swx-korotkov:20220228185512p:plain

[関連付けを作成]の画面で、VPC用のTransit Gateway Attachment(prod-tgw-attach-vpc (VPCのアタッチメント))を選択し、[関連付けを作成]をクリックします。

f:id:swx-korotkov:20220228185925p:plain

Direct Connect Gateway用のTransit GatewayのルートテーブルとTransit Gateway Attachmentの関連付け

[VPC]>[Transit Gateway ルートテーブル]>[prod-tgw-rtb-dxgw]>[関連付け]>[関連付けを作成]をクリックします。

f:id:swx-korotkov:20220228185253p:plain

[関連付けを作成]の画面で、DXGW用のTransit Gateway Attachment(prod-tgw-attach-dxgw(DXGW))を選択し、[関連付けを作成]をクリックします。

f:id:swx-korotkov:20220228190026p:plain

サブネットのルート変更

f:id:swx-korotkov:20220301165216p:plain

[VPC]>[ルートテーブル]>[prod-rtb-private-1a](関連サブネット:prod-subnet-private-1a)>[ルート]>[ルートを編集]をクリックします。

f:id:swx-korotkov:20220228190413p:plain

下記のルートの追加後、[変更を保存]をクリックします。

送信先 ターゲット 備考
10.0.0.0/16 VPCのアタッチメント   私の場合、「prod-tgw-attach-vpc」

f:id:swx-korotkov:20220228190649p:plain

以上、御一読ありがとうございました。

イーゴリ (記事一覧)

クラウドインテグレーション部・技術4課・エンジニア

特にTerraform(自動化)、ネットワーク系、VDI、Windows Serverに興味があります

日本国内旅行・ドライブが好きです