APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【OCI】AWSへVPN接続し、VM間で疎通確認するまでの記録

はじめに

こんにちは。クラウド事業部の野本です。

OCIを他クラウドと連携して使うために、双方のネットワークを接続する方法を調査しています。OCIのドキュメントの中に各種クラウドと接続する手順が書いてあったため、まずはAWSとのVPN接続を試してみました。

本記事ではVPN接続を作成しVPC−VCN間のルーティングを確立する一連の設定手順をまとめています。

構成

AWS上のVPCとOCI上のVCN、それぞれにプライベートサブネットを作成してVMを1台配置します。そしてこれらをVPNで接続し、VM間でpingが通ることを目指します。

主なリソースや使用するIPアドレスを記した構成図は以下の通りです。(VMにログインするためのエンドポイントは省略しています)

構築

VPN接続の作成に必須なリソースを知るために、VPC/VCNとサブネットは後回しにします。

VPN接続

OCIドキュメントの「AWSへのVPN接続」を元に進めます。

なお、OCIの動的ルーティング・ゲートウェイは必要になるタイミングでサクッと作ります。

AWSにVPN接続を作成

Oracle VPN IPアドレスがまだ無いため、カスタマーゲートウェイは適当なIPアドレスを指定したものを作成しておきます。

  • カスタマーゲートウェイ(CGW)
    • 名前タグ: test-oci2aws-cgw-tmp
    • BGP ASN: 31898 (=Oracleの商用クラウド用)
    • IPアドレス: 203.0.113.183 ← ダミー
    • ARN証明書:空
    • デバイス:空
  • 仮想プライベートゲートウェイ(VGW)
    • 名前タグ: test-oci2aws-vgw
    • 自律システム番号(ASN): AmazonデフォルトASN
  • Site-to-Site VPN接続
    • 名前タグ: test-oci2aws-vpn
    • ターゲットゲートウェイのタイプ: 仮想プライベートゲートウェイ
    • 仮想プライベートゲートウェイ:作成したVGW
    • カスタマーゲートウェイ: 既存 、作成したCGW
    • ルーティングオプション: 動的 (BGPが必要)
    • 事前共有キーストレージ: スタンダード
    • ローカルIPv4ネットワークCIDR:空
    • リモートIPv4ネットワークCIDR:空
    • トンネル1の内部IPv4 CIDR: 169.254.0.252/30 ← OCIで使えない範囲を避ける
    • トンネル1の事前共有キー:半角英数字で8〜64文字 ← OCIで使えない文字 ., _ を避ける
    • トンネル1の詳細オプション
      • IKEバージョン: ikev2 のみ選択する ← ベストプラクティスに従う

VPNの設定をダウンロードすると、OCI側で設定するときに必要な情報が一括で手に入ります。タイプ Generic を指定してダウンロードしたファイルの一部を以下に示します。

IPSec Tunnel #1
================================================================================
#1: Internet Key Exchange Configuration

Configure the IKE SA as follows:
  - IKE version              : IKEv2
  - Authentication Method    : Pre-Shared Key
  - Pre-Shared Key           : ****  // 使う
  ...

#3: Tunnel Interface Configuration

Outside IP Addresses:
  - Customer Gateway                    : x.x.x.x  // ダミー
  - Virtual Private Gateway             : y.y.y.y  // 使う

Inside IP Addresses
  - Customer Gateway                    : 169.254.0.254/30  // 使う
  - Virtual Private Gateway             : 169.254.0.253/30  // 使う

...

#4: Border Gateway Protocol (BGP) Configuration:

BGP Configuration Options:
  - Customer Gateway ASN                  : 31898
  - Virtual Private  Gateway ASN          : 64512  // 使う(AmazonデフォルトASN)
  ...

OCIにIPSec接続を作成

VPNをOCIから見るとAWSと反転するため、トンネル内インタフェースのOracleはCGWに、顧客構内機器はVGWに対応します。

  • 顧客構内機器(CPE)
    • 名前: test-oci2aws-cpe
    • FastConnect経由のIPSecを許可:off
    • IPアドレス:VGWの外部IPアドレス
    • ベンダー: Other
  • 動的ルーティング・ゲートウェイ(DRG)
    • 名前: test-oci2aws-drg
  • サイト間VPN
    • 名前: test-oci2aws-ipsec
    • 顧客構内機器:作成したCPE
    • このCPEはNATデバイスの背後にあります:off
    • 動的ルーティング・ゲートウェイ:作成したDRG
    • オンプレミス・ネットワークへの静的ルート: 0.0.0.0/0 をリストに追加 ← トンネル2を静的とするため
    • トンネル1
      • 名前: test-oci2aws-tunnel1
      • カスタム共有シークレットの指定:on
      • 共有シークレット:AWSで設定された値
      • IKEバージョン: IKEv2
      • ルーティング・タイプ: BGP動的ルーティング
      • BGP ASN: 64512 (VGWのBGP ASN=AmazonデフォルトASN)
      • IPv4トンネル内インタフェース- CPE:VGWの内部IP(/30まで全て記入)
      • IPv4トンネル内インタフェース- Oracle:CGWの内部IP(/30まで全て記入)
      • IPv6アドレス指定:off
    • Tunnel 2
      • ルーティング・タイプ: 静的ルーティング ← 動的だと必須項目があり作成できない

作成し終わると、トンネルにOracle VPN IPアドレスが割り振られます。

AWSのVPN接続を変更

CGWをOracle VPN IPアドレスで作成し直し、VPN接続のターゲットを入れ替えます。

  • カスタマーゲートウェイ
    • 名前タグ: test-oci2aws-cgw
    • BGP ASN: 31898 (=Oracleの商用クラウド用)
    • IPアドレス:Oracle VPN IPアドレス
    • ARN証明書:空
    • デバイス:空
  • Site-to-Site VPN接続 → VPN接続を変更
    • ターゲットタイプ: カスタマーゲートウェイ
    • ターゲットカスタマーゲートウェイ:再作成したCGW

仮のCGWはもう必要ないため削除できます。数分待ち、VPNが利用可能になれば完成です。

ステータス確認

OCI/AWSどちらで見てもトンネル1が稼働しています。以下はOCIのコンソールの例です。

サブネット作成

VPNは張れましたが、VM間で実際にpingできることまで確認したいため、VMを配置するVPC/VCNとサブネットを作成します。

AWS側

  • VPC
    • 作成するリソース: VPCのみ
    • 名前タグ: test-oci2aws-vpc
    • IPv4 CIDRブロック:IPv4 CIDRの手動入力 10.105.0.0/16
    • IPv6 CIDRブロック:IPv6 CIDRブロックなし
    • テナンシー: デフォルト
  • サブネット
    • VPC:作成したVPC
    • サブネット名: test-oci2aws-subnet
    • アベイラビリティーゾーン: 指定なし
    • IPv4 VPC CIDRブロック: 10.105.0.0/16
    • IPv4サブネットCIDRブロック: 10.105.1.0/24

作成後、VGWをVPCへアタッチします。そしてVPCのルートテーブルでルート伝播を有効化します。

これでVPCのCIDRがVPNを通して相手に通知されます。また、VPNから相手のCIDRが通知されると自動的にVPCへルートが反映されます。

OCI側

  • 仮想クラウド・ネットワーク(VCN)
    • 名前: test-oci2aws-vcn
    • IPv4 CIDRブロック: 10.116.0.0/16 をリストに追加
    • このVCNでDNSホスト名を使用:off ※VCNの作成後は変更不可
    • IPv6接頭辞:全てoff・空
  • サブネット
    • 名前: test-oci2aws-subnet
    • サブネット・タイプ: リージョナル(推奨)
    • IPv4 CIDRブロック: 10.116.1.0/24
    • IPv6接頭辞:(入力欄なし)
    • ルート表:Default Route Table
    • サブネット・アクセス: プライベート・サブネット
    • DNS解決:off ※ VCNで無効化したため
    • DHCPオプション:Default DHCP Options
    • セキュリティ・リスト:空
    • リソース・ロギング:off
  • DRG → VCNアタッチメント
    • 添付名: test-oci2aws-vcn-attach
    • 仮想クラウド・ネットワーク:作成したVCN
    • DRGルート表の選択: Autogenerated Drg Route Table for VCN attachments
    • ルート表の関連付け: なし
    • VCNルート・タイプ: サブネットCIDRブロック
  • ルート表 → ルート・ルールの追加
    • ターゲット・タイプ: 動的ルーティング・ゲートウェイ
    • 宛先タイプ: CIDRブロック
    • 宛先CIDRブロック: 10.0.0.0/8
    • ターゲット動的ルーティング・ゲートウェイ:作成したDRG
    • 説明:適宜

VCNのルート表にDRGから動的に反映する設定がわからなかったため、ここだけ手動で適当にルールを書きました。DRGのアタッチメントには相手から通知されたルートが自動的に反映され、またVCNサブネットのCIDRを相手に通知します。

これでVPC−VCN間のルーティングは完成です。

疎通確認

各サブネットにVMを作成してログインします。

OCI/AWS双方のセキュリティグループでICMPを許可することで、実際にpingが届きました。

# OCI → AWS
[opc@test-oci2aws-vm ~]$ ping -c 4 10.105.1.92
PING 10.105.1.92 (10.105.1.92) 56(84) bytes of data.
64 bytes from 10.105.1.92: icmp_seq=1 ttl=125 time=5.01 ms
64 bytes from 10.105.1.92: icmp_seq=2 ttl=125 time=5.15 ms
64 bytes from 10.105.1.92: icmp_seq=3 ttl=125 time=5.23 ms
64 bytes from 10.105.1.92: icmp_seq=4 ttl=125 time=5.27 ms

--- 10.105.1.92 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 5.012/5.166/5.269/0.098 ms
# AWS → OCI
[ec2-user@ip-10-105-1-92 ~]$ ping -c 4 10.116.1.223
PING 10.116.1.223 (10.116.1.223) 56(84) bytes of data.
64 bytes from 10.116.1.223: icmp_seq=1 ttl=61 time=5.15 ms
64 bytes from 10.116.1.223: icmp_seq=2 ttl=61 time=5.15 ms
64 bytes from 10.116.1.223: icmp_seq=3 ttl=61 time=5.13 ms
64 bytes from 10.116.1.223: icmp_seq=4 ttl=61 time=5.17 ms

--- 10.116.1.223 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 5.129/5.151/5.170/0.014 ms

おわりに

OCIドキュメントの「AWSへのVPN接続」を元に、AWSとOCIの間にVPNを張ってみました。VPN自体が構築初体験でしたが、ドキュメント通りに実施してトラブル無く接続でき、ルーティング情報も動的に設定されました。また、両クラウドで同じものを構築したため、それぞれの共通点や相違点も見えて理解が深まりました。

今回はVM間でのpingという非常に単純な検証だったため、今後はもう少し複雑な連携や、VPN以外の方法についても調べようと思います。