#はじめに
この記事は「Oracle Cloud Infrastructure(その2) Advent Calendar 2020」の12月25日の記事の追加情報としての投稿になります。
あけましておめでとうございます!
今年もよろしくお願いいたします。
年も明けたので、昨年の Advent Calendar で「静的ルーティングならできたよ」という話で締めてしまいましたけど、実のところ、どちらでも構築できました
新しい気持ちで取り組んだら構築できる。これぞ 謹賀新年パワー!です。
と、冗談はこの辺にしておいて、なぜできなかったのか。という点は最後の方に記載しますけど、ここでは実際どうやって設定したらいいの?というのを、改めて、まとめておきます。
こちらで Qiita 始めにします
※使っている画像や内容は一部、過去の記事(オレのブログを安く運用したい。(aws から Oracle Cloud へ移行(最終回))※IPSec VPN で AWS と OCI をつないでマルチクラウド化しようよ)から引っ張ってきてたりします。そのため、一部IDとかは異なったりしますが構築方法には問題ないので、記事作成簡潔化を優先してしまいましたその点を理解して、参考にしてください
#用意するもの(2021/1/8現在)
- OCI(Oracle Cloud)
- ネットワーキング
- 動的ルーティング・ゲートウェイ
- 顧客構内機器
- VPN接続
- ネットワーキング
- AWS(Amazon Web Service)
- 仮想プライベートネットワーク (VPN)
- カスタマーゲートウェイ
- 仮想プライベートゲートウェイ
- サイト間のVPN接続
- 仮想プライベートネットワーク (VPN)
そのほかにも、VPNで接続する先のネットワーク(VPC(AWS)、VCN(OCI))が必要になりますが、こちらは割愛します。「なんぞや!VPC、VCN」という方は、別途、AWSとOCIのネットワークについて調べてください
#構築手順
所要時間 30分
※IPSec VPNで接続する先のVPC(AWS)、VCN(OCI)は用意されている前提になります。
##1.ネットワーク条件の確認
VPCとVCNのネットワークセグメントは異なる範囲を指定しておくこと。
重複していなければOK。
##2.AWS側にIPSecトンネルを作成する
###2-1.カスタマーゲートウェイの用意(AWS)
AWS側にVPN接続設定を用意するため、カスタマーゲートウェイ(仮)を用意します。
※仮であるのは、OCI側の設定値が分からないので仮に作成します。この情報がないとAWS側で作るサービスが用意できないため。
設定する情報としては、「名前とルーティング」設定ぐらい。あとは、デフォルトで良いです。IPアドレスは適当なもの(1.1.1.1とか)を入れて[カスタマーゲートウェイの作成]をポチッとする。
※こちらは「静的ルーティング」例になります。動的ルーティングは、2020年のAdvent Calendar記事をみてください
問題なく作成できれば、こんな画面が表示されます。
###2-2.仮想プライベート・ゲートウェイ(VPG)の用意(AWS)
AWS側のルーティングサービス。OCIでいうDRGにあたるものの準備になります。
[仮想プライベートネットワーク(VPN)]-[仮想プライベートゲートウェイ]をポチッとする。
最初のVPG作成に必要な情報は、名前ぐらいです。
サクッと作成できます。
あとは、この VPG を VPC にアタッチします。[アクション]-[VPCにアタッチ]をポチッとします。
現在用意してあるVPCを選択できるので、該当するVPCを選択します。(今回はAWS上で稼働しているブログのVPCを選択しています。)
特に問題なければ、「状態」が attaching になります。
###2-3.VPN接続の作成(トンネルの作成)(AWS)
AWS 側に IPSec トンネルを作成します。
[仮想プライベートネットワーク(VPN)]-[サイト間のVPN接続]から[VPN接続の作成]をポチッとする。
設定する項目は、矢印で示したところです。コンボボックスから選択できるものは、事前に用意した仮想プライベートゲートウェイ(VPG)とカスタマーゲートウェイを設定します。なお、こちらのIPSecトンネルは複数構築(冗長構成)することもできます。今回は1本だけ用意します。
※しつこいですけど、こちらは「静的ルーティング」例になります。動的ルーティングは、2020年のAdvent Calendar記事をみてください
ルーティングオプション「静的」を選択すると「静的IPプレフィックス」情報が表示されますが、こちらは相手先(OCI(VPN))側のセグメントを登録します。
「トンネル1の事前共有キー」は、OCI側で認められる文字列(数字、文字およびスペースのみ許可)で事前に用意してください。
作成自体は、問題なくできます。
IPSec(AWS)の準備ができたら、OCIでIPSecトンネルを用意するため、AWS側のVPN構成情報を取得します。
設定については、各ベンダー用の定義情報がダウンロードできますが、ここでは(Vendor)Generic、(Platform)Generic に設定してダウンロードします。
設定をダウンロードすると、こんな感じのテキストファイルを入手できます。
こちらの情報をもってOCI側のIPSecトンネルを作成します。
##3.OCI側にIPSecトンネルを作成する
###3-1.顧客宅内機器(CPE)の作成(OCI)
先ほど用意したAWS側のVPN接続の情報を「顧客宅内機器」として登録します。
[ネットワーキング]-[顧客宅内機器]をポチッとします。
こちらでAWS側のVPN接続を設定します。
パブリックIPは、先ほどの構成情報にある[Outside IP Addresses]の[Virtual Private Gateway]のIPアドレスを登録します。CPEベンダー情報としては、もちろん AWS なんてあるわけがないので、Otherを選択して作成します。作成すると、こんな感じになります。
###3-2.動的ルーティング・ゲートウェイ(DRG)の作成(OCI)
AWSでもVPGを作成しましたが、OCI側も同様にゲートウェイを作成する必要があります。
[ネットワーキング]-[動的ルーティング・ゲートウェイ]をポチッとします。
こちらも、まずは名前を設定して作成。
DRGを用意したら、このDRGに、Blog用として用意したVCNをアタッチします。
アタッチまでは少し時間がかかりますが、無事に完了すると「アタッチ済」になります。
###3-3.VPN接続の作成(OCI)
####VPN接続の作成(OCI)
OCI側にIPSecトンネルを作成します。
[ネットワーキング]-[VPN接続]をポチッとします。
[IPSec接続の作成]をポチッとします。このとき、先ほどAWSにて定義情報をダウンロードしたテキストを利用します。
登録する情報は、こんな感じ。
拡張オプションの設定以外については、そんなに難しいところはないと思いますが、今回、静的ルーティングを選択しているので、相手側(AWS)の[STATIC ROUTE CIDR]を設定する必要があります。今回は、AWS側のVPCで設定しているCIDRを設定しています。
トンネル設定は少しややこしいので、こちらをフォーカスして記載します。
####トンネル設定(OCI)
AWS上で作成した「VPN接続」について定義情報を確認しながら、下記の通り設定します。
※誤って欲しくないので、しつこいぐらいに・・・。こちらは「静的ルーティング」例になります。動的ルーティングは、2020年のAdvent Calendar記事をみてください
■共有シークレット
[カスタム共有シークレットの指定]にチェックをつけて共有シークレットを登録します。こちらは、「#1: Internet Key Exchange Configuration」にある[Pre-Shared Key]の値を貼り付けます。
※注意:AWSのVPN接続でも補足しましたが、AWS上で共有シークレットキーにOCI側で認められない文字を利用している際は、AWS上の共有シークレットキーをOCIで認められている文字列で更新してください。
■IPV4トンネル内のインタフェース - CPE
こちらは「#3: Tunnel Interface Configuration」の[Inside IP Addresses]-[Virtual Private Gateway]の値を貼り付けます。
※「静的ルーティング」の場合はオプションになります。
■IPV4トンネル内のインタフェース - ORACLE
こちらは「#3: Tunnel Interface Configuration」の[Inside IP Addresses]-[Customer Gateway]の値を貼り付けます。
※「静的ルーティング」の場合はオプションになります。
間違えやすい気がしますので、よく確認して設定してください。
あと「トンネル2」の設定ですが、今回は1本だけ用意したいので使わないのですが、VPN接続の設定としては必須情報になりますので、ダミーとして登録しています。
####VPN接続情報の登録完了
使えるようになるまで少し時間がかかりますが、OCI側のIPSecトンネルを準備できました。
今度は、OCIで用意したIPSec情報を元にAWS側のカスタマーゲートウェイに登録します。
##4.AWS側にIPSecトンネルを作成する(続)
###4-1.カスタマーゲートウェイの用意。(前に仮で登録したところを正しく設定する)(AWS)
先ほどは仮で登録しましたが、今回はOCI側のIPSec接続情報があるので、こちらを元に作成します。
先ほど作ったOCIの[VPN接続]の情報(接続先のIP)を確認しながら、カスタマーゲートウェイを作成します。
- ルーティング設定を「静的」にする
- IPアドレスは、Oracle VPN IPアドレス(AWS-Tunnel-1 の Oracle VPN IPアドレス)を設定する。
こちらでカスタマーゲートウェイとしては完成です。
###4-2.VPN接続の更新(トンネル情報の更新)(AWS)
先ほどサイト間VPN接続で仮のカスタマーゲートウェイを設定していた情報を、上記で作成したカスタマーゲートウェイに差し替えます。
先ほど用意した[VPN接続情報]を選択して、[アクション]から[Modify VPN Connection]をポチッとします。
VPN接続情報のカスタマーゲートウェイを、先ほど、作成した本番用のものに変更します。
ここで[Save]すれば、AWSとOCI間のIPSec接続に関する設定は終了です。
設定反映に少し時間がかかりますが、設定が正しければAWS(VPC)とOCI(VPN)がIPSecでつながります。
###4-3.接続ステータスの確認
AWS側のVPN接続の状態が「使用可能」になると、トンネルのステータスが変更されます。
AWS側のトンネルステータスは、こんな感じ。
※前回の使い回しにしようと思ったのですけど「ちゃんと検証していないだろう!」という方は居ないと思いますが、今回、紹介した方法でちゃんと構築している証拠(笑)
こちらを確認してOCI側のステータスは、こちらで確認します。
※こちらも、前回の使い回しにしようと思ったのですけど「ちゃんと検証していないだろう!」という方は居ないと思いますが、今回、紹介した方法でちゃんと構築している証拠(笑)結局、静的ルーティング例と動的ルーティング(2020年のAdvent Calendar記事)の両方をやってしまった少しでも誰かの役に立てるといいなあ
設定が正しければ、両トンネルのステータスは稼働状態(アップ)になります。
##5.ルーティング設定
さて、ここからは去年のAdvent Calendarでも記載していなかったので、参考にしてください。
AWSとOCIでトンネルが張られたら、後は、このトンネルを使ってAWS(VPC)とOCI(VCN)間のルーティング設定をしてあげます。これをしないとお互いのネットワークに所属するマシンから相手先が分かりません。
###5-1.AWS側のルーティング設定
VPC(Virtual Private Cloud)-ルートテーブルを選択し、該当するルートテーブルを選択しルートのタブを選択します。
ルートタブのすぐそばにある「ルートの編集」をクリックすると、こんな画面になります。
「ルートの追加」をポチッとして、送信先(ココではOCI側のネットワーク)を設定して、ターゲットを Virtual Private Cloud から該当のVPG(VPNをターゲットゲートウェイとしたVPG)を選択します。
その後は、ルートの保存をポチッて終了です。
###5-2.OCI側のルーティング設定
ネットワーキング-仮想クラウド・ネットワークから該当のVCNを選択して、「ルート表」を選択します。
※今回はデフォルト・ルートを変更しますので、VCN情報から設定されているデフォルト・ルート表から直接でもOKです。
ルート表の詳細画面に遷移したら「ルート・ルールの追加」を行います。
こんな感じ。
###補足
これで、AWS(VPC)に設定されているルート表とOCI(VCN)に設定されているルート表それぞれに、相手先のIPをOCI(192.0.0.0/16)であれば、AWS(VPG)。AWS(172.31.0.0/16)であれば、OCI(DRG)に問い合わせるようになった感じです。
##6.セキュリティ設定
ここまでで、トンネル設定(AWSとOCI間)、ルーティング設定も完了。となると、もう通信経路は完成しています。あとは、クラウドで考慮しなくてはならないセキュリティ設定です。
今は、お互いのネットワークセグメントからの通信を許可していないので、こちらを許可してあげなくては通信はできません。今回は、すべてのトラフィックを開ける例です。(※デフォルト設定での例になります)
###6-1.セキュリティグループの設定(AWS)
VPC(Virtual Private Cloud)-セキュリティ-セキュリティグループを選択し、該当する(OCIと通信したいEC2にマッピングしているセキュリティグループ)セキュリティグループを選択し、「インバウンドのルール」タブを選択します。
「ルールの編集」を選択すると、こんな感じ。
今回はOCIからの通信はすべて許可するので、タイプを「すべてのトラフィック」を選択して、ソース先をOCIのCIDR(今回の例だと192.0.0.0/16)を設定します。
こちらで、ルールの保存をポチって終了です。
###6-2.セキュリティ・リストの設定(OCI)
ネットワーキング-仮想クラウド・ネットワークから該当のVCNを選択して、「セキュリティ・リスト」を選択します。
セキュリティ・リストの詳細から「イングレス・ルールの追加」をポチッとします。
今回はAWSからの通信はすべて許可するので、IPプロトコルを「すべてのプロトコル」を選択して、ソースCIDRをAWSのCIDR(今回の例だと172.31.0.0/16)を設定します。
こちらで、イングレス・ルールの追加をポチって終了です。
###補足
これで、AWS(VPC)に設定されているセキュリティグループとOCI(VCN)に設定されているセキュリティ・リストそれぞれに、通信許可を加えたので通信ができるようになりました。
設定が正しければ、これでAWS(VPC)とOCI(VCN)がVPN経由でつながっています
#おわりに
こちら2020年Advent Calendar(12/25)の回収ネタでした。両社のVPNサービスのみを利用してIPSec VPNの構築例になります。念のため、改めて記載しますが、この構成はAWSさん、Oracleさん共にサポートしている構成ではないと思うので利用する際は注意してください 「技術的にはできるね。」という感じで参考情報としていただければ
こちらで今年のQiita始めを終えようと思います。今年もよろしくお願いいたします!
また何か検証したら投稿したいのですけど、なかなか検証する時間ないのですよねぇ。2021年のAdvent Calendarまで空いちゃうかなあ。。。 でわでわ
#あとがき
こちらは2020年のAdvent Calendar(12/25)に投稿したときに構築できなかった理由の推測です。根本的な原因は、すでに構築した設定を削除したので追えないため…。
##昨年、構築できなかった理由
始めは「サポートされている構成ではない」ため、そもそも動的ルーティングの構築ができないのかな?と思いましたが、そうではありませんでした。
冒頭では「謹賀新年パワー!」と始めましたが、ある意味正しいかも(笑)
理由を調べてみたのですけど、おそらく、OCI側で変な情報が残っていたかな?というのが推測です。
ちなみに、今回も検証中VPN経由で通信ができない状態が発生しました。このとき調べてみると、ルーティング設定が期待通りではない状態になっていました。
上記の画面をみると、ターゲットに指定しているDRGが表示している情報(OCI-DRG)と内部での設定(Tama-DRG)が異なっています。私がチェックしていたのは、表示上の情報だったので「設定されている」と思っていたけど、実際には設定されていなかったものがあったかもしれません
「おい!コレBugじゃねーのか!」と思う方もいらっしゃるかもしれませんが、今回のケースはサポート対象の構成ではなく、色々と試している中だったので自己責任範囲と思ってやり過ごしてしまいました
ですが、他にも色々と期待したとおり動作しないケースがあるかもしれません。マニュアル通り進めて期待通りにならなかった場合は「サポートまで問い合わせるのが吉です!」もちろん、動作としておかしくない?もサポートです。私もサポートへ問い合わせても良かったのですが、すぐに回避方法を探しちゃうタイプなので、復旧させてしまいました
という感じで、先ほども記載したとおりサポートされていない構成や手順については自己責任でお願いします。(けど、技術検証は好きなので、こういうのを見つけるとワクワクする自分がいたりします)
ちなみに、理由がわかるとなんのこともないです。キチンと設定値が反映されているか確認するようにして、今回は構築することができました というのが、昨年失敗した理由かな?と思います。
教訓
「思い込み(表示だけで信じず)はせず、自分を信じて、本当に設定されているか疑うべし」
かな?
最後まで、読んでいただきありがとうございました!!
ではでは、今年もよろしくお願いいたします