ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を終える際は、これらの値をクラウド環境に固有の値に置き換えてください。
動的パブリックIPアドレスを使用したOracle Cloud InfrastructureでのVPNの確立
イントロダクション
Oracle Cloud Infrastructure (OCI)は、顧客構内機器(CPE)をVPNトンネル・エンドポイントとして構成するためのドメイン・ネーム・システム(DNS)の使用をサポートしていません。このチュートリアルでは、静的パブリックIPアドレスにアクセスできない中小企業が、動的アドレスでもIPSecサービスを使用できるようにすることを目的としています。この戦略には、顧客構内設備(CPE)のパブリックIPが変更されるたびに新しいOCIトンネルを自動的に生成できるスクリプトのデプロイが含まれます。
ノート:このチュートリアルでは、シェル・スクリプト・ファイルの最後の2行を使用して、自分のルーター(MikroTik)内でOCIに作成された新しいエンドポイントのIPアドレスと共有シークレットを更新します。ルータによっては、これら2つの値を反映するように更新する必要があります。
目標
- 新しい更新済CPE IPアドレスを使用して、新しいOracle Cloud Infrastructureサイト間VPNトンネルを作成します。
前提条件
-
パブリックCPE IPアドレスを指し示す、動的に更新されたDNSレコード。
-
Linux仮想マシン(VM)。
-
sshpass
をLinux VMにインストールします。このチュートリアルでは、これはMikroTikルーターにコマンドを送信するために使用されます。 -
Oracle Cloud Infrastructureコマンドライン・インタフェース(OCI CLI)をインストールおよび構成します。
-
APIキーを生成します。詳細は、API署名キーの生成方法を参照してください。
Oracle Cloud Infrastructureを使用したVPNの設定
-
CPE IPアドレスの更新のためにOCIとの安定したVPN IPSec接続を実現するには、動的に更新されるDNSレコードを設定する必要があります。この機能をサポートする複数のパブリックDNSプロバイダがあります。お気に入りを選択して構成します。(例: Cloudns.net)
パブリック動的DNSレコードを登録および構成した後、linux VMを設定できます。
-
Linux VMが稼働したら、OCI CLIをインストールして、このマシンからOCIテナンシを操作します。詳細は、OCI CLIのインストールおよび構成を参照してください。
-
プライベートのMikrotikルーター設定の更新に
sshpass
アプリケーションを使用する必要がある場合に備えてインストールします。sudo apt-get install sshpass
-
.sh
ファイルを作成し、次のスクリプトをファイルにコピーして実行可能にします。データ、CPEを指すコンパートメントID、DRG IDおよびDNS名を使用してスクリプトを必ず変更してください。ノート:このコマンドを実行するociパスは、ターミナルにあります:
which oci
ノート:スクリプトの最後のセクション(MikroTikルーター専用)は、MikroTikルーターを使用している場合にのみ必要です。それ以外の場合は、OCIトンネル・エンドポイントのIPアドレスと共有シークレットをルーターに更新するためのコマンドを実装する必要があります。
nano VPN_update.sh
#!/bin/bash #OCI variables export compartment_id=ocid1.compartment.oc1… #your OCI compartment ID export drg_id=ocid1.drg.oc1.eu-frankfurt-1… #your DRG ID export DNS_cpe=YOUR_DYNAMIC_DNS_RECORD_POINT_TO_YOUR_CPE #(example: your-domain.com) #Mikrotik variables export static_routes=192.168.1.0/24 #(YOUR PRIVATE SUBNET) export router_ip=192.168.1.1 #(YOUR ROUTER PRIVATE IP ADDRESS) export router_user=USER #(YOUR ROUTER USER) export router_password=PWD #(YOUR ROUTER PASSWORD) #oci command path (to find the path of oci command type 'which oci' into the terminal) export oci_path=PATH #(YOUR oci COMMAND PATH. example: /home/ubuntu/bin/oci) export ip_address=$(ping -c 1 $DNS_cpe | gawk -F'[()]' '/PING/{print $2}') check_out=$($oci_path network ip-sec-connection list --compartment-id $compartment_id --all --query "data[?\"cpe-local-identifier\"=='$ip_address']" | sed 's|[[]]||g') if [[ -n $check_out ]] then printf -- "%s\n" "IP of the CPE is not changed - EXIT" exit else printf -- "%s\n" "create new IPSEC tunnel" cpe_id=$($oci_path network cpe create --compartment-id $compartment_id --ip-address $ip_address --query data.id --raw-output) $oci_path network cpe update --cpe-id $cpe_id ipsc_id=$($oci_path network ip-sec-connection create --compartment-id $compartment_id --cpe-id $cpe_id --drg-id $drg_id --static-routes '["$static_routes"]' --query data.id --raw-output) $oci_path network ip-sec-connection update --ipsc-id $ipsc_id tunnel_id1=$($oci_path network ip-sec-tunnel list --ipsc-id=$ipsc_id --all --query 'data[0].id' --raw-output) tunnel_id2=$($oci_path network ip-sec-tunnel list --ipsc-id=$ipsc_id --all --query 'data[1].id' --raw-output) ip_sec_psk1=$($oci_path network ip-sec-psk get --ipsc-id=$ipsc_id --tunnel-id=$tunnel_id1 | grep -oP '(?<="shared-secret": ").*(?=")') ip_sec_psk2=$($oci_path network ip-sec-psk get --ipsc-id=$ipsc_id --tunnel-id=$tunnel_id2 | grep -oP '(?<="shared-secret": ").*(?=")') vpn_ip1=$($oci_path network ip-sec-tunnel list --ipsc-id=$ipsc_id --all --query 'data[0]."vpn-ip"' --raw-output) vpn_ip2=$($oci_path network ip-sec-tunnel list --ipsc-id=$ipsc_id --all --query 'data[1]."vpn-ip"' --raw-output) echo OCI TUNNEL 1 IP and SHARED SECRET echo $vpn_ip1 echo $ip_sec_psk1 echo OCI TUNNEL 2 IP and SHARED SECRET echo $vpn_ip2 echo $ip_sec_psk2 #Mikrotik router update section. (Execute the sshpass command before run this script). Avoid and delete these two rows if you don't need it. sshpass -p '$router_password' ssh $router_user@$router_ip "/ip ipsec/ identity/ set number=0 secret=$ip_sec_psk1" sshpass -p '$router_password' ssh $router_user@$router_ip "/ip ipsec/ peer/ set number=0 address=$vpn_ip1"
chmod +x VPN_update.sh
ノート:スクリプトはトンネルを作成できますが、古いトンネルを終了することはできません。OCIコンソールにログインし、使用されていない古いOCIサイト間VPNトンネルを終了するか、この機能を実装する必要がある場合があります。
-
スクリプトを自動的に実行する場合は、そのスクリプトを
crontab
に追加します。Crontab -e
ノート:頻度とスクリプト・パスを
crontab
の最後の行に追加します。次のコマンドは、15分ごとに実行することを目的としています。*/15 * * * * YOUR_SCRIPT_PATH/VPN_update.sh
次回CPE IPアドレスを変更すると、OCIトンネルが新しいIPアドレスと共有シークレットで最大15分以内に再作成されます。
関連リンク
承認
- 著者 - Marco Santucci (EMEA Enterprise Cloud Solution Architect)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Establish a VPN with Oracle Cloud Infrastructure using a Dynamic Public IP Address
F96563-01
April 2024