Exemple d'API : connexion de deux VPC à l'aide d'un VPN

L'exemple d'API décrit la manière de connecter deux VPC en créant une passerelle VPN dans chaque VPC. Une passerelle VPN peut connecter tous les sous-réseaux de la zone dans laquelle elle est déployée. Par conséquent, si vous avez une passerelle VPN dans chaque zone à interconnecter, les sous-réseaux des deux zones agissent comme un même réseau. Les adresses IP des sous-réseaux dans les deux VPC ne doivent pas se chevaucher.

Vous pouvez utiliser une passerelle VPN pour connecter deux VPC. Toutefois, il est recommandé d'utiliser IBM Cloud Transit Gateway pour la connectivité entre VPC. Pour plus d'informations, voir Initiation à IBM Cloud Transit Gateway.

Le diagramme suivant illustre l'interconnexion de trois VPC ; l'exemple suivant vous montre comment ne connecter que les deux premiers. Vous pouvez répéter les étapes pour connecter d'autres VPC.

Interconnecter des VPC en utilisant des passerelles VPN
Interconnecter des VPC en utilisant des passerelles VPN

L'exemple suivant suppose que :

  1. Vous avez déjà créé des VPC, des sous-réseaux et des instances de serveur virtuel. Pour plus d'informations sur la création de ressources VPC, voir Initiation à Virtual Private Cloud (VPC).
  2. Vous avez configuré votre environnement d'API et initialisé toutes les variables requises.

Vous pouvez également créer une passerelle VPN et ajouter des connexions VPN à l'aide de l'interface utilisateur. Pour des instructions, voir Création d'une passerelle VPN à l'aide de l'interface utilisateur.

Etape 1. Créer une passerelle VPN dans le premier VPC

La passerelle VPN est créée dans la zone associée au sous-réseau que vous sélectionnez. Pour de meilleures performances, créez la passerelle VPN dans un sous-réseau sans aucune autre ressource VPC pour vous assurer qu'il y a suffisamment d'adresses IP privées disponibles pour la passerelle. Une passerelle VPN a besoin de 8 adresses IP privées pour être en mesure de satisfaire aux exigences de la haute disponibilité et d'accueillir les mises à niveau en continu.

La passerelle VPN ne peut se connecter qu'aux instances de serveur virtuel de la zone dans laquelle elle est déployée. Les instances des autres zones ne peuvent pas utiliser cette passerelle VPN pour communiquer avec l'autre réseau. Pour assurer la tolérance aux pannes des zones, vous devez déployer une passerelle VPN par zone.

Recherchez l'ID sous-réseau à l'aide de la commande get subnet, puis renseignez la variable :

export SubnetId1=<your_subnet_id>

La commande suivante déploie la passerelle VPN dans le groupe de ressources 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'"
            }
        }'

Exemple de sortie :

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

Sauvegardez l'ID (id) de la première passerelle VPN. Par exemple :

export gwid1=<your_vpngateway_id>

Le statut de la passerelle apparaît comme pending pendant que la passerelle VPN est en cours de création et il prend la valeur available quand la création est terminée. La création peut prendre quelques minutes.

Vous pouvez vérifier le statut de la passerelle à l'aide de la commande suivante :

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

Sauvegardez l'ID (public_ip.address) de la première passerelle VPN. Par exemple :

export gwaddress1=<your_vpngateway_public_ip>

Étape 2. Création d'une passerelle VPN dans le deuxième VPC

Recherchez l'ID sous-réseau du deuxième VPC à l'aide de la commande get subnet, puis renseignez la variable :

export SubnetId2=<your_subnet_id>

La commande suivante déploie la passerelle VPN dans le groupe de ressources Default. Si le deuxième VPC appartient à une autre région, veillez à mettre à jour la variable vpc_api_endpoint. Reportez-vous à la liste des points d'extrémité d'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'"
            }
        }'

Exemple de sortie :

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

Sauvegardez l'ID (id) de la deuxième passerelle VPN. Par exemple :

export gwid2=<your_vpngateway_id>

Le statut de la passerelle apparaît comme pending pendant que la passerelle VPN est en cours de création et il prend la valeur available quand la création est terminée. La création peut prendre quelques minutes.

Vous pouvez vérifier le statut de la passerelle à l'aide de la commande suivante :

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

Sauvegardez l'ID (public_ip.address) de la deuxième passerelle VPN. Par exemple :

export gwaddress2=<your_vpngateway_public_ip>

Étape 3. Créer une connexion VPN à partir de la première passerelle VPN vers la deuxième passerelle VPN

Quand vous créez la connexion pour la passerelle VPN de VPC 1, définissez local_cidrs sur les sous-réseaux de VPC 1 et définissez peer_cidrs sur les sous-réseaux de VPC 2. Séparez les CIDR par une virgule. N'oubliez pas de mettre à jour la variable vpc_api_endpoint en fonction de la région de la passerelle VPN.

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

Exemple de sortie :

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

Étape 4. Créer une connexion VPN à partir de la deuxième passerelle VPN vers la première passerelle VPN

Quand vous créez la connexion pour la passerelle VPN de VPC 2, définissez local_cidrs sur les sous-réseaux de VPC 2 et définissez peer_cidrs sur les sous-réseaux de VPC 1. N'oubliez pas de mettre à jour la variable vpc_api_endpoint en fonction de la région de la passerelle VPN.

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

Exemple de sortie :

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

Étape 5. Vérifier la connectivité

Vous pouvez vérifier le statut de la connexion VPN comme suit :

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

Exemple de sortie :

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

Une fois que la connexion VPN est établie, vous pouvez accéder à vos instances de serveur virtuel des sous-réseaux de VPC 1 à ceux de VPC 2, et vice versa.