Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. A la fin de l'exercice, remplacez ces valeurs par des valeurs propres à votre environnement cloud.
Etablir un VPN avec Oracle Cloud Infrastructure à l'aide d'une adresse IP publique dynamique
Introduction
Oracle Cloud Infrastructure (OCI) ne prend pas en charge l'utilisation du système de noms de domaine (DNS) pour configurer le CPE (Customer Premises Equipment) en tant qu'adresse de tunnel VPN. Ce tutoriel vise à permettre aux petites entreprises qui n'ont pas accès à une adresse IP publique statique d'utiliser le service IPSec, même avec une adresse dynamique. La stratégie consiste à déployer un script capable de générer automatiquement un nouveau tunnel OCI chaque fois que l'adresse IP publique du CPE (Customer Premises Equipment) change.
Remarque : dans ce tutoriel, les deux dernières lignes du fichier de script shell sont utilisées pour mettre à jour l'adresse IP et la clé secrète partagée de la nouvelle adresse créée sur OCI dans mon routeur (MikroTik). En fonction de votre routeur, vous devez le mettre à jour pour refléter ces deux valeurs.
Objectif
- Créez un tunnel VPN site à site Oracle Cloud Infrastructure avec la nouvelle adresse IP de CPE mise à jour.
Prérequis
-
Enregistrement DNS mis à jour dynamiquement qui pointe vers votre adresse IP de CPE publique.
-
Une machine virtuelle Linux.
-
Installez
sshpass
dans la machine virtuelle Linux. Dans ce tutoriel, il sera utilisé pour envoyer des commandes au routeur MikroTik. -
Installer et configurer l'interface de ligne de commande Oracle Cloud Infrastructure
-
Générez une clé d'API. Pour plus d'informations, reportez-vous à How to Generate an API Signing Key.
Configuration d'un VPN avec Oracle Cloud Infrastructure
-
Afin d'obtenir une connexion VPN IPSec stable avec OCI pour une mise à jour d'adresse IP de CPE, vous devez configurer un enregistrement DNS mis à jour dynamiquement. Plusieurs fournisseurs DNS publics prennent en charge cette fonctionnalité. Sélectionnez votre favori et configurez-le. (Exemple : Cloudns.net)
Une fois que vous avez enregistré et configuré un enregistrement DNS dynamique public, vous pouvez configurer votre machine virtuelle linux.
-
Une fois que la machine virtuelle Linux est en fonctionnement, installez l'interface de ligne de commande OCI pour qu'elle fonctionne sur votre location OCI à partir de cet ordinateur. Pour plus d'informations, reportez-vous à Installation et configuration de l'interface de ligne de commande OCI.
-
Installez l'application
sshpass
au cas où vous auriez besoin de l'utiliser pour mettre à jour vos paramètres de routeur Mikrotik privés.sudo apt-get install sshpass
-
Créez le fichier
.sh
, copiez le script suivant dans le fichier et rendez-le exécutable. N'oubliez pas de modifier le script avec vos données, l'ID de compartiment, l'ID de DRG et le nom DNS pointant vers votre CPE.Remarque : vous pouvez trouver le chemin oci exécutant cette commande dans votre terminal :
which oci
Remarque : la dernière section du script, dédiée au routeur MikroTik, n'est nécessaire que si vous utilisez un routeur MikroTik. Sinon, vous devez implémenter les commandes permettant de mettre à jour l'adresse IP de l'adresse de tunnel OCI et la clé secrète partagée dans votre routeur.
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
Remarque : le script peut créer les tunnels mais ne peut pas y mettre fin. Parfois, vous devez vous connecter à la console OCI et mettre fin aux anciens tunnels VPN site à site OCI inutilisés ou y implémenter cette fonction.
-
Ajoutez le script à
crontab
si vous voulez l'exécuter automatiquement.Crontab -e
Remarque : ajoutez la fréquence et le chemin de script à la dernière ligne de
crontab
. La commande suivante est destinée à être exécutée toutes les 15 minutes.*/15 * * * * YOUR_SCRIPT_PATH/VPN_update.sh
La prochaine fois que votre adresse IP de CPE sera modifiée, le tunnel OCI sera recréé avec la nouvelle adresse IP et la nouvelle clé secrète partagée dans un délai maximum de 15 minutes.
Liens connexes
Remerciements
- Auteur - Marco Santucci (architecte de solution EMEA Enterprise Cloud)
Ressources de formation supplémentaires
Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Establish a VPN with Oracle Cloud Infrastructure using a Dynamic Public IP Address
F96561-01
April 2024