Neste tutorial, pressupomos que você esteja familiarizado com os conceitos básicos de redes de nuvem privada virtual (VPC), protocolo de gateway de borda (BGP, na sigla em inglês), redes privadas virtuais (VPNs) e túneis de IPsec.
O Google Cloud oferece um serviço de VPN altamente disponível para conectar sua rede VPC a ambientes em execução fora do Google Cloud, como no local ou na AWS por meio de um Conexão VPN IPsec. A VPN de alta disponibilidade fornece um SLA de 99,99% de disponibilidade de serviço quando configurado com base nas práticas recomendadas do Google.
Informações gerais da arquitetura
A arquitetura descrita neste documento inclui os seguintes componentes:
- Cloud Router: um serviço do Google Cloud totalmente distribuído e gerenciado para fornecer roteamento dinâmico usando o BGP para suas redes VPC.
- Gateway de VPN de alta disponibilidade: um gateway de VPN gerenciado pelo Google em execução no Google Cloud. Cada gateway de VPN de alta disponibilidade é um recurso regional que tem duas interfaces, cada uma com os próprios endereços IP externos: interface 0 e 1.
- Túneis de VPN: conexões do gateway de VPN de alta disponibilidade para o gateway de VPN de peering na AWS por meio do qual o tráfego criptografado passa.
- Gateway de VPN de peering: dois endpoints de VPN site a site da AWS, que podem ser de um gateway particular virtual da AWS ou de um gateway de trânsito da AWS.
Cada uma das conexões de gateway de VPN de peering vem com dois túneis pré-configurados para apontar para um único gateway de cliente, que, neste caso, é uma interface de VPN de alta disponibilidade do Google Cloud. Com essa configuração, o número mínimo de túneis para atender ao SLA de disponibilidade de serviço de 99,99% é quatro.
As opções de roteamento e a largura de banda combinada nos túneis de VPN variam de acordo com a opção VPN site a site usada no AWS:
Gateway de transporte público: se você criar o gateway de transporte público da AWS sem a preferência do BGP, o ECMP distribuirá o tráfego igualmente entre túneis ativos.
Para usar a conectividade VPN em várias redes de nuvem privada virtual do Google, consulte as práticas recomendadas para criar um sistema hub e spoke no Google Cloud.
Para mais informações sobre os gateways de transporte público da AWS, consulte a documentação da nuvem privada virtual da Amazon.
Gateway particular virtual: se você usar um gateway particular virtual da AWS, apenas um túnel em todas as conexões no gateway será selecionado. Para usar mais de um túnel, use um gateway de trânsito da AWS para que o ECMP esteja disponível.
Para detalhes sobre a prioridade da rota de VPN com a AWS, consulte a documentação de opções de roteamento VPN do site para site da AWS.
Para mais informações sobre gateways privados virtuais da AWS, consulte Documentação do túnel VPN site a site da AWS.
O diagrama a seguir mostra a arquitetura.
Objetivos
- Crie uma rede VPC no Google Cloud.
- Crie um gateway de VPN de alta disponibilidade e o Cloud Router no Google Cloud.
- Crie gateways de clientes na AWS.
- Crie uma conexão VPN com roteamento dinâmico na AWS.
- Crie um gateway de VPN externo e túneis de VPN no Google Cloud.
- Verifique e teste a conexão VPN entre as redes VPC no Google Cloud e na AWS.
Exemplo de módulo do Terraform
É possível usar o módulo gcp-to-aws-ha-vpn-terraform-module
para provisionar a VPN de alta disponibilidade entre o Google Cloud e a AWS.
Custos
Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:
Para ver uma estimativa dos custos dos componentes do Google Cloud, use a calculadora de preços do Google Cloud.
Neste tutorial, há componentes faturáveis do Amazon Web Services, incluindo:
- Gateway da AWS Transit
- VPN site a site da AWS
Para ter uma estimativa dos custos dos componentes da AWS, use a calculadora de preços dessa solução.
Antes de começar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, activate Cloud Shell.
-
Verifique se você tem os papéis administrativos necessários para configurar os componentes de rede:
- Administrador de rede:
compute.networkAdmin
- Administrador de segurança:
compute.securityAdmin
- Administrador do Compute:
compute.admin
Para mais informações sobre os objetivos desses papéis, consulte Papéis do IAM para funções de jobs relacionados a redes.
- Administrador de rede:
Criar o gateway de VPN de alta disponibilidade e o Cloud Router no Google Cloud
Nesta seção, você cria uma rede VPC, um gateway de VPN de alta disponibilidade e um Cloud Router no Google Cloud.
No Cloud Shell, verifique se você está trabalhando no projeto do Google Cloud criado ou selecionado:
gcloud config set project YOUR_PROJECT_ID export PROJECT_ID=`gcloud config list --format="value(core.project)"`
Substitua
YOUR_PROJECT_ID
pelo ID do projeto do Google Cloud.Crie uma rede VPC personalizada com uma única sub-rede:
gcloud compute networks create NETWORK \ --subnet-mode SUBNET_MODE \ --bgp-routing-mode BGP_ROUTING_MODE
Substitua:
NETWORK
: o nome da redeSUBNET_MODE
: o modo de sub-redeBGP_ROUTING_MODE
: o modo de roteamento do BGP
O comando será semelhante ao seguinte exemplo:
gcloud compute networks create gc-vpc \ --subnet-mode custom \ --bgp-routing-mode global
Crie uma sub-rede para hospedar as VMs de teste:
gcloud compute networks subnets create SUBNET_NAME \ --network NETWORK \ --region SUBNET_REGION \ --range IP_ADDRESS_RANGE
Substitua:
SUBNET_NAME
: o nome da sub-redeSUBNET_REGION
: a região em que a sub-rede será criada.IP_ADDRESS_RANGE
: o intervalo de endereços IP da sub-rede
Os comandos serão semelhantes a este exemplo:
gcloud compute networks subnets create subnet-east4 \ --network gc-vpc \ --region us-east4 \ --range 10.1.1.0/24
Crie o gateway de VPN de alta disponibilidade:
gcloud compute vpn-gateways create HA_VPN_GATEWAY_NAME \ --network NETWORK \ --region REGION
Substitua
HA_VPN_GATEWAY_NAME
pelo nome do gateway de VPN de alta disponibilidade.Criar um Cloud Router
gcloud compute routers create ROUTER_NAME \ --region REGION \ --network NETWORK \ --asn GOOGLE_ASN \ --advertisement-mode custom \ --set-advertisement-groups all_subnets
Substitua:
ROUTER_NAME
: o nome do seu Cloud Router.GOOGLE_ASN
: o ASN particular (número de sistema autônomo) do Cloud Router que você está criando. Pode ser qualquer ASN privado no intervalo 64512-65534 ou 4200000000-4294967294 que você ainda não esteja usando como um ASN de mesmo nível na mesma região e rede.
O comando será semelhante ao seguinte exemplo:
gcloud compute routers create cloud-router \ --region us-east4 \ --network gc-vpc \ --asn 65534 \ --advertisement-mode custom \ --set-advertisement-groups all_subnets
Este procedimento cria um gateway de VPN com duas interfaces. Anote os endereços externos para usá-los ao configurar o ambiente na AWS.
Criar gateways e conexões VPN na AWS
Nesta seção, você criará gateways de clientes, um gateway de destino e conexões de VPN com roteamento dinâmico.
Você executa comandos da AWS usando a interface de linha de comando da AWS.
Crie dois gateways de clientes usando o seguinte comando da AWS:
aws ec2 create-customer-gateway --type ipsec.1 --public-ip INTERFACE_0_IP_ADDRESS --bgp-asn GOOGLE_ASN aws ec2 create-customer-gateway --type ipsec.1 --public-ip INTERFACE_1_IP_ADDRESS --bgp-asn GOOGLE_ASN
Substitua
INTERFACE_0_IP_ADDRESS
eINTERFACE_1_IP_ADDRESS
pelos endereços IP públicos da etapa final da seção anterior.Crie um gateway de destino e anexe-o à sua rede VPC.
O gateway de destino pode ser um gateway particular virtual ou um gateway de trânsito. Para mais informações, consulte Criar um gateway de destino.
Siga as instruções para um gateway particular virtual ou de gateway:
Gateway particular virtual
Crie um gateway particular virtual com um ASN específico do AWS:
aws ec2 create-vpn-gateway --type ipsec.1 --amazon-side-asn AWS_SIDE_ASN
Substitua
AWS_SIDE_ASN
pelo ASN do lado da AWS.Esse comando será semelhante ao exemplo a seguir:
aws ec2 create-vpn-gateway --type ipsec.1 --amazon-side-asn 65001
Anexe o gateway particular virtual à rede VPC:
aws ec2 attach-vpn-gateway --vpn-gateway-id VPN_GATEWAY_ID --vpc-id VPC_ID
Gateway de transporte
Crie um gateway de transporte:
aws ec2 create-transit-gateway --description TRANSIT_GATEWAY_DESCRIPTION \ --options=AmazonSideAsn=65001,AutoAcceptSharedAttachments=enable,DefaultRouteTableAssociation=enable,DefaultRouteTablePropagation=enable,VpnEcmpSupport=enable,DnsSupport=enable
Substitua
TRANSIT_GATEWAY_DESCRIPTION
por uma descrição do gateway de transporte público.Anexe a rede VPC ao gateway de trânsito:
aws ec2 create-transit-gateway-vpc-attachment \ --transit-gateway-id TRANSIT_GATEWAY_ID \ --vpc-id VPC_ID \ --subnet-id SUBNET_ID
Crie uma conexão VPN com roteamento dinâmico.
O método para criar uma conexão VPN com roteamento dinâmico é diferente se o gateway de destino é um gateway privado virtual ou um gateway de trânsito. Para mais informações, consulte Criar uma conexão VPN site a site.
Siga as instruções para um gateway particular virtual ou de gateway:
Gateway particular virtual
Crie uma conexão VPN com roteamento dinâmico entre o gateway particular virtual e os gateways do cliente e aplique tags à conexão da VPN:
aws ec2 create-vpn-connection \ --type ipsec.1 \ --customer-gateway-id CUSTOMER_GATEWAY_1 \ --vpn-gateway-id VPN_GATEWAY_ID \ --options TunnelOptions='[{TunnelInsideCidr=AWS_T1_IP,PreSharedKey=SHARED_SECRET_1},{TunnelInsideCidr=AWS_T2_IP,PreSharedKey=SHARED_SECRET_2}]' aws ec2 create-vpn-connection \ --type ipsec.1 \ --customer-gateway-id CUSTOMER_GATEWAY_2 \ --vpn-gateway-id VPN_GATEWAY_ID \ --options TunnelOptions='[{TunnelInsideCidr=AWS_T3_IP,PreSharedKey=SHARED_SECRET_3},{TunnelInsideCidr=AWS_T4_IP,PreSharedKey=SHARED_SECRET_4}]'
Gateway de transporte
Crie uma conexão VPN com roteamento dinâmico entre o gateway do transporte público e os gateways do cliente:
aws ec2 create-vpn-connection \ --type ipsec.1 \ --customer-gateway-id CUSTOMER_GATEWAY_1 \ --transit-gateway-id TRANSIT_GATEWAY_ID \ --options TunnelOptions='[{TunnelInsideCidr=AWS_T1_IP,PreSharedKey=SHARED_SECRET_1},{TunnelInsideCidr=AWS_T2_IP,PreSharedKey=SHARED_SECRET_2}]' aws ec2 create-vpn-connection \ --type ipsec.1 \ --customer-gateway-id CUSTOMER_GATEWAY_2 \ --transit-gateway-id TRANSIT_GATEWAY_ID \ --options TunnelOptions='[{TunnelInsideCidr=AWS_T3_IP,PreSharedKey=SHARED_SECRET_3},{TunnelInsideCidr=AWS_T4_IP,PreSharedKey=SHARED_SECRET_4}]'
Substitua:
CUSTOMER_GATEWAY_1
: gateway do Google Cloud VPN, interface 0CUSTOMER_GATEWAY_2
: gateway do Google Cloud VPN, interface 1AWS_T1_IP
: endereço IP interno do gateway virtual virtual para a conexão 1, túnel 1AWS_T2_IP
: endereço IP interno do gateway particular virtual da conexão 1, túnel 2AWS_T3_IP
: endereço IP interno do gateway particular virtual da conexão 2, túnel 1AWS_T4_IP
: endereço IP interno do gateway particular virtual para a conexão 2, túnel 2SHARED_SECRET_1
: chave pré-compartilhada para conexão 1, túnel 1SHARED_SECRET_2
: chave pré-compartilhada para conexão 1, túnel 2SHARED_SECRET_3
: chave pré-compartilhada para conexão 2, túnel 1SHARED_SECRET_4
: chave pré-compartilhada para conexão 2, túnel 2
A AWS reserva alguns intervalos CIDR. Portanto, não é possível usar valores nesses intervalos como dentro de endereços IP (
AWS_T1_IP
,AWS_T2_IP
,AWS_T3_IP
eAWS_T4_IP
). Para informações sobre o que o CIDR bloqueia nas reservas da AWS, consulte CIDR do IPv4 dentro do túnel.Esses comandos criam quatro túneis no Google Cloud.
Faça o download dos arquivos de configuração para as duas conexões VPN.
Nas etapas subsequentes, você usará valores dos arquivos de configuração para criar e configurar recursos no lado do Google Cloud.
Crie túneis de VPN e interfaces do Cloud Router no Google Cloud
Nesta seção, você usa as informações das conexões de VPN da AWS criadas na seção anterior para criar e configurar componentes no Google Cloud.
Ao configurar túneis VPN para a AWS, use o protocolo de criptografia IKEv2 e selecione menos conjuntos de transformação no lado da AWS. Por exemplo, selecione uma combinação de algoritmos de criptografia únicos de fase 1 e fase 2, algoritmos de integridade e números de grupos Diffie-Hellman (DH). Caso contrário, o túnel do Cloud VPN pode falhar em fazer o rekeying devido ao grande tamanho de payload da associação de segurança (SA) para os conjuntos de transformação padrão da AWS. Esse tamanho de payload grande resulta na fragmentação de IP de pacotes IKE no lado da AWS, o que não é compatível com o Cloud VPN. Para mais informações, consulte Opções de túnel para sua conexão VPN de site a site.
No Cloud Shell, crie um gateway de VPN externo com quatro interfaces para a AWS fora dos endereços IP:
gcloud compute external-vpn-gateways create PEER_GATEWAY_NAME --interfaces \ 0=AWS_GW_IP_1,1=AWS_GW_IP_2,2=AWS_GW_IP_3,3=AWS_GW_IP_4
Substitua:
AWS_GW_IP_1
: endereço IP externo para gateway particular virtual para conexão 1, túnel 1AWS_GW_IP_2
: endereço IP externo para gateway particular virtual para conexão 1, túnel 2AWS_GW_IP_3
: endereço IP externo para o gateway particular virtual na conexão 2, túnel 1AWS_GW_IP_4
: endereço IP externo para gateway particular virtual para conexão 2, túnel 2
Crie quatro túneis de VPN:
Túnel 1:
gcloud compute vpn-tunnels create tunnel-1 \ --peer-external-gateway PEER_GATEWAY_NAME \ --peer-external-gateway-interface 0 \ --region REGION \ --ike-version IKE_VERSION \ --shared-secret SHARED_SECRET_1 \ --router ROUTER_NAME \ --vpn-gateway HA_VPN_GATEWAY_NAME \ --interface 0
Túnel 2:
gcloud compute vpn-tunnels create tunnel-2 \ --peer-external-gateway PEER_GATEWAY_NAME \ --peer-external-gateway-interface 1 \ --region REGION \ --ike-version IKE_VERSION \ --shared-secret SHARED_SECRET_2 \ --router ROUTER_NAME \ --vpn-gateway HA_VPN_GATEWAY_NAME \ --interface 0
Túnel 3:
gcloud compute vpn-tunnels create tunnel-3 \ --peer-external-gateway PEER_GATEWAY_NAME \ --peer-external-gateway-interface 2 \ --region REGION \ --ike-version IKE_VERSION \ --shared-secret SHARED_SECRET_3 \ --router ROUTER_NAME \ --vpn-gateway HA_VPN_GATEWAY_NAME \ --interface 1
Túnel 4:
gcloud compute vpn-tunnels create tunnel-4 \ --peer-external-gateway PEER_GATEWAY_NAME \ --peer-external-gateway-interface 3 \ --region REGION \ --ike-version IKE_VERSION \ --shared-secret SHARED_SECRET_4 \ --router ROUTER_NAME \ --vpn-gateway HA_VPN_GATEWAY_NAME \ --interface 1
Crie quatro interfaces do Cloud Router.
Nos comandos a seguir, substitua cada marcador
GOOGLE_BGP_IP_TUNNEL
pelo endereço IP do túnel no lado do Google Cloud. Encontre os valores nos arquivos de configuração da VPN da AWS como o endereço do gateway de cliente para cada túnel. Cada um desses endereços precisa estar no intervalo CIDR/30
dentro do intervalo de rede169.254.0.0/16
.Interface 1 do Cloud Router:
gcloud compute routers add-interface ROUTER_NAME \ --interface-name int-1 \ --vpn-tunnel tunnel-1 \ --ip-address GOOGLE_BGP_IP_TUNNEL_1 \ --mask-length 30 \ --region REGION
Interface 2 do Cloud Router:
gcloud compute routers add-interface ROUTER_NAME \ --interface-name int-2 \ --vpn-tunnel tunnel-2 \ --ip-address GOOGLE_BGP_IP_TUNNEL_2 \ --mask-length 30 \ --region REGION
Interface 3 do Cloud Router:
gcloud compute routers add-interface ROUTER_NAME \ --interface-name int-3 \ --vpn-tunnel tunnel-3 \ --ip-address GOOGLE_BGP_IP_TUNNEL_3 \ --mask-length 30 \ --region REGION
Interface 4 do Cloud Router:
gcloud compute routers add-interface ROUTER_NAME \ --interface-name int-4 \ --vpn-tunnel tunnel-4 \ --ip-address GOOGLE_BGP_IP_TUNNEL_4 \ --mask-length 30 \ --region REGION
Adicione pares do BGP.
Nos comandos a seguir, substitua
PEER_ASN
pelo ASN da parte da AWS da sessão do BGP.Conexão da AWS 1, túnel 1
gcloud compute routers add-bgp-peer ROUTER_NAME \ --peer-name aws-conn1-tunn1 \ --peer-asn PEER_ASN \ --interface int-1 \ --peer-ip-address AWS_T1_IP \ --region REGION
Conexão da AWS 1, túnel 2
gcloud compute routers add-bgp-peer ROUTER_NAME \ --peer-name aws-conn1-tunn2 \ --peer-asn PEER_ASN \ --interface int-2 \ --peer-ip-address AWS_T2_IP \ --region REGION
Conexão 2 da AWS, túnel 1
gcloud compute routers add-bgp-peer ROUTER_NAME \ --peer-name aws-conn2-tunn1 \ --peer-asn PEER_ASN \ --interface int-3 \ --peer-ip-address AWS_T3_IP \ --region REGION
Conexão da AWS 2, túnel 2
gcloud compute routers add-bgp-peer ROUTER_NAME \ --peer-name aws-conn2-tunn2 \ --peer-asn PEER_ASN \ --interface int-4 \ --peer-ip-address AWS_T4_IP \ --region REGION
Verificar a configuração
No Cloud Shell, verifique o status do Cloud Router:
gcloud compute routers get-status ROUTER_NAME \ --region REGION \ --format='flattened(result.bgpPeerStatus[].name, result.bgpPeerStatus[].ipAddress, result.bgpPeerStatus[].peerIpAddress)'
O resultado será assim:
result.bgpPeerStatus[].peerIpAddress)' result.bgpPeerStatus[0].ipAddress: 169.254.171.18 result.bgpPeerStatus[0].name: aws-conn1-tunn1 result.bgpPeerStatus[0].peerIpAddress: 169.254.171.17 result.bgpPeerStatus[1].ipAddress: 169.254.156.154 result.bgpPeerStatus[1].name: aws-conn1-tunn2 result.bgpPeerStatus[1].peerIpAddress: 169.254.156.153 result.bgpPeerStatus[2].ipAddress: 169.254.123.38 result.bgpPeerStatus[2].name: aws-conn2-tunn1 result.bgpPeerStatus[2].peerIpAddress: 169.254.123.37 result.bgpPeerStatus[3].ipAddress: 169.254.48.186 result.bgpPeerStatus[3].name: aws-conn2-tunn2 result.bgpPeerStatus[3].peerIpAddress: 169.254.48.185
Liste todos os túneis:
gcloud compute vpn-tunnels list
O resultado será assim:
NAME REGION GATEWAY PEER_ADDRESS tunnel-1 us-east4 ha-vpn-gw 34.205.x.x tunnel-2 us-east4 ha-vpn-gw 52.203.x.x tunnel-3 us-east4 ha-vpn-gw 3.208.x.x tunnel-4 us-east4 ha-vpn-gw 52.204.x.x
Verifique o status do túnel:
gcloud compute vpn-tunnels describe tunnel-1 \ --region REGION \ --format='flattened(status,detailedStatus)'
O resultado será assim:
detailed_status: Tunnel is up and running. status: ESTABLISHED
Liste rotas dinâmicas aprendidas pelo Cloud Router:
gcloud compute routers get-status ROUTER_NAME \ --region REGION \ --format="flattened(result.bestRoutes)"
O resultado será assim:
result.bestRoutes[0].creationTimestamp: 2021-01-19T20:42:07.366-08:00 result.bestRoutes[0].destRange: 10.2.2.0/24 result.bestRoutes[0].kind: compute#route result.bestRoutes[0].nextHopIp: 169.254.171.17 result.bestRoutes[0].priority: 100 result.bestRoutes[1].creationTimestamp: 2021-01-19T20:42:07.366-08:00 result.bestRoutes[1].destRange: 10.2.2.0/24 result.bestRoutes[1].kind: compute#route result.bestRoutes[1].nextHopIp: 169.254.156.153 result.bestRoutes[1].priority: 100 result.bestRoutes[2].creationTimestamp: 2021-01-19T20:56:26.588-08:00 result.bestRoutes[2].destRange: 10.2.2.0/24 result.bestRoutes[2].kind: compute#route result.bestRoutes[2].nextHopIp: 169.254.123.37 result.bestRoutes[2].priority: 100 result.bestRoutes[3].creationTimestamp: 2021-01-19T20:56:26.588-08:00 result.bestRoutes[3].destRange: 10.2.2.0/24 result.bestRoutes[3].kind: compute#route result.bestRoutes[3].nextHopIp: 169.254.48.185 result.bestRoutes[3].priority: 100
Testar a conectividade
Crie VMs de teste em cada lado dos túneis para testar solicitações de ping.
Verifique se você tem regras de firewall para permitir o tráfego ICMP.
Para instruções sobre como criar VMs no Compute Engine, consulte o guia de primeiros passos.
Para instruções sobre como criar VMs na AWS, consulte Iniciar uma máquina virtual.
Teste a conexão usando o comando
ping
.Avalie a largura de banda entre as máquinas de teste usando o iperf.
Lado do servidor:
iperf3 -s
Lado do cliente:
iperf3 -c SERVER_IP_ADDRESS -P NUMBER_OF_PARALLEL_SESSIONS
Limpar
Exclua os recursos do Google Cloud e do AWS que você criou durante este tutorial.
Excluir o projeto do Google Cloud
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Excluir recursos da AWS
A seguir
- Saiba mais sobre o Google Cloud VPN.
- Saiba mais sobre práticas recomendadas e arquiteturas de referência para o design da VPC.