Nota

Stabilisci una VPN con Oracle Cloud Infrastructure utilizzando un indirizzo IP pubblico dinamico

Introduzione

Oracle Cloud Infrastructure (OCI) non supporta l'uso del Domain Name System (DNS) per la configurazione del CPE (Customer Premises Equipment) come endpoint del tunnel VPN. Questo tutorial ha lo scopo di consentire alle piccole imprese che non hanno accesso a un indirizzo IP pubblico statico di utilizzare il servizio IPSec anche con un indirizzo dinamico. La strategia prevede la distribuzione di uno script in grado di generare automaticamente un nuovo tunnel OCI ogni volta che cambia l'IP pubblico del CPE (Customer Premises Equipment).

Nota: in questa esercitazione vengono utilizzate le ultime due righe nel file di script della shell per aggiornare l'indirizzo IP e il segreto condiviso del nuovo endpoint creato su OCI all'interno del router (MikroTik). A seconda del router, è necessario aggiornarlo per riflettere questi due valori.

Obiettivo

Prerequisiti

Imposta una VPN con Oracle Cloud Infrastructure

  1. Per ottenere una connessione VPN IPSec stabile con OCI per un aggiornamento degli indirizzi IP CPE, è necessario impostare un record DNS aggiornato dinamicamente. Esistono diversi provider DNS pubblici che supportano questa funzione. Seleziona il tuo preferito e configuralo. (Esempio: Cloudns.net)

    Dopo aver registrato e configurato un record DNS dinamico pubblico, puoi impostare la VM linux.

  2. Una volta che la VM Linux è attiva e in esecuzione, installare l'interfaccia CLI OCI per operare sulla tenancy OCI da questo computer. Per ulteriori informazioni, vedere installare e configurare l'interfaccia CLI OCI.

  3. Installare l'applicazione sshpass nel caso in cui sia necessario utilizzarla per aggiornare le impostazioni del router Mikrotik privato.

    sudo apt-get install sshpass
    
  4. Creare il file .sh e copiare il seguente script nel file e renderlo eseguibile. Ricordarsi di modificare lo script con i dati, l'ID compartimento, l'ID DRG e il nome DNS che punta al CPE.

    Nota: nel terminale è possibile trovare il percorso oci che esegue questo comando:

    which oci
    

    Nota: l'ultima sezione dello script, dedicata al router MikroTik, è necessaria solo se si utilizza un router MikroTik. In caso contrario, è necessario implementare i comandi per aggiornare l'indirizzo IP dell'endpoint del tunnel OCI e il segreto condiviso nel router.

    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
    

    Nota: lo script può creare i tunnel, ma non può terminare quelli precedenti. A volte è necessario eseguire il login a OCI Console e terminare i vecchi tunnel VPN da sito a sito OCI inutilizzati o implementare questa funzione al suo interno.

  5. Aggiungere lo script all'indirizzo crontab se si desidera eseguirlo automaticamente.

    Crontab -e
    

    Nota: aggiungere la frequenza e il percorso dello script all'ultima riga del file crontab. Il comando seguente deve essere eseguito ogni 15 minuti.

    */15 * * * * YOUR_SCRIPT_PATH/VPN_update.sh
    

Alla prossima modifica dell'indirizzo IP CPE, il tunnel OCI verrà ricreato con il nuovo indirizzo IP e il segreto condiviso entro un massimo di 15 minuti.

Conferme

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.

Per la documentazione del prodotto, visita l'Oracle Help Center.