IBM Cloud Docs
API の例 - VPN を使用して 2 つの VPC を接続する

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 の相互接続
図 1: 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: $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 のサブネットの仮想サーバー・インスタンスにアクセスできます (逆方向も可能です)。