AWS
oracle
VPN
oraclecloud
Libreswan

Oracle Cloud と AWS を IPSec VPN(Libreswan)でつないでみた

■接続イメージ

接続イメージ - コピー.png

■各種情報

Cloud Section Value
Oracle VCN CIDR block 172.0.0.0/16
Oracle VCN CIDR network 172.0.0.0
Oracle VCN CIDR netmask 255.255.0.0
AWS VPC CIDR block 10.0.0.0/16
AWS VPC CIDR network 10.0.0.0
AWS VPC CIDR netmask 255.255.0.0
AWS Libreswan public interface VM Public IP - 100.100.100.101
Oracle VPN headend IPSec tunnel endpoint 200.200.200.201
Oracle VPN tunnel shared secret EXAMPLEDPfAMkD7nTH3SWr6OFabdT6exXn6enSlsKbE

■AWS側インスタンス設定

①libreswanインストール

[ec2-user@vpn-inst01 ~]$ sudo yum -y install libreswan
 Loaded plugins: amazon-id, rhui-lb, search-disabled-repos
 rhui-REGION-client-config-server-7                       | 2.9 kB     00:00
 rhui-REGION-rhel-server-releases                         | 3.5 kB     00:00
 ・・・
 Updated:
  libreswan.x86_64 0:3.23-5.el7_5

 Complete!

②ソース/宛先チエックの無効化設定
 AWSコンソールでlibreswanインストールしたインスタンスをチェックし、
 [ネットワーキング] → [ソース/宛先チエックの有効化] をクリックし、
 [はい、無効化する]をクリックして設定
2_AWS_disable the source設定(加工).png

③IP_forward 設定
・viで下記設定

[ec2-user@vpn-inst01 ~]$ sudo vi /etc/sysctl.conf
 ・・・
 net.ipv4.ip_forward=1
 net.ipv4.conf.all.accept_redirects = 0
 net.ipv4.conf.all.send_redirects = 0
 net.ipv4.conf.default.send_redirects = 0
 net.ipv4.conf.eth0.send_redirects = 0
 net.ipv4.conf.default.accept_redirects = 0
 net.ipv4.conf.eth0.accept_redirects = 0 

・設定反映

[ec2-user@vpn-inst01 ~]$ sudo sysctl -p
 net.ipv4.ip_forward = 1
 net.ipv4.conf.all.accept_redirects = 0
 net.ipv4.conf.all.send_redirects = 0
 net.ipv4.conf.default.send_redirects = 0
 net.ipv4.conf.eth0.send_redirects = 0
 net.ipv4.conf.default.accept_redirects = 0
 net.ipv4.conf.eth0.accept_redirects = 0

④AWSコンソールでルートテーブル設定
 VCN SIDR 172.0.0.0/16 に Libreswan インスタンスのIDをターゲット追加
3_route table設定(加工).png

⑤AWSコンソールでネットワークACLの設定
 IPSec VPN通信を可能にするために、UDPプロトコルに対してポート番号4500と500をインバウンドのルールに追加
・セキュリティグループ設定:
4_セキュリティグループ設定.png

・ネットワークACL設定:
4_AWSコンソールでネットワークACLの設定.png

⑥ipsec.conf設定

[ec2-user@vpn-inst01 ~]$ sudo mv /etc/ipsec.conf /etc/ipsec.conf.org
[ec2-user@vpn-inst01 ~]$ sudo vi /etc/ipsec.conf 
    config setup
        plutoopts="--perpeerlog"
        protostack=auto
        nat_traversal=yes
    include /etc/ipsec.d/*.conf

■Oracle Cloud 側設定

①Customer-Premises Equipment (CPE)作成
Libreswan AWS instance の Public IP address(100.100.100.101)をポイントしてCPE作成
6_OCI_CPE設定(加工).png

②DRG作成
 VCN (172.0.0.0/16)をアタッチしてDRGを作成
7_OCI_DRG設定.png

③IPSec Connections作成
作成したDRGに point it to the AWS VPC CIDR (10.0.0.0/16)をポイントして作成

8_OCI_DRG設定2.png

作成後 右端の ・・・(Actions icon) からTunnel Informationメニューをクリックして
DOWN state (まだAWS Libreswan側の設定ができていなため)であることを確認

9_OCI_DRG設定3(加工).png

④Security List設定
 AWSとIPSec VPN通信を可能にするために、UDPプロトコルに対してポート番号4500と500をIngress Rulesに追加
10_IngressRule.png

⑤VCNの Route Rules設定
DRGに AWS VPC CIDR (10.0.0.0/16)を Route tablesに追加
11_RuteRule設定.png

■AWS側の Libreswan 設定

①oci.conf設定

[ec2-user@vpn-inst01 ~]$ sudo vi /etc/ipsec.d/oci.conf
    conn oci1
         authby=secret
         auto=start
         pfs=yes
         leftid=200.200.200.201      #OCI DRG IPSec Public IP
         left=200.200.200.201        #OCI DRG IPSec Public IP
         leftsubnets={172.0.0.0/16} #OCI VCN CIDR
         right=10.0.0.202           #AWS Libreswan local VPC internal address
         rightid=100.100.100.101        #AWS Libreswan Public IP address
         rightsubnet=10.0.0.0/16    #AWS VPC CIDR

②ipsec.secrets設定

[ec2-user@vpn-inst01 ~]$ sudo vi /etc/ipsec.secrets
    #OCI_DRG-Public-IP-IPSEC-Tunel1  AWS_OpenSWAN-PublicIP   :   PSK    "DRG Secret Key"
    200.200.200.201  100.100.100.101  : PSK   "EXAMPLEDPfAMkD7nTH3SWr6OFabdT6exXn6enSlsKbE"

③ipsec デーモンを起動

[ec2-user@vpn-inst01 ~]$ sudo systemctl start ipsec

④VPNトンネルが正しく開始されたことを確認

[ec2-user@vpn-inst01 ~]$ sudo ipsec auto --status |grep "==="
    000 "oci1/1x0": 10.0.0.0/16===10.0.0.202<10.0.0.202>[100.100.100.101]...200.200.200.201<200.200.200.201>===172.0.0.0/16; unrouted; eroute owner: #0

⑤OCIコンソールでIPSec接続確認

・Tunnel Information画面
DOWN state が UP state になっていることを確認
12_IPsec Connection Status(加工).png

■VPN接続テスト

・OCIインスタンスからAWSインスタンス接続テスト
sshで相手側のホスト名が出力されることを確認

① OCI -> AWS インスタンスへssh接続

[opc@oci-inst1 ~]$ ssh -i AWS_EC2.pem  ec2-user@10.0.0.202 hostname
    ec2-inst01.us-east-2.compute.internal

① AWS -> OCI インスタンスへssh接続

[ec2-user@vpn-inst01 ~]$ ssh -i <OCIssh鍵>  opc@172.0.0.2 hostname
    oci-inst01

■NWスループット確認

① firewalld停止
・OCI、AWS両方の接続インスタンスのFirewallを一時的に停止

[opc@oci-inst1 ~]# systemctl stop firewalld
success

② iperf3 のServer
クライアントからサーバにTCPパケットを送信して負荷を計測

・サーバー側コマンド実行

[ec2-user@vpn-inst01 ~]# iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

・クライアント側コマンド実行

[opc@oci-inst1 ~]$  iperf3 -c 10.0.0.202 
    Connecting to host 10.0.0.202, port 5201
    [  4] local 172.0.0.2 port 33675 connected to 10.0.0.202 port 5201
    [ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
    [  4]   0.00-1.00   sec  16.1 MBytes   135 Mbits/sec    0   3.00 MBytes
    [  4]   1.00-2.00   sec  23.9 MBytes   201 Mbits/sec    0   3.01 MBytes
    [  4]   2.00-3.00   sec  23.8 MBytes   199 Mbits/sec    0   3.01 MBytes
    [  4]   3.00-4.00   sec  23.8 MBytes   199 Mbits/sec    0   3.01 MBytes
    [  4]   4.00-5.00   sec  24.0 MBytes   201 Mbits/sec    0   3.01 MBytes
    [  4]   5.00-6.00   sec  23.7 MBytes   199 Mbits/sec    0   3.01 MBytes
    [  4]   6.00-7.00   sec  23.7 MBytes   199 Mbits/sec    0   3.01 MBytes
    [  4]   7.00-8.00   sec  23.5 MBytes   197 Mbits/sec    0   3.01 MBytes
    [  4]   8.00-9.00   sec  23.8 MBytes   199 Mbits/sec    0   3.01 MBytes
    [  4]   9.00-10.00  sec  23.5 MBytes   197 Mbits/sec    0   3.01 MBytes
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval           Transfer     Bandwidth       Retr
    [  4]   0.00-10.00  sec   230 MBytes   193 Mbits/sec    0             sender
    [  4]   0.00-10.00  sec   227 MBytes   191 Mbits/sec                  receiver

    iperf Done.

① firewalld有効
・OCI、AWS両方の接続インスタンスのFirewallを一時的に停止したのを戻す

[opc@oci-inst1 ~]# systemctl start firewalld
success