API の例 - VPN を使用して 2 つの VPC を接続する
以下の API の例では、各 VPC に VPN ゲートウェイを作成して 2 つの VPC を接続する方法を取り上げています。 VPN ゲートウェイは、デプロイされているゾーン内のすべてのサブネットに接続できます。 そのため、相互接続するゾーンごとに 1 つの VPN ゲートウェイを設けると、両方のゾーンのサブネットが 1 つのネットワークであるかのように動作できます。 2 つの VPC のサブネットの IP アドレスがオーバーラップしていてはいけません。
1 つの VPN ゲートウェイを使用して 2 つの VPC に接続できます。 ただし、VPC 間接続には IBM Cloud Transit Gateway を使用することをお勧めします。 詳しくは、IBM Cloud Transit Gateway の概説を参照してください。
以下の図は、3 つの VPC を相互接続する方法を示しています。この例では、最初の 2 つの VPC のみを接続する方法を取り上げています。 この手順を繰り返すことにより、さらに多くの VPC を接続できます。
以下の例では、次のように想定されています。
- 既に、VPC、サブネット、および仮想サーバーのインスタンスが作成済みです。 VPC リソースの作成について詳しくは、Virtual Private Cloud (VPC) の概要を参照してください。
- API 環境をセットアップし、必要に応じてすべての変数を初期設定しました。
また、UI を使用して VPN ゲートウェイを作成し、VPN 接続を追加することもできます。 手順については、UI を使用した VPN ゲートウェイの作成を参照してください。
ステップ 1. 最初の VPC に VPN ゲートウェイを作成する
VPN ゲートウェイは、選択したサブネットに関連付けられているゾーン内に作成されます。 パフォーマンスを最大限に引き出すには、他の VPC リソースが存在しないサブネットに VPN ゲートウェイを作成して、十分な数のプライベート IP をゲートウェイで使用できるようにしてください。 高可用性を実現し、ローリング・アップグレードを可能にするには、VPN ゲートウェイに 8 個のプライベート IP アドレスが必要になります。
VPN ゲートウェイが接続できるのは、デプロイされているゾーンにある仮想サーバー・インスタンスのみです。 他のゾーンのインスタンスがこの VPN ゲートウェイを使用して、他のネットワークと通信することはできません。 ゾーン障害に対する耐障害性が必要な場合は、VPN ゲートウェイはゾーンごとに 1 つデプロイしてください。
get subnet コマンドを使用してサブネット ID を見つけ、変数に設定します。
export SubnetId1=<your_subnet_id>
以下のコマンドを使用すると、VPN ゲートウェイが Default
リソース・グループにデプロイされます。
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 2 番目の VPC に VPN ゲートウェイを作成する
get subnet コマンドを使用して 2 番目の VPC のサブネット ID を見つけ、変数に設定します。
export SubnetId2=<your_subnet_id>
以下のコマンドを使用すると、VPN ゲートウェイが Default
リソース・グループにデプロイされます。 2 番目の 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"
}
}
2 番目の 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"
2 番目の VPN ゲートウェイの public_ip.address
を保存します。例えば、次のようにします。
export gwaddress2=<your_vpngateway_public_ip>
ステップ 3。 最初の VPN ゲートウェイから 2 番目の 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: 2 番目の 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 からサブネット 2 の仮想サーバー・インスタンスから VPC 2 のサブネットの仮想サーバー・インスタンスにアクセスできます (逆方向も可能です)。