Observação:

Estabeleça uma VPN com o Oracle Cloud Infrastructure usando um Endereço IP Público Dinâmico

Introdução

O OCI (Oracle Cloud Infrastructure) não suporta o uso do DNS (Domain Name System) para configurar o CPE (Customer Premises Equipment) como ponto final do túnel de VPN. Este tutorial tem como objetivo permitir que pequenas empresas que não têm acesso a um endereço IP público estático usem o serviço IPSec mesmo com um endereço dinâmico. A estratégia envolve a implantação de um script capaz de gerar automaticamente um novo túnel do OCI sempre que o IP público do CPE (Customer Premises Equipment) for alterado.

Observação: Neste tutorial, as duas últimas linhas no arquivo de script shell são usadas para atualizar o endereço IP e o segredo compartilhado do novo ponto final criado no OCI em meu roteador (MikroTik). Dependendo do seu roteador, você precisa atualizá-lo para refletir esses dois valores.

Objetivo

Pré-requisitos

Configure uma VPN com o Oracle Cloud Infrastructure

  1. Para obter uma conexão VPN IPSec estável com o OCI para uma atualização de endereço IP CPE, configure um registro DNS atualizado dinamicamente. Há vários provedores de DNS públicos que suportam esse recurso. Selecione seu favorito e configure-o. (Exemplo: Cloudns.net)

    Depois de ter registrado e configurado um registro DNS dinâmico público, você pode configurar sua VM linux.

  2. Depois que a VM do Linux estiver ativa e em execução, instale a CLI do OCI para operar na tenancy do OCI nessa máquina. Para obter mais informações, consulte instalar e configurar a CLI do OCI.

  3. Instale o aplicativo sshpass caso você precise usá-lo para atualizar suas configurações privadas do roteador Mikrotik.

    sudo apt-get install sshpass
    
  4. Crie o arquivo .sh, copie o script a seguir no arquivo e torne-o executável. Lembre-se de modificar o script com seus dados, o ID do compartimento, o ID do DRG e o nome do DNS que aponta para o seu CPE.

    Observação: Você pode encontrar o caminho do oci executando este comando em seu terminal:

    which oci
    

    Observação: A última seção do script, dedicada ao roteador MikroTik, só será necessária se você estiver usando um roteador MikroTik. Caso contrário, você terá que implementar os comandos para atualizar o endereço IP do ponto final do túnel do OCI e o segredo compartilhado no seu roteador.

    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
    

    Observação: o script pode criar os túneis, mas não pode encerrar os antigos. Às vezes, você precisa fazer log-in na Console do OCI e encerrar os túneis antigos não usados da VPN Site a Site do OCI ou implementar essa função nela.

  5. Adicione o script ao crontab se quiser executá-lo automaticamente.

    Crontab -e
    

    Observação: adicione a frequência e o caminho do script à última linha do crontab. O comando a seguir deve ser executado a cada 15 minutos.

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

Na próxima vez que seu endereço IP do CPE for alterado, o túnel do OCI será recriado com o novo endereço IP e o segredo compartilhado em um máximo de 15 minutos.

Confirmação

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.