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接続を行うことができました。