주:
- 이 사용지침서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 마칠 때는 이러한 값을 클라우드 환경과 관련된 값으로 대체하십시오.
동적 공용 IP 주소를 사용하여 Oracle Cloud Infrastructure와 VPN을 설정합니다.
소개
OCI(Oracle Cloud Infrastructure)는 CPE(고객 구내 장비)를 VPN 터널 엔드포인트로 구성하기 위한 DNS(도메인 이름 시스템) 사용을 지원하지 않습니다. 이 자습서에서는 정적 공용 IP 주소에 액세스할 수 없는 중소기업이 동적 주소에서도 IPSec 서비스를 사용할 수 있도록 하는 것을 목표로 합니다. 이 전략은 CPE(Customer Premises Equipment)의 공용 IP가 변경될 때마다 새 OCI 터널을 자동으로 생성할 수 있는 스크립트를 배포하는 것입니다.
주: 이 자습서에서는 셸 스크립트 파일의 마지막 두 행이 내 라우터(MikroTik) 내 OCI에서 생성된 새 끝점의 IP 주소 및 공유 암호를 업데이트하는 데 사용됩니다. 라우터에 따라 이 두 값을 반영하도록 업데이트해야 합니다.
목표
- 새 업데이트된 CPE IP 주소로 새 Oracle Cloud Infrastructure 사이트 간 VPN 터널을 생성합니다.
필요 조건
-
공용 CPE IP 주소를 가리키는 동적으로 업데이트된 DNS 레코드입니다.
-
Linux VM(가상 시스템)입니다.
-
Linux VM에
sshpass
를 설치합니다. 이 자습서에서는 MikroTik 라우터로 명령을 전송하는 데 사용됩니다. -
Oracle Cloud Infrastructure 명령행 인터페이스(OCI CLI)를 설치 및 구성합니다.
-
API 키를 생성합니다. 자세한 내용은 API 서명 키를 생성하는 방법을 참조하십시오.
Oracle Cloud Infrastructure로 VPN 설정
-
CPE IP 주소 업데이트를 위해 OCI와의 안정적인 VPN IPSec 연결을 달성하려면 동적으로 업데이트된 DNS 레코드를 설정해야 합니다. 이 기능을 지원하는 여러 공용 DNS 공급자가 있습니다. 즐겨찾기를 선택하고 구성합니다. (예: Cloudns.net)
공용 동적 DNS 레코드를 등록 및 구성한 후에는 Linux VM을 설정할 수 있습니다.
-
Linux VM이 실행되고 나면 OCI CLI를 설치하여 이 시스템의 OCI 테넌시에서 작동합니다. 자세한 내용은 OCI CLI 설치 및 구성을 참조하십시오.
-
개인 Mikrotik 라우터 설정을 업데이트하는 데 사용해야하는 경우
sshpass
응용 프로그램을 설치하십시오.sudo apt-get install sshpass
-
.sh
파일을 만들고 다음 스크립트를 파일에 복사하여 실행 가능하도록 만듭니다. CPE를 가리키는 데이터, 구획 ID, DRG ID 및 DNS 이름이 포함된 스크립트를 수정해야 합니다.주: 이 명령을 실행하는 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 터널을 종료하거나 이 기능을 구현해야 합니다.
-
스크립트를 자동으로 실행하려면
crontab
에 추가합니다.Crontab -e
주: 빈도 및 스크립트 경로를
crontab
의 마지막 행에 추가합니다. 다음 명령은 15분마다 실행됩니다.*/15 * * * * YOUR_SCRIPT_PATH/VPN_update.sh
다음에 CPE IP 주소가 변경되면 최대 15분 이내에 새 IP 주소 및 공유 암호로 OCI 터널이 재생성됩니다.
관련 링크
확인
- 작성자 - Marco Santucci(EMEA Enterprise Cloud Solution Architect)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Establish a VPN with Oracle Cloud Infrastructure using a Dynamic Public IP Address
F96564-01
April 2024