Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
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
- Crea un nuovo tunnel VPN da sito a sito Oracle Cloud Infrastructure con il nuovo indirizzo IP CPE aggiornato.
Prerequisiti
-
Record DNS aggiornato in modo dinamico che punta all'indirizzo IP CPE pubblico.
-
Una macchina virtuale (VM) Linux.
-
Installare
sshpass
nella VM Linux. In questo tutorial, questo verrà utilizzato per inviare comandi al router MikroTik. -
Installare e configurare l'interfaccia della riga di comando di Oracle Cloud Infrastructure (OCI CLI).
-
Generare una chiave API. Per ulteriori informazioni, vedere Come generare una chiave di firma API.
Imposta una VPN con Oracle Cloud Infrastructure
-
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.
-
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.
-
Installare l'applicazione
sshpass
nel caso in cui sia necessario utilizzarla per aggiornare le impostazioni del router Mikrotik privato.sudo apt-get install sshpass
-
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.
-
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.
Collegamenti correlati
Conferme
- Autore - Marco Santucci (Architetto EMEA Enterprise Cloud Solution)
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.
Establish a VPN with Oracle Cloud Infrastructure using a Dynamic Public IP Address
F96562-01
April 2024