Remarques :

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

Prérequis

Configuration d'un VPN avec Oracle Cloud Infrastructure

  1. 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.

  2. 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.

  3. 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
    
  4. 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.

  5. 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.

Remerciements

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.