OCIとAWSでVPN接続をしてみた
こんにちは。Oracle Cloud Infrastructure(OCI)特集 編集部です。
今回はOracle Cloud Infrastructure(以下、OCI)とAmazon Web Service(以下、AWS)でIPSecVPN接続を検証してみたいと思います。
OCIとAWSではそれぞれVPN接続用のサービスが提供されていますが、AWS側ではそのサービスを利用せずにLibreswanという仮想VPNルーターをEC2インスタンス上に構築してVPN接続をしてみたいと思います。なぜこのような方法を取るかというと、IPSec設定を行う際には接続先となる対向のパブリックIPアドレスを指定する必要がありますが、どちらのクラウドもIPsec設定をした後に自身のVPN接続用のパブリックIPアドレスを払い出しを行うため、標準で提供されているVPNサービス同士を接続することが出来ないためです。
それでは早速接続検証をしてみましょう!!
1.OCIとAWSのVPN接続
【概要】
今回のOCIとAWSのVPN接続では、OCIのDRG(Dynamic Routing Gateway)とAWS内に構築したLibreswan間でIPSecVPN接続を確立します。絵を描いてみましたので下記をご覧ください。

IPSec接続の通信となるため、AWS→OCIへ通信を行う際にはLibreswanをゲートウェイにして通信を行う必要があります。そのため、AWS内のルートテーブルでルーティング設定をしてあげる必要があります。OCIも同様にAWSへ通信を行う際にはDRGをゲートウェイとするようにルーティング設定をしてあげます。
【作業の流れ】
今回の設定ではAWS→OCI→AWSと、AWSを2回にわけて設定を行います。
※AWSでパブリックIPアドレスを払い出し、OCI側でVPN接続を行いパブリックIPを払い出し、OCIのパブリックIPを使ってAWSのVPN接続設定を行います。
■AWS
1.VPC作成
2.サブネット作成
3.インターネットゲートウェイ作成
4.EC2インスタンス × 2台の作成
5.インターネットゲートウェイのアタッチ
■OCI
6.VCN作成
7.サブネット作成
8.Computeインスタンス × 1台の作成
9.DRGの作成
10.CPEの作成
11.IPSecの設定
12.ルートテーブルの設定
13.セキュリティリストの設定
■AWS
14.Libreswanのインストール
15.ルートテーブルの設定
16.セキュリティグループの設定
17.ソース/宛先チエックの無効化設定
18.Libreswanの設定
2.OCIとAWSのIPSecVPN接続設定
■AWS側の設定
1.VPC作成
VPC名とCIDRを入力してVPCを作成します。

2.サブネット作成
1で作成したVPCを選択し、サブネットのCIDRを入力のうえサブネットを作成します。

3.インターネットゲートウェイ作成
インターネットゲートウェイを作成し、先ほど作成したVCPにアタッチします。


4.EC2インスタンス × 2台の作成
・LibreswanをインストールするEC2 → 今回はLibreswan_Serverという名前で作成
・Libreswanの背後にいる通信用のEC2 → 今回はLibreswan_Clientという名前で作成
Libreswan_ServerではパブリックIPアドレスを付与してください。

5.インターネットゲートウェイのアタッチ
「Libreswan_Server」が所属するルートテーブルにインターネットゲートウェイをアタッチします。

※この時点でパブリックIPアドレスを利用して「Libreswan_Server」にSSHログインできることを確認してください。出来ない場合はセキュリティグループでSSHが許可されていることを確認してください。
■OCI側の設定
6.VCN作成
VCN名とCIDRを入力してVCNを作成します。

7.サブネット作成
サブネット名/CIDR/ルート表を入力してサブネットを作成します。

8.Computeインスタンス × 1台の作成
DRGの背後にいる通信用のインスタンス → 今回はinstance-20190405-1125という名前で作成

9.DRG作成
必要事項を入力のうえDRGを作成します。

10.CPEの作成
先ほど作成したLibreswanのパブリックIPアドレスを利用してCPEを作成します。

11.IPSecの設定
必要事項を入力のうえIPSecを設定します。

IPSecを設定後にVPN接続用のパブリックIPアドレスが2個払い出されます。後ほどLibreswanのVPN設定に利用しますのでシークレットキーとあわせてメモをしておきます。
※下記図の「●.●.●.●」と「○.○.○.○」は「1.OCIとAWSのVPN接続」に記載したDRGのVPN接続用パブリックIPアドレスになります。

12.ルートテーブルの設定
AWSへの通信はDRGをゲートウェイとする設定を加えます。

13.セキュリティリストの設定
AWSとのVPN通信/疎通確認用のPing通信を許可します。

■AWS側の設定
14.Libreswanのインストール
4で作成した「Libreswan_Server」にsshでログインしてLibreswanをインストールします。
# yum -y install libreswan

15. ルートテーブルの設定
OCIとIPSec通信を行う際には「Libreswan_Server」をゲートウェイとするようルーティング設定をします。

16. セキュリティグループの設定
IPSec通信用の許可設定を行います。

17. ソース/宛先チエックの無効化設定
「Libreswan_Server」にソース/宛先チエックの無効化設定を行います。
ステータスが「無効」になっている状態が正しいです。

18.Libreswanの設定
①sysctl.confファイルの修正
Libreswanを利用するうえで必要となるパラメータの修正を行います。
# vi /etc/sysctl.conf

②sysctl.confファイルの反映
下記コマンドを実行してパラメータを有効化します。
# sysctl -p
③Libreswanのコンフィグ設定1
IPSecのコンフィグファイルを修正します。必要に応じて修正前にバックアップを取得してください。
# vi /etc/ipsec.conf

④Libreswanのコンフィグ設定2
IPSec接続用のパラメータを設定します。
# vi /etc/ipsec.d/oci-ipsec.conf

⑤Libreswanのコンフィグ設定3
IPSec接続時の鍵情報を設定します。

⑥IPSecサービスの再起動
設定が完了したらipsecサービスの再起動を行います。
# systemctl restart ipsec
⑦VPN接続が確立していることの確認1
tunnelがestablishになっていることを確認します。
# ipsec status | grep establish

⑧VPN接続が確立していることの確認2
各tunnelの通信経路が想定どおりであることを確認します。
# ipsec auto –status | grep ===

⑨IPSecの設定内容確認
確認コマンドの結果がすべてOKになることを確認します。
# ipsec verify

⑩IPSec用インタフェースへのルーティング設定
OCIへ通信する際にはIPSec設定時に作成したインタフェースをゲートウェイとする必要があるのでその設定を行います。
# ip route add 10.0.1.0/24 nexthop dev vti01 nexthop dev vti02
⑪routing確認
ルーティングが正しく設定されていることを確認します。
# ip route

3.疎通確認
「Libreswan_Client」にログインして、「 instance-20190405-1125 」にping確認を行います。

ping通信が成功しました!
いかがでしたでしょうか。設定項目が多く若干時間がかかりますが、現状(2019年4月時点)AWSとOCIが提供するVPNサービスではVPN接続を行うことは出来ませんが、Libreswanを利用することでIPSecVPN接続を行うことができました。