API 예제 - VPN을 사용하여 두 개의 VPC 연결
다음 API 예제에서는 각각의 VPC에 VPN 게이트웨이를 작성하여 두 개의 VPC를 연결하는 방법을 설명합니다. VPN 게이트웨이는 배치되는 구역의 모든 서브넷에 연결할 수 있습니다. 따라서 상호 연결할 각 구역에 VPN 게이트웨이가 있으면 두 구역의 서브넷이 단일 네트워크인 것처럼 작동합니다. 두 개의 VPC에 있는 서브넷의 IP 주소가 겹쳐서는 안됩니다.
VPN 게이트웨이를 사용하여 두 VPC에 연결할 수 있습니다. 그러나 VPC-VPC 연결에는 IBM Cloud Transit Gateway를 사용하는 것이 좋습니다. 자세한 정보는 IBM Cloud Transit Gateway 시작하기를 참조하십시오.
다음 다이어그램은 세 개의 VPC가 상호 연결하는 방법을 보여줍니다. 다음 예에서는 처음 두 개의 VPC만 연결하는 방법을 보여줍니다. 단계를 반복하여 더 많은 VPC에 연결할 수 있습니다.
예에서는 다음과 같이 가정합니다.
- 이미 VPC, 서브넷 및 가상 서버 인스턴스를 작성했습니다. VPC 리소스 작성에 대한 자세한 정보는 VPC(Virtual Private Cloud) 시작하기를 참조하십시오.
- API 환경을 설정하고 필요한 모든 변수를 초기화했습니다.
UI를 사용하여 VPN 게이트웨이를 작성하고 VPN 연결을 추가할 수도 있습니다. 지시사항은 UI를 사용하여 VPN 게이트웨이 작성을 참조하십시오.
1단계. 첫 번째 VPC에 VPN 게이트웨이 작성
VPN 게이트웨이는 사용자가 선택한 서브넷과 연관된 구역에 작성됩니다. 최상의 성능을 위해 다른 VPC 리소스 없이 서브넷에 VPN 게이트웨이를 작성하여 게이트웨이에 사용 가능한 사설 IP가 충분한지 확인하십시오. 고가용성과 롤링 업그레이드를 수용하려면 VPN 게이트웨이에 8개의 사설 IP 주소가 필요합니다.
VPN 게이트웨이는 배치된 구역의 가상 서버 인스턴스에만 연결할 수 있습니다. 다른 구역의 인스턴스는 이 VPN 게이트웨이를 사용하여 다른 네트워크와 통신할 수 없습니다. 구역 결함 허용의 경우 구역별로 하나의 VPN 게이트웨이를 배치하십시오.
get subnet 명령을 사용하여 서브넷 ID를 찾은 후 변수를 채우십시오.
export SubnetId1=<your_subnet_id>
다음 명령으로 Default
리소스 그룹에 VPN 게이트웨이가 배치됩니다.
curl -X POST "$vpc_api_endpoint/v1/vpn_gateways?version=$api_version&generation=2" \
-H "Authorization: $iam_token" \
-d '{
"name": "vpn-gateway-1",
"subnet": {
"id": "'$SubnetId1'"
}
}'
샘플 출력:
{
"id": "0738-7fd72524-6e2d-49a6-b975-0071efccd89a",
"crn": "crn:v1:bluemix:public:is:us-south:a/a1234567:vpn:0738-7fd72524-6e2d-49a6-b975-0071efccd89a",
"name": "vpn-gateway-1",
"href": "https://us-south.iaas.cloud.ibm.com/v1/vpn_gateways/0738-7fd72524-6e2d-49a6-b975-0071efccd89a",
"created_at": "2018-07-06T19:19:28.694388Z",
"status": "pending",
"public_ip": {
"address": "169.61.161.167"
},
"subnet": {
"id": "0738-f45ee0be-cf3f-41ca-a279-23139110aa58",
"name": "subnet-1",
"href": "https://us-south.iaas.cloud.ibm.com/v1/subnets/0738-f45ee0be-cf3f-41ca-a279-23139110aa58"
},
"resource_group": {
"id": "d28a2jsiw1pl2g22q8462tyr321416z2",
"href": "https://resource-manager.cloud.ibm.com/v1/resource_groups/d28a2jsiw1pl2g22q8462tyr321416z2"
}
}
첫 번째 VPN 게이트웨이의 id
를 저장하십시오. 예를 들면, 다음과 같습니다.
export gwid1=<your_vpngateway_id>
VPN 게이트웨이를 작성하는 동안에는 게이트웨이 상태가 pending
으로 표시되며, 작성이 완료되면 상태가 available
로 변경됩니다. 작성하는 데 몇 분이 소요될 수 있습니다.
다음 명령을 사용하여 게이트웨이의 상태를 확인할 수 있습니다.
curl -X GET "$vpc_api_endpoint/v1/vpn_gateways/$gwid1?version=$api_version&generation=2" \
-H "Authorization: $iam_token"
첫 번째 VPN 게이트웨이의 public_ip.address
를 저장하십시오. 예를 들면, 다음과 같습니다.
export gwaddress1=<your_vpngateway_public_ip>
2단계. 두 번째 VPC에 VPN 게이트웨이 작성
get subnet 명령을 사용하여 두 번째 VPC의 서브넷 ID를 찾은 후 변수를 채우십시오.
export SubnetId2=<your_subnet_id>
다음 명령으로 Default
리소스 그룹에 VPN 게이트웨이가 배치됩니다. 두 번째 VPC가 다른 지역에 속하는 경우 vpc_api_endpoint
변수를 업데이트해야 합니다. API 엔드포인트의 목록을 참조하십시오.
curl -X POST "$vpc_api_endpoint/v1/vpn_gateways?version=$api_version&generation=2" \
-H "Authorization: $iam_token" \
-d '{
"name": "vpn-gateway-2",
"subnet": {
"id": "'$SubnetId2'"
}
}'
샘플 출력:
{
"id": "0738-f72559a3-2fac-4958-b937-54474e6a8a8d",
"crn": "crn:v1:bluemix:public:is:us-south:a/a1234567::vpn:0738-f72559a3-2fac-4958-b937-54474e6a8a8d",
"name": "vpn-gateway-2",
"href": "https://us-south.iaas.cloud.ibm.com/v1/vpn_gateways/0738-f72559a3-2fac-4958-b937-54474e6a8a8d",
"created_at": "2018-07-06T19:33:23.789675Z",
"status": "pending",
"public_ip": {
"address": "169.61.161.150"
},
"subnet": {
"id": "0738-f72c7f7c-0fa5-42d1-9bdc-9e0acad53cb4",
"name": "subnet-2",
"href": "https://us-south.iaas.cloud.ibm.com/v1/subnets/0738-f72c7f7c-0fa5-42d1-9bdc-9e0acad53cb4"
},
"resource_group": {
"id": "d28a2jsiw1pl2g22q8462tyr321416z2",
"href": "https://resource-manager.cloud.ibm.com/v1/resource_groups/d28a2jsiw1pl2g22q8462tyr321416z2"
}
}
두 번째 VPN 게이트웨이의 id
를 저장하십시오. 예를 들면, 다음과 같습니다.
export gwid2=<your_vpngateway_id>
VPN 게이트웨이를 작성하는 동안에는 게이트웨이 상태가 pending
으로 표시되며, 작성이 완료되면 상태가 available
로 변경됩니다. 작성하는 데 몇 분이 소요될 수 있습니다.
다음 명령을 사용하여 게이트웨이의 상태를 확인할 수 있습니다.
curl -X GET "$vpc_api_endpoint/v1/vpn_gateways/$gwid2?version=$api_version&generation=2" \
-H "Authorization: $iam_token"
두 번째 VPN 게이트웨이의 public_ip.address
를 저장하십시오. 예를 들면, 다음과 같습니다.
export gwaddress2=<your_vpngateway_public_ip>
3단계. 첫 번째 VPN 게이트웨이에서 두 번째 VPN 게이트웨이로의 VPN 연결 작성
VPC 1의 VPN 게이트웨이에 대한 연결 작성 시 local_cidrs
을(를) VPC 1의 서브넷으로 설정하고 peer_cidrs
을(를) VPC 2의 서브넷으로 설정하십시오. 복수의 CIDR은 쉼표로 구분하십시오. VPN 게이트웨이가 위치하는 지역에 따라 vpc_api_endpoint
변수를 업데이트해야 합니다.
export Vpc1Subnets=<your_vpc1_subnets>
export Vpc2Subnets=<your_vpc2_subnets>
curl -X POST "$vpc_api_endpoint/v1/vpn_gateways/$gwid1/connections?version=$api_version&generation=2" \
-H "Authorization: $iam_token" \
-d '{
"name": "vpn-connection-to-vpn-gateway-2",
"peer_address": "'$gwaddress2'",
"psk": "VPNDemoPassword",
"local_cidrs": [ "'$Vpc1Subnets'" ],
"peer_cidrs": [ "'$Vpc2Subnets'" ]
}'
샘플 출력:
{
"id": "0738-a252d380-0784-45ff-8fc0-c2b58e446b4d",
"name": "vpn-connection-to-vpn-gateway-2",
"href": "https://us-south.iaas.cloud.ibm.com/v1/vpn_gateways/0738-7fd72524-6e2d-49a6-b975-0071efccd89a/connections/0738-a252d380-0784-45ff-8fc0-c2b58e446b4d",
"local_cidrs": [
"192.168.100.0/24"
],
"peer_cidrs": [
"192.168.0.0/24"
],
"peer_address": "169.61.161.150",
"admin_state_up": true,
"psk": "VPNDemoPassword",
"dead_peer_detection": {
"action": "none",
"interval": 30,
"timeout": 120
},
"created_at": "2018-07-06T19:50:49.252072Z",
"route_mode": "policy",
"authentication_mode": "psk",
"status": "down"
}
4단계. 두 번째 VPN 게이트웨이에서 첫 번째 VPN 게이트웨이로의 VPN 연결 작성
VPC 2의 VPN 게이트웨이에 대한 연결 작성 시 local_cidrs
을(를) VPC 2의 서브넷으로 설정하고 peer_cidrs
을(를) VPC 1의 서브넷으로 설정하십시오. VPN 게이트웨이가 위치하는 지역에 따라 vpc_api_endpoint
변수를 업데이트해야 합니다.
curl -X POST "$vpc_api_endpoint/v1/vpn_gateways/$gwid2/connections?version=$api_version&generation=2" \
-H "Authorization: $iam_token" \
-d '{
"name": "vpn-connection-to-vpn-gateway-1",
"peer_address": "'$gwaddress1'",
"psk": "VPNDemoPassword",
"local_cidrs": [ "'$Vpc2Subnets'" ],
"peer_cidrs": [ "'$Vpc1Subnets'" ]
}'
샘플 출력:
{
"id": "0738-1d4dbacq-673d-2qed-hf68-858961739gf0",
"name": "vpn-connection-to-vpn-gateway-1",
"href": "https://us-south.iaas.cloud.ibm.com/v1/vpn_gateways/0738-f72559a3-2fac-4958-b937-54474e6a8a8d/connections/0738-1d4dbacq-673d-2qed-hf68-858961739gf0",
"local_cidrs": [
"192.168.100.0/24"
],
"peer_cidrs": [
"192.168.100.0/24"
],
"peer_address": "169.61.161.167",
"admin_state_up": true,
"psk": "VPNDemoPassword",
"dead_peer_detection": {
"action": "none",
"interval": 30,
"timeout": 120
},
"created_at": "2018-07-06T19:54:14.961597Z",
"route_mode": "policy",
"authentication_mode": "psk",
"status": "down"
}
5단계. 연결 검증
다음과 같이 VPN 연결의 상태를 확인할 수 있습니다.
curl -X GET "$vpc_api_endpoint/v1/vpn_gateways/$gwid1/connections?version=$api_version&generation=2" \
-H "Authorization: $iam_token"
샘플 출력:
{
"first": {
"href": "https://us-south.iaas.cloud.ibm.com/v1/vpn_gateways/0738-7fd72524-6e2d-49a6-b975-0071efccd89a/connections?limit=10"
},
"limit": 10,
"connections": [
{
"id": "0738-a252d380-0784-45ff-8fc0-c2b58e446b4d",
"name": "vpn-connection-to-vpn-gateway-2",
"href": "https://us-south.iaas.cloud.ibm.com/v1/vpn_gateways/0738-7fd72524-6e2d-49a6-b975-0071efccd89a/connections/0738-a252d380-0784-45ff-8fc0-c2b58e446b4d",
"local_cidrs": [
"192.168.100.0/24"
],
"peer_cidrs": [
"192.168.0.0/24"
],
"peer_address": "169.61.161.150",
"admin_state_up": true,
"psk": "VPNDemoPassword",
"dead_peer_detection": {
"action": "none",
"interval": 30,
"timeout": 120
},
"created_at": "2018-07-06T19:50:49.252072Z",
"route_mode": "policy",
"authentication_mode": "psk",
"status": "up"
}
]
}
VPN 연결이 설정된 후에는 VPC 1의 서브넷에서 VPC 2의 서브넷까지 가상 서버 인스턴스에 도달할 수 있으며 그 반대도 가능합니다.