주:

동적 공용 IP 주소를 사용하여 Oracle Cloud Infrastructure와 VPN을 설정합니다.

소개

OCI(Oracle Cloud Infrastructure)는 CPE(고객 구내 장비)를 VPN 터널 엔드포인트로 구성하기 위한 DNS(도메인 이름 시스템) 사용을 지원하지 않습니다. 이 자습서에서는 정적 공용 IP 주소에 액세스할 수 없는 중소기업이 동적 주소에서도 IPSec 서비스를 사용할 수 있도록 하는 것을 목표로 합니다. 이 전략은 CPE(Customer Premises Equipment)의 공용 IP가 변경될 때마다 새 OCI 터널을 자동으로 생성할 수 있는 스크립트를 배포하는 것입니다.

주: 이 자습서에서는 셸 스크립트 파일의 마지막 두 행이 내 라우터(MikroTik) 내 OCI에서 생성된 새 끝점의 IP 주소 및 공유 암호를 업데이트하는 데 사용됩니다. 라우터에 따라 이 두 값을 반영하도록 업데이트해야 합니다.

목표

필요 조건

Oracle Cloud Infrastructure로 VPN 설정

  1. CPE IP 주소 업데이트를 위해 OCI와의 안정적인 VPN IPSec 연결을 달성하려면 동적으로 업데이트된 DNS 레코드를 설정해야 합니다. 이 기능을 지원하는 여러 공용 DNS 공급자가 있습니다. 즐겨찾기를 선택하고 구성합니다. (예: Cloudns.net)

    공용 동적 DNS 레코드를 등록 및 구성한 후에는 Linux VM을 설정할 수 있습니다.

  2. Linux VM이 실행되고 나면 OCI CLI를 설치하여 이 시스템의 OCI 테넌시에서 작동합니다. 자세한 내용은 OCI CLI 설치 및 구성을 참조하십시오.

  3. 개인 Mikrotik 라우터 설정을 업데이트하는 데 사용해야하는 경우 sshpass 응용 프로그램을 설치하십시오.

    sudo apt-get install sshpass
    
  4. .sh 파일을 만들고 다음 스크립트를 파일에 복사하여 실행 가능하도록 만듭니다. CPE를 가리키는 데이터, 구획 ID, DRG IDDNS 이름이 포함된 스크립트를 수정해야 합니다.

    주: 이 명령을 실행하는 oci 경로는 터미널에 있습니다.

    which oci
    

    주: MikroTik 라우터 전용 스크립트의 마지막 섹션은 MikroTik 라우터를 사용하는 경우에만 필요합니다. 그렇지 않으면 OCI 터널 끝점 IP 주소 및 공유 암호를 라우터로 업데이트하는 명령을 구현해야 합니다.

    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
    

    주: 이 스크립트는 터널을 생성할 수 있지만 이전 터널을 종료할 수는 없습니다. 때때로 OCI 콘솔에 로그인하여 사용되지 않은 이전 OCI 사이트 간 VPN 터널을 종료하거나 이 기능을 구현해야 합니다.

  5. 스크립트를 자동으로 실행하려면 crontab에 추가합니다.

    Crontab -e
    

    주: 빈도 및 스크립트 경로를 crontab의 마지막 행에 추가합니다. 다음 명령은 15분마다 실행됩니다.

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

다음에 CPE IP 주소가 변경되면 최대 15분 이내에 새 IP 주소 및 공유 암호로 OCI 터널이 재생성됩니다.

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.