Exemplo de API - Conectando dois VPCs usando VPN

O exemplo da API a seguir descreve como conectar dois VPCs criando um gateway VPN em cada VPC. Um gateway VPN pode conectar todas as sub-redes na zona na qual está implementado. Portanto, ter um gateway VPN em cada zona que você deseja interconectar faz com que as sub-redes em ambas as zonas atuem como se fossem uma única rede. Os endereços IP das sub-redes nos dois VPCs não devem se sobrepor.

É possível usar um gateway VPN para conectar dois VPCs. No entanto, recomenda-se usar o IBM Cloud Transit Gateway para conectividade entre VPCs. Para obter mais informações, consulte Introdução ao IBM Cloud Transit Gateway.

O diagrama a seguir mostra como interconectar três VPCs, o exemplo a seguir mostra como conectar apenas os dois primeiros. É possível repetir as etapas para conectar mais VPCs.

Interconexão de VPCs usando gateways de VPN
Interconexão de VPCs usando gateways de VPN

O exemplo a seguir assume que:

  1. Você já criou VPCs, sub-redes e instâncias de servidor virtual. Para obter mais informações sobre a criação de recursos da VPC, consulte Introdução à nuvem privada virtual (VPC).
  2. Você configurou seu ambiente de API e inicializou todas as variáveis necessárias.

Também é possível criar um gateway VPN e incluir conexões VPN usando a IU. Para obter instruções, consulte Criando um gateway VPN usando a IU.

Etapa 1. Criar um gateway VPN na primeira VPC

O gateway VPN é criado na zona que está associada à sub-rede selecionada. Para melhor desempenho, crie o gateway VPN em uma sub-rede sem quaisquer outros recursos da VPC para assegurar que IPs privados suficientes estejam disponíveis para o gateway. Um gateway de VPN precisa de 8 endereços IP privados para acomodar alta disponibilidade e upgrades contínuos.

O gateway VPN pode se conectar apenas a instâncias de servidor virtual na zona na qual está implementado. As instâncias em outras zonas não podem usar esse gateway VPN para se comunicar com a outra rede. Para a tolerância a falhas da zona, implemente um gateway VPN por zona.

Localize o ID de sub-rede usando o comando get subnet, em seguida, preencha a variável:

export SubnetId1=<your_subnet_id>

O comando a seguir implementa o gateway VPN no grupo de recursos 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'"
            }
        }'

Saída de amostra:

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

Salve o id do primeiro gateway VPN, por exemplo:

export gwid1=<your_vpngateway_id>

O status do gateway aparece como pending enquanto o gateway VPN está sendo criado e o status se torna available quando a criação é concluída. A criação pode demorar alguns minutos.

É possível verificar o status do gateway com o comando a seguir:

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

Salve o public_ip.address do primeiro gateway VPN, por exemplo:

export gwaddress1=<your_vpngateway_public_ip>

Etapa 2. Criar um gateway VPN na segunda VPC

Localize o ID de sub-rede da segunda VPC usando o comando get subnet, em seguida, preencha a variável:

export SubnetId2=<your_subnet_id>

O comando a seguir implementa o gateway VPN no grupo de recursos Default. Se a segunda VPC pertencer a uma região diferente, certifique-se de atualizar a variável vpc_api_endpoint. Consulte a lista de terminais de 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'"
            }
        }'

Saída de amostra:

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

Salve o id do segundo gateway VPN, por exemplo:

export gwid2=<your_vpngateway_id>

O status do gateway aparece como pending enquanto o gateway VPN está sendo criado e o status se torna available quando a criação é concluída. A criação pode demorar alguns minutos.

É possível verificar o status do gateway com o comando a seguir:

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

Salve o public_ip.address do segundo gateway VPN, por exemplo:

export gwaddress2=<your_vpngateway_public_ip>

Etapa 3. Criar uma conexão VPN do primeiro gateway VPN para o segundo gateway VPN

Ao criar a conexão para o gateway VPN do VPC 1, configure local_cidrs para as sub-redes no VPC 1 e configure peer_cidrs para as sub-redes no VPC 2. Separe vários CIDRs com vírgulas. Lembre-se de atualizar a variável vpc_api_endpoint de acordo com a região na qual o gateway VPN está.

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

Saída de amostra:

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

Etapa 4. Criar uma conexão VPN do segundo gateway VPN para o primeiro gateway VPN

Ao criar a conexão para o gateway VPN do VPC 2, configure local_cidrs para as sub-redes no VPC 2 e peer_cidrs para as sub-redes no VPC 1. Lembre-se de atualizar a variável vpc_api_endpoint de acordo com a região na qual o gateway VPN está.

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

Saída de amostra:

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

Etapa 5. Verificar a conectividade

É possível verificar o status da conexão VPN conforme a seguir:

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

Saída de amostra:

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

Depois que a conexão VPN for estabelecida, será possível acessar suas instâncias de servidor virtual por meio das sub-redes na VPC 1 para as na VPC 2 e vice-versa.