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 を接続できます。

VPNゲートウェイを使用したVPCの相互接続
VPNゲートウェイを使用したVPCの相互接続

以下の例では、次のように想定されています。

  1. 既に、VPC、サブネット、および仮想サーバーのインスタンスが作成済みです。 VPC リソースの作成について詳しくは、Virtual Private Cloud (VPC) の概要を参照してください。
  2. 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: Bearer $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: Bearer $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: Bearer $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: Bearer $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: Bearer $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: Bearer $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: Bearer $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 のサブネットの仮想サーバー・インスタンスにアクセスできます (逆方向も可能です)。