こんにちは、SCSKでAWSの内製化支援『テクニカルエスコートサービス』を担当している貝塚です。
AWSの検証をしていて、AWS Transit Gatewayの先にDirect Connect GatewayとAWS Direct Connectがいて、その先にオンプレミスがつながっている構成の検証をしたいこと、ありますよね。
でもAWS Direct Connectが準備できず、AWS Site-to-Site VPNを張りたいけれど検証に使えるオンプレミス上のVPNルータも準備できず、AWS Transit Gatewayに直接つなげたVPCで代用も考えるけれど環境の再現度の問題からVPCで代用は避けたい。そういうこともよくありますよね。(※)
※VPCをTransit Gatewayに直接つなげて疑似オンプレミスとするとサブネットがどのAZにあるかによってTransit Gateway経由通信の挙動に違いが出てしまうのでDirect Connectの代替と見なし難い、など。
そんな時、AWS Site-to-Site VPNでVPC同士つなげればよいのでは?と考えつくわけです。実はAWSのオンラインセミナーにオンプレミスとのVPN接続を行うハンズオンがあり、疑似オンプレミス環境としてVPCを使うようになっています。
https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Network2-2022-reg-event.html?trk=aws_introduction_page
これをそのまま真似ればよいのでは?と思うところですが、疑似オンプレミス環境ではマーケットプレイスのvyosテンプレートを使うようになっており、フリートライアルの後はvyosのライセンス料も発生します。(※)
※素直にvyosのライセンス料払え、という話はありますが…
そこでとにかく簡単に・安価にSite-to-Site VPN環境を構築するということで、二つのVPCをAWS標準のAWS Site-to-Site VPN機能を使って接続してみます。(※)
※本稿は、正確には、Transit GatewayとVPCをAWS Site-to-Site VPNで接続する記事になっています。
なお、私の目指すところが、AWS Transit Gatewayの向こう側にあるVPC以外のネットワークと通信できること、であったため、VPNのパラメータや経路冗長化は考慮しておらず、ただ通信できることだけを目標とした記事構成になっています。
アーキテクチャ図
今回構築する構成は下図の通りです。
Site-to-Site VPN以外は構築済みという前提で進めます。
AWS Transit Gateway側VPN設定
管理コンソールより、「VPC」-「Transit Gatewayアタッチメント」から「Transit Gatewayアタッチメントを作成」をクリックし、以下の通り設定します。
アタッチメントタイプ「VPN」を選択します。
カスタマーゲートウェイは、VPNの相手側のグローバルIPです。現時点では決まっていないため、適当に1.1.1.1としておきます。
ルーティングはスタティックで構成するのでBGP ASNは適当で構いません。ルーティングオプションは静的を選択します。
トンネルのオプションは、指定しなければ自動生成されるので空欄のままとします。
作成後、管理コンソールより、「VPC」-「Site-to-Site VPN接続」に移動、VPN接続一覧に新しくVPN接続が作成されているので、そのVPN IDをクリックし、詳細を表示します。
トンネルの状態を確認し、Tunnel 1の外部IPアドレスと内部IPv4 CIDRをメモしておきます。
「設定をダウンロードする」をクリックし、相手側VPNルータのサンプルコンフィグをダウンロードします。必要なのは事前共有キーだけなので、ベンダー等は何を選んでも構いません。
私は以下のようにしました。
ダウンロードしたテキストファイルを開き、事前共有キーを発見してメモしておきます。
VPC(疑似オンプレミス)側VPN設定
管理コンソールより、「VPC」-「Site-to-Site VPN接続」から「VPN接続を作成する」をクリックし、以下の通り設定します。
ターゲットゲートウェイのタイプは「仮想プライベートゲートウェイ」を選択し、適切な仮想プライベートゲートウェイを選択します。
カスタマーゲートウェイは「新規」、IPアドレスに先ほどメモしたTunnel 1の外部IPアドレスを入力します。
ルーティングはスタティックで構成するのでBGP ASNは適当で構いません。ルーティングオプションは静的を選択します。
ローカル IPv4 ネットワーク CIDRに、Transit Gateway側ネットワークのCIDRを入力します。
トンネル 1 の内部 IPv4 CIDR、トンネル 1 の事前共有キーに先ほどメモした値を入力します。
VPN接続を作成したら、先ほどと同様、作成したVPN接続の詳細を確認し、Tunnel 1の外部IPアドレスをメモしておいてください。
AWS Transit Gateway側VPNの設定変更
続いて、VPC(疑似オンプレミス)側VPNの外部IPアドレス情報を反映するため、Transit Gateway側VPNの設定を変更していきます。
管理コンソールより、「VPC」-「カスタマーゲートウェイ」から「カスタマーゲートウェイを作成」をクリックします。
IPアドレスに疑似オンプレミス側VPC接続の作成時にメモしたTunnel 1の外部IPアドレスを入力し、カスタマーゲートウェイを作成します。
次に、Transit Gateway側VPN接続のカスタマーゲートウェイを今作成したものに置き換えます。管理コンソールより、「VPC」-「Site-to-Site VPN接続」からTransit Gateway側のVPN接続を選択し、「アクション」-「VPN接続を変更」をクリックします。
ターゲットカスタマーゲートウェイに今作成したカスタマーゲートウェイを指定して変更を保存をクリックします。
最後に、AWS Site-to-Site VPNはデフォルトではVPN接続を受け付ける側として動作するようになっており、このままでは接続が開始しないので、一方をVPNを開始する側として設定します。
管理コンソールより、「VPC」-「Site-to-Site VPN接続」からTransit Gateway側のVPN接続を選択し、「アクション」-「VPN トンネルオプションを変更」をクリックします。
VPN トンネル外部 IP アドレスのところでTransit Gateway側VPNのTunnel1側IPアドレスを選択すると、IPSecオプション設定が表示されるので、スタートアップアクションを開始に変更します。
トンネルステータスの確認
以上でトンネルがアップするはずですのでステータスを確認してみます。
Transit Gateway側Site-to-Site接続のトンネルの詳細をチェックし、Tunnel1のステータスがアップになっていればOKです。
経路設定~疎通確認
Transit GatewayおよびVPCサブネットのルートテーブルで、疑似オンプレミスへの経路が適切に設定されていることを確認します。また、疑似オンプレミスサブネットのルートテーブルで、Transit Gateway側への経路が適切に設定されていることを確認します。
以上で設定完了です。疎通確認を行い、疎通出来たら環境構築完了です!
まとめ
オンプレミス想定のネットワークをAWS Transit GatewayやVPCに接続して検証したい、でもVPNルータやAWS Direct Connectを手配するほどでもない、しかしながらVPC Peeringなどで代用するのはオンプレミスの再現として適切か不安がある、というケースはどのくらいあるのでしょうね……私は頻繁にあるのでこのような記事を執筆するに至ったのですが、需要はあまりないのだろうか……と思いつつ、どなたかのお役に立てれば幸いです。