Note:

Establecimiento de una VPN con Oracle Cloud Infrastructure mediante una dirección IP pública dinámica

Introducción

Oracle Cloud Infrastructure (OCI) no soporta el uso del sistema de nombres de dominio (DNS) para configurar el equipo local de cliente (CPE) como punto final de túnel VPN. Este tutorial tiene como objetivo permitir que las pequeñas empresas que no tienen acceso a una dirección IP pública estática utilicen el servicio IPSec incluso con una dirección dinámica. La estrategia implica desplegar un script capaz de generar automáticamente un nuevo túnel de OCI siempre que cambie la IP pública del equipo local de cliente (CPE).

Nota: En este tutorial, las dos últimas líneas del archivo de script de shell se utilizan para actualizar la dirección IP y el secreto compartido del nuevo punto final creado en OCI dentro de mi enrutador (MikroTik). Dependiendo de su router, necesita actualizarlo para reflejar estos dos valores.

Objetivo

Requisitos

Configuración de una VPN con Oracle Cloud Infrastructure

  1. Para lograr una conexión VPN IPSec estable con OCI para una actualización de dirección IP de CPE, debe configurar un registro DNS actualizado dinámicamente. Hay varios proveedores de DNS públicos que admiten esta función. Seleccione su favorito y configúrelo. (Ejemplo: Cloudns.net)

    Después de registrar y configurar un registro de DNS dinámico público, puede configurar la VM de linux.

  2. Una vez que la máquina virtual de Linux esté activa y en ejecución, instale la CLI de OCI para que funcione en su arrendamiento de OCI desde esta máquina. Para obtener más información, consulte instalación y configuración de la CLI de OCI.

  3. Instale la aplicación sshpass en caso de que necesite utilizarla para actualizar la configuración del enrutador Mikrotik privado.

    sudo apt-get install sshpass
    
  4. Cree el archivo .sh, copie el siguiente script en el archivo y hágalo ejecutable. Recuerde modificar el script con los datos, el ID de compartimento, el ID de DRG y el nombre de DNS que apunta a su CPE.

    Nota: Puede encontrar la ruta de oci que ejecuta este comando en el terminal:

    which oci
    

    Nota: La última sección de la secuencia de comandos, dedicada al enrutador MikroTik, solo es necesaria si utiliza un enrutador MikroTik. De lo contrario, debe implantar los comandos para actualizar la dirección IP del punto final del túnel de OCI y el secreto compartido en el enrutador.

    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: La secuencia de comandos puede crear los túneles pero no puede terminar los antiguos. En ocasiones, debe conectarse a la consola de OCI y terminar los túneles VPN de sitio a sitio antiguos de OCI no utilizados o implantar esta función en ella.

  5. Agregue el script a crontab si desea ejecutarlo automáticamente.

    Crontab -e
    

    Nota: Agregue la frecuencia y la ruta del script a la última línea de crontab. El siguiente comando se debe ejecutar cada 15 minutos.

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

La próxima vez que cambie su dirección IP de CPE, el túnel de OCI se volverá a crear con la nueva dirección IP y el secreto compartido en un máximo de 15 minutos.

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.