API-Beispiel - Zwei VPCs über VPN verbinden

Das folgende API-Beispiel beschreibt, wie zwei VPCs durch Erstellen eines VPN-Gateways in jeder VPC verbunden werden. Ein VPN-Gateway kann alle Teilnetze in der Zone verbinden, in der es bereitgestellt wurde. Daher bewirkt das Bereitstellen eines VPN-Gateways in jeder Zone, die Sie miteinander verbinden wollen, dass sich die Teilnetze in beiden Zonen praktisch wie nur ein Netz verhalten. Die IP-Adressen der Teilnetze in den beiden VPCs dürfen sich nicht überschneiden.

Sie können ein VPN-Gateway verwenden, um zwei VPCs zu verbinden. Es wird jedoch empfohlen, IBM Cloud Transit Gateway für die Konnektivität zwischen VPCs zu verwenden. Weitere Informationen hierzu finden Sie in der Einführung zu IBM Cloud Transit Gateway.

Das folgende Diagramm zeigt, wie drei VPCs miteinander verbunden werden. Im nachfolgenden Beispiel wird nur beschrieben, wie die beiden ersten VPCs verbunden werden. Sie können die Schritte wiederholen, um weitere VPCs zu verbinden.

Verbindung von VPCs mit Hilfe von VPN-Gateways
Verbindung von VPCs mit Hilfe von VPN-Gateways

Für das Beispiel wird Folgendes vorausgesetzt:

  1. Sie haben bereits VPCs, Teilnetze und virtuelle Serverinstanzen erstellt. Weitere Informationen zum Erstellen von VPC-Ressourcen finden Sie unter Einführung in Virtual Private Cloud (VPC).
  2. Sie haben Ihre API-Umgebung eingerichtet und alle erforderlichen Variablen initialisiert.

Sie können auch die Benutzerschnittstelle (UI) verwenden, um ein VPN-Gateway zu erstellen und VPN-Verbindungen hinzuzufügen. Entsprechende Anweisungen finden Sie unter VPN-Gateway über die Benutzerschnittstelle erstellen.

Schritt 1. VPN-Gateway in der ersten VPC erstellen

Das VPN-Gateway wird in der Zone erstellt, die dem von Ihnen ausgewählten Teilnetz zugeordnet ist. Im Hinblick auf optimale Leistung erstellen Sie das VPN-Gateway in einem Teilnetz ohne andere VPC-Ressourcen, um sicherzustellen, dass genügend private IP-Adressen für das Gateway verfügbar sind. Für ein VPN-Gateway sind 8 private IP-Adressen erforderlich, um Hochverfügbarkeit und schrittweise Upgrades zu ermöglichen.

Das VPN-Gateway kann Verbindungen nur zu virtuellen Serverinstanzen in der Zone herstellen, in der es bereitgestellt wurde. Instanzen in anderen Zonen können dieses VPN-Gateway nicht verwenden, um mit dem anderen Netz zu kommunizieren. Stellen Sie für die Fehlertoleranz in der Zone ein VPN-Gateway pro Zone bereit.

Ermitteln Sie die Teilnetz-ID mit dem Befehl get subnet und füllen Sie die Variable:

export SubnetId1=<your_subnet_id>

Durch den folgenden Befehl wird das VPN-Gateway in der Standardressourcengruppe (Default) bereitgestellt.

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'"
            }
        }'

Beispielausgabe:

{
    "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"
    }
}

Speichern Sie die ID (id) des ersten VPN-Gateways. Beispiel:

export gwid1=<your_vpngateway_id>

Der Gateway-Status pending wird angezeigt, während das VPN-Gateway erstellt wird. Nach der Erstellung wird der Status in available geändert. Die Erstellung kann einige Minuten dauern.

Den Status des Gateways können Sie mit dem folgenden Befehl prüften:

curl -X GET "$vpc_api_endpoint/v1/vpn_gateways/$gwid1?version=$api_version&generation=2" \
     -H "Authorization: Bearer $iam_token"

Speichern Sie die ID (public_ip.address) des ersten VPN-Gateways. Beispiel:

export gwaddress1=<your_vpngateway_public_ip>

Schritt 2. VPN-Gateway in der zweiten VPC erstellen

Ermitteln Sie die Teilnetz-ID der zweiten VPC mit dem Befehl get subnet und füllen Sie die Variable:

export SubnetId2=<your_subnet_id>

Durch den folgenden Befehl wird das VPN-Gateway in der Standardressourcengruppe (Default) bereitgestellt. Wenn die zweite VPC zu einer anderen Region gehört, stellen Sie sicher, dass Sie die Variable vpc_api_endpoint aktualisieren. Siehe Liste der API-Endpunkte.

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'"
            }
        }'

Beispielausgabe:

{
    "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"
    }
}

Speichern Sie die ID (id) des zweiten VPN-Gateways. Beispiel:

export gwid2=<your_vpngateway_id>

Der Gateway-Status pending wird angezeigt, während das VPN-Gateway erstellt wird. Nach der Erstellung wird der Status in available geändert. Die Erstellung kann einige Minuten dauern.

Den Status des Gateways können Sie mit dem folgenden Befehl prüften:

curl -X GET "$vpc_api_endpoint/v1/vpn_gateways/$gwid2?version=$api_version&generation=2" \
     -H "Authorization: Bearer $iam_token"

Speichern Sie die ID (public_ip.address) des zweiten VPN-Gateways. Beispiel:

export gwaddress2=<your_vpngateway_public_ip>

Schritt 3. VPN-Verbindung vom ersten VPN-Gateway zum zweiten VPN-Gateway erstellen

Wenn Sie die Verbindung für das VPN-Gateway von VPC 1 erstellen, setzen Sie local_cidrs auf die Teilnetze in VPC 1 und peer_cidrs auf die Teilnetze in VPC 2. Trennen Sie mehrere CIDRs durch Kommas. Beachten Sie, dass Sie abhängig von der Region, in der sich das VPN-Gateway befindet, die Variable vpc_api_endpoint aktualisieren müssen.

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'" ]
            }'

Beispielausgabe:

{
    "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"
}

Schritt 4. VPN-Verbindung vom zweiten VPN-Gateway zum ersten VPN-Gateway erstellen

Wenn Sie die Verbindung für das VPN-Gateway von VPC 2 erstellen, setzen Sie local_cidrs auf die Teilnetze auf VPC 2 und peer_cidrs auf die Teilnetze auf VPC 1. Beachten Sie, dass Sie abhängig von der Region, in der sich das VPN-Gateway befindet, die Variable vpc_api_endpoint aktualisieren müssen.

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'" ]
            }'

Beispielausgabe:

{
    "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"
}

Schritt 5. Konnektivität überprüfen

Den Status der VPN-Verbindung können Sie wie folgt überprüfen:

curl  -X GET "$vpc_api_endpoint/v1/vpn_gateways/$gwid1/connections?version=$api_version&generation=2" \
      -H "Authorization: Bearer $iam_token"

Beispielausgabe:

{
    "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"
        }
    ]
}

Wenn die VPN-Verbindung eingerichtet ist, können Sie Ihre virtuellen Serverinstanzen in den Teilnetzen in VPC 1 mit denjenigen in VPC 2 und umgekehrt verbinden.