1. Introdução
As rotas estáticas personalizadas influenciam o comportamento de roteamento padrão em uma VPC. As rotas personalizadas do IPv6 agora são compatíveis com novos atributos de próximo salto: next-hop-gateway, next-hop-instance e next-hop-address. Este codelab descreve como usar rotas personalizadas IPv6 com essas novas opções de próximo salto usando duas VPCs conectadas por uma instância de VM multi-NIC. Você também vai demonstrar a combinação de endereçamento ULA e GUA e fornecer acessibilidade da VPC ULA à Internet pública usando o novo recurso de rota personalizada.
O que você vai aprender
- Como criar uma rota personalizada IPv6 com um próximo salto de instância.
- Como criar uma rota personalizada IPv6 com um próximo salto de gateway.
- Como criar uma rota personalizada IPv6 com um próximo salto de next-hop-address.
O que é necessário
- Projeto do Google Cloud
2. Antes de começar
Atualizar o projeto para oferecer suporte ao codelab
Este codelab usa $variáveis para ajudar na implementação da configuração da gcloud no Cloud Shell.
No Cloud Shell, faça o seguinte:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export projectname=$(gcloud config list --format="value(core.project)")
Arquitetura geral do laboratório

Para demonstrar os dois tipos de próximos saltos de rota personalizada, você vai criar três VPCs: uma VPC de cliente que usa endereçamento GUA, uma VPC de servidor que usa endereçamento ULA e uma segunda VPC de servidor que usa endereçamento GUA.
Para que a VPC do cliente acesse o servidor ULA, use uma rota personalizada com next-hop-instance e next-hop-address apontando para uma instância de gateway multi-NIC. Para fornecer acesso ao servidor GUA (depois de excluir a rota padrão ::/0), use uma rota personalizada com next-hop-gateway apontando para o gateway de Internet padrão para fornecer roteamento pela Internet.
3. Configuração da VPC do cliente
Criar a VPC do cliente
No Cloud Shell, faça o seguinte:
gcloud compute networks create client-vpc \
--project=$projectname \
--subnet-mode=custom \
--mtu=1500 --bgp-routing-mode=regional
Criar a sub-rede do cliente
No Cloud Shell, faça o seguinte:
gcloud compute networks subnets create client-subnet \
--network=client-vpc \
--project=$projectname \
--range=192.168.1.0/24 \
--stack-type=IPV4_IPV6 \
--ipv6-access-type=external \
--region=us-central1
Registre a sub-rede GUA atribuída em uma variável de ambiente usando este comando:
export client_subnet=$(gcloud compute networks subnets \
describe client-subnet \
--project $projectname \
--format="value(externalIpv6Prefix)" \
--region us-central1)
Iniciar instância do cliente
No Cloud Shell, faça o seguinte:
gcloud compute instances create client-instance \
--subnet client-subnet \
--stack-type IPV4_IPV6 \
--zone us-central1-a \
--project=$projectname
Adicionar regra de firewall para o tráfego da VPC do cliente
No Cloud Shell, faça o seguinte:
gcloud compute firewall-rules create allow-gateway-client \
--direction=INGRESS --priority=1000 \
--network=client-vpc --action=ALLOW \
--rules=tcp --source-ranges=$client_subnet \
--project=$projectname
Adicionar uma regra de firewall para permitir o IAP na instância do cliente
No Cloud Shell, faça o seguinte:
gcloud compute firewall-rules create allow-iap-client \
--direction=INGRESS --priority=1000 \
--network=client-vpc --action=ALLOW \
--rules=tcp:22 --source-ranges=35.235.240.0/20 \
--project=$projectname
Confirmar o acesso SSH à instância do cliente
No Cloud Shell, faça login na instância do cliente:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Se tudo der certo, uma janela de terminal vai aparecer na instância do cliente. Saia da sessão SSH para continuar com o codelab.
4. Configuração da VPC do servidor ULA
Criar a VPC do servidor ULA
No Cloud Shell, faça o seguinte:
gcloud compute networks create server-vpc1 \
--project=$projectname \
--subnet-mode=custom --mtu=1500 \
--bgp-routing-mode=regional \
--enable-ula-internal-ipv6
Criar as sub-redes do servidor ULA
No Cloud Shell, faça o seguinte:
gcloud compute networks subnets create server-subnet1 \
--network=server-vpc1 \
--project=$projectname \
--range=192.168.0.0/24 \
--stack-type=IPV4_IPV6 \
--ipv6-access-type=internal \
--region=us-central1
Registre a sub-rede ULA atribuída em uma variável de ambiente usando este comando:
export server_subnet1=$(gcloud compute networks subnets \
describe server-subnet1 \
--project $projectname \
--format="value(internalIpv6Prefix)" \
--region us-central1)
Iniciar a VM do servidor com um endereço IPv6 interno de ULA
No Cloud Shell, faça o seguinte:
gcloud compute instances create server-instance1 \
--subnet server-subnet1 \
--stack-type IPV4_IPV6 \
--zone us-central1-a \
--project=$projectname
Adicione uma regra de firewall para permitir o acesso ao servidor pelo cliente
No Cloud Shell, faça o seguinte:
gcloud compute firewall-rules create allow-client-server1 \
--direction=INGRESS --priority=1000 \
--network=server-vpc1 --action=ALLOW \
--rules=tcp --source-ranges=$client_subnet \
--project=$projectname
Adicionar regra de firewall para permitir o IAP
No Cloud Shell, faça o seguinte:
gcloud compute firewall-rules create allow-iap-server1 \
--direction=INGRESS --priority=1000 \
--network=server-vpc1 --action=ALLOW \
--rules=tcp:22 \
--source-ranges=35.235.240.0/20 \
--project=$projectname
Instalar o Apache na instância do servidor ULA
No Cloud Shell, faça login na instância do cliente:
gcloud compute ssh server-instance1 \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
No shell da VM do servidor, execute o seguinte comando:
sudo apt update && sudo apt -y install apache2
Verificar se o Apache está em execução
sudo systemctl status apache2
Substituir a página da Web padrão
echo '<!doctype html><html><body><h1>Hello World! From Server1!</h1></body></html>' | sudo tee /var/www/html/index.html
Saia da sessão SSH para continuar com o codelab.
5. Configuração da VPC do servidor do GUA
Criar a VPC do servidor GUA
No Cloud Shell, faça o seguinte:
gcloud compute networks create server-vpc2 \
--project=$projectname \
--subnet-mode=custom --mtu=1500 \
--bgp-routing-mode=regional
Criar as sub-redes do servidor GUA
No Cloud Shell, faça o seguinte:
gcloud compute networks subnets create server-subnet2 \
--network=server-vpc2 \
--project=$projectname \
--range=192.168.0.0/24 \
--stack-type=IPV4_IPV6 \
--ipv6-access-type=external \
--region=us-central1
Registre a sub-rede GUA atribuída em uma variável de ambiente usando este comando:
export server_subnet2=$(gcloud compute networks subnets \
describe server-subnet2 \
--project $projectname \
--format="value(externalIpv6Prefix)" \
--region us-central1)
Iniciar uma VM de servidor com um endereço IPV6 GUA
No Cloud Shell, faça o seguinte:
gcloud compute instances create server-instance2 \
--subnet server-subnet2 \
--stack-type IPV4_IPV6 \
--zone us-central1-a \
--project=$projectname
Adicionar uma regra de firewall para permitir o acesso na sub-rede
No Cloud Shell, faça o seguinte:
gcloud compute firewall-rules create allow-client-server2 \
--direction=INGRESS \
--priority=1000 \
--network=server-vpc2 \
--action=ALLOW \
--rules=tcp --source-ranges=$client_subnet \
--project=$projectname
Adicionar regra de firewall para permitir o IAP
No Cloud Shell, faça o seguinte:
gcloud compute firewall-rules create allow-iap-server2 \
--direction=INGRESS \
--priority=1000 \
--network=server-vpc2 \
--action=ALLOW \
--rules=tcp:22 \
--source-ranges=35.235.240.0/20 \
--project=$projectname
Confirmar o acesso SSH à instância do servidor GUA e instalar o Apache
No Cloud Shell, faça login na instância do cliente:
gcloud compute ssh server-instance2 \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
No shell da VM do servidor, execute o seguinte comando:
sudo apt update && sudo apt -y install apache2
Verificar se o Apache está em execução
sudo systemctl status apache2
Substituir a página da Web padrão
echo '<!doctype html><html><body><h1>Hello World! From Server2!</h1></body></html>' | sudo tee /var/www/html/index.html
Saia da sessão SSH para continuar com o codelab.
6. Criar instância de gateway
Excluir a rota padrão da VPC do cliente
Em preparação para redirecionar o tráfego ULA v6 para a instância multi-NIC e desativar o roteamento de saída da Internet. Exclua a rota padrão ::/0 que aponta para o gateway de Internet padrão.
No Cloud Shell, faça o seguinte:
export client_defroutename=$(gcloud compute routes list \
--project $projectname \
--format='value(name)' \
--filter="network:client-vpc AND destRange~'::/0'")
gcloud compute routes delete $client_defroutename \
--project $projectname \
--quiet
Iniciar a VM multi-NIC do gateway
No Cloud Shell, faça o seguinte:
gcloud compute instances create gateway-instance \
--project=$projectname \
--zone=us-central1-a \
--network-interface=stack-type=IPV4_IPV6,subnet=client-subnet,no-address \
--network-interface=stack-type=IPV4_IPV6,subnet=server-subnet1,no-address \
--can-ip-forward
Configurar a instância do gateway
No Cloud Shell, faça login na instância de gateway. Pode levar alguns minutos para o SSH ser concluído enquanto a instância está sendo inicializada:
gcloud compute ssh gateway-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
No shell da VM de gateway, execute o comando a seguir para ativar o encaminhamento de IPv6 e continuar aceitando anúncios de roteador com o encaminhamento ativado (accept_ra = 2):
sudo sysctl -w net.ipv6.conf.ens4.accept_ra=2
sudo sysctl -w net.ipv6.conf.ens5.accept_ra=2
sudo sysctl -w net.ipv6.conf.ens4.accept_ra_defrtr=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1
Verificar a tabela de roteamento IPv6 na instância
ip -6 route show
Exemplo de saída mostrando rotas de sub-rede ULA e GUA, com a rota padrão apontando para a interface GUA.
::1 dev lo proto kernel metric 256 pref medium
2600:1900:4000:7a7f:0:1:: dev ens4 proto kernel metric 256 expires 83903sec pref medium
2600:1900:4000:7a7f::/65 via fe80::4001:c0ff:fea8:101 dev ens4 proto ra metric 1024 expires 88sec pref medium
fd20:3df:8d5c::1:0:0 dev ens5 proto kernel metric 256 expires 83904sec pref medium
fd20:3df:8d5c::/64 via fe80::4001:c0ff:fea8:1 dev ens5 proto ra metric 1024 expires 84sec pref medium
fe80::/64 dev ens5 proto kernel metric 256 pref medium
fe80::/64 dev ens4 proto kernel metric 256 pref medium
default via fe80::4001:c0ff:fea8:101 dev ens4 proto ra metric 1024 expires 88sec pref medium
Saia da sessão SSH para continuar com o codelab.
7. Crie e teste rotas para a instância de gateway (usando o nome da instância)
Nesta seção, você vai adicionar rotas às VPCs do cliente e do servidor usando o nome da instância de gateway como o próximo salto.
Anote os endereços do servidor
No Cloud Shell, faça o seguinte:
gcloud compute instances list \
--project $projectname \
--filter="name~server-instance" \
--format='value[separator=","](name,networkInterfaces[0].ipv6Address,networkInterfaces[0].ipv6AccessConfigs[0].externalIpv6)'
Isso vai gerar os nomes das instâncias de servidor e os prefixos IPv6. Exemplo de saída
server-instance1,fd20:3df:8d5c:0:0:0:0:0,
server-instance2,,2600:1900:4000:71fd:0:0:0:0
Anote os dois endereços, porque você os usará mais tarde em comandos curl da instância do cliente. Infelizmente, as variáveis de ambiente não podem ser usadas facilmente para armazenar esses dados, já que não são transferidas em sessões SSH.
Executar o comando curl do cliente para a instância do servidor ULA
Para conferir o comportamento antes de adicionar novas rotas. Execute um comando curl da instância do cliente para a server-instance1.
No Cloud Shell, faça login na instância do cliente:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Na instância do cliente, execute um curl usando o endereço ULA IPV6 da instância server1. O comando define um tempo limite curto de 5 segundos para evitar que o curl espere por muito tempo.
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Esse comando curl vai atingir o tempo limite porque a VPC do cliente ainda não tem uma rota para a VPC do servidor.
Vamos tentar corrigir isso. Saia da sessão SSH por enquanto.
Adicionar rota personalizada na VPC do cliente
Como a VPC do cliente não tem uma rota para o prefixo ULA. Vamos adicionar agora.
No Cloud Shell, faça o seguinte:
gcloud compute routes create client-to-server1-route \
--project=$projectname \
--destination-range=$server_subnet1 \
--network=client-vpc \
--next-hop-instance=gateway-instance \
--next-hop-instance-zone=us-central1-a
Acesse a instância do cliente por SSH:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Na instância do cliente, tente fazer o curl para a instância do servidor novamente. (o comando define um tempo limite curto de 5 segundos para evitar que o curl espere por muito tempo)
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Esse comando curl ainda vai atingir o tempo limite porque a VPC do server1 ainda não tem uma rota de volta para a VPC do cliente pela instância de gateway.
Saia da sessão SSH para continuar com o codelab.
Adicionar rota personalizada na VPC do servidor ULA
No Cloud Shell, faça o seguinte:
gcloud compute routes create server1-to-client-route \
--project=$projectname \
--destination-range=$client_subnet \
--network=server-vpc1 \
--next-hop-instance=gateway-instance \
--next-hop-instance-zone=us-central1-a
Acesse a instância do cliente por SSH:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Na instância do cliente, tente o curl para a instância do servidor mais uma vez.
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Esse comando curl agora é executado com êxito, mostrando que você tem capacidade de alcance de ponta a ponta da instância do cliente para a instância do servidor ULA. Essa conectividade só é possível agora com o uso de rotas personalizadas IPv6 com next-hop-instance como próximos saltos.
Exemplo de saída
<user id>@client-instance:~$ curl -m 5.0 -g -6 'http://[fd20:3df:8d5c:0:0:0:0:0]:80/'
<!doctype html><html><body><h1>Hello World! From Server1!</h1></body></html>
Saia da sessão SSH para continuar com o codelab.
8. Crie e teste rotas para a instância de gateway (usando o endereço da instância).
Nesta seção, você vai adicionar rotas às VPCs do cliente e do servidor usando o endereço ipv6 da instância de gateway como o próximo salto.
Excluir rotas anteriores
Vamos restaurar o ambiente para antes de adicionar rotas personalizadas excluindo as rotas personalizadas que usam o nome da instância.
No Cloud Shell, faça o seguinte:
gcloud compute routes delete client-to-server1-route --quiet --project=$projectname
gcloud compute routes delete server1-to-client-route --quiet --project=$projectname
Executar o comando curl do cliente para a instância do servidor ULA
Para confirmar se as rotas anteriores foram excluídas, execute um comando curl da instância do cliente para a instância do servidor 1.
No Cloud Shell, faça login na instância do cliente:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Na instância do cliente, execute um curl usando o endereço ULA IPV6 da instância server1. O comando define um tempo limite curto de 5 segundos para evitar que o curl espere por muito tempo.
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Esse comando curl vai atingir o tempo limite porque a VPC do cliente não tem mais uma rota para a VPC do servidor.
Receber endereços IPv6 da instância de gateway
Precisamos receber os endereços IPv6 da instância de gateway antes de escrever rotas que usam next-hop-address.
No Cloud Shell, faça o seguinte:
export gateway_ula_address=$(gcloud compute instances \
describe gateway-instance \
--project $projectname \
--format='value(networkInterfaces[1].ipv6Address)')
export gateway_gua_address=$(gcloud compute instances \
describe gateway-instance \
--project $projectname \
--format='value(networkInterfaces[0].ipv6AccessConfigs[0].externalIpv6)')
Adicionar rota personalizada na VPC do cliente
Agora podemos adicionar novamente a rota na VPC do cliente com o prefixo ULA, mas usando o endereço GUA do gateway como o próximo salto.
No Cloud Shell, faça o seguinte:
gcloud compute routes create client-to-server1-route \
--project=$projectname \
--destination-range=$server_subnet1 \
--network=client-vpc \
--next-hop-address=$gateway_gua_address
Acesse a instância do cliente por SSH:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Na instância do cliente, tente fazer o curl para a instância do servidor novamente.
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Como esperado, esse comando curl ainda atinge o tempo limite porque a VPC server1 ainda não tem uma rota de volta para a VPC do cliente pela instância de gateway.
Saia da sessão SSH para continuar com o codelab.
Adicionar rota personalizada na VPC do servidor ULA
No Cloud Shell, faça o seguinte:
gcloud compute routes create server1-to-client-route \
--project=$projectname \
--destination-range=$client_subnet \
--network=server-vpc1 \
--next-hop-address=$gateway_ula_address
Acesse a instância do cliente por SSH:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Na instância do cliente, tente o curl para a instância do servidor mais uma vez.
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Esse comando curl agora é executado com êxito, mostrando que você tem capacidade de alcance de ponta a ponta da instância do cliente para a instância do servidor ULA. Essa conectividade só é possível agora com o uso de rotas personalizadas IPv6 com next-hop-address como next-hops.
Exemplo de saída
<user id>@client-instance:~$ curl -m 5.0 -g -6 'http://[fd20:3df:8d5c:0:0:0:0:0]:80/'
<!doctype html><html><body><h1>Hello World! From Server1!</h1></body></html>
Saia da sessão SSH para continuar com o codelab.
9. Criar e testar a rota para o gateway da Internet
Enquanto você tem este laboratório configurado, vamos testar também a funcionalidade da nova propriedade de próximo salto: next-hop-gateway.
Executar o comando curl do cliente para a instância do servidor GUA
Para conferir o comportamento antes de adicionar novas rotas. Execute um comando curl da instância do cliente para o endereço IP do server2.
No Cloud Shell, faça login na instância do cliente:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Na instância do cliente, execute um curl no endpoint IPv6.
curl -m 5.0 -g -6 'http://[GUA-ipv6-address-of-server2]:80/'
Esse comando curl vai atingir o tempo limite porque a VPC do cliente tem apenas a própria rota de sub-rede e uma rota para a VPC do server1. Para acessar o intervalo GUA da VPC do server2, use o gateway de Internet padrão por uma rota personalizada.
Saia da sessão SSH para continuar com o codelab.
Adicionar rota de gateway personalizada na VPC do cliente
No Cloud Shell, faça o seguinte:
gcloud compute routes create client-to-server2-route \
--project=$projectname \
--destination-range=$server_subnet2 \
--network=client-vpc \
--next-hop-gateway=default-internet-gateway
Acesse a instância do cliente por SSH:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Na instância do cliente, repita o mesmo curl
curl -m 5.0 -g -6 'http://[GUA-ipv6-address-of-server2]:80/'
Agora, o comando curl vai retornar a mensagem de hello personalizada, indicando que você conseguiu acessar o endereço IPv6 do outro servidor pelo gateway de Internet padrão.
Exemplo de resposta:
<user id>@client-instance:~$ curl -m 5.0 -g -6 'http://[2600:1900:4000:71fd:0:0:0:0]:80/'
<!doctype html><html><body><h1>Hello World! From Server2!</h1></body></html>
Saia da sessão SSH para concluir a seção de limpeza do laboratório.
10. Limpar
Limpar instâncias
No Cloud Shell, faça o seguinte:
gcloud compute instances delete client-instance --zone us-central1-a --quiet --project=$projectname
gcloud compute instances delete server-instance1 --zone us-central1-a --quiet --project=$projectname
gcloud compute instances delete server-instance2 --zone us-central1-a --quiet --project=$projectname
gcloud compute instances delete gateway-instance --zone us-central1-a --quiet --project=$projectname
Limpar sub-redes
No Cloud Shell, faça o seguinte:
gcloud compute networks subnets delete client-subnet --region=us-central1 --quiet --project=$projectname
gcloud compute networks subnets delete server-subnet1 --region=us-central1 --quiet --project=$projectname
gcloud compute networks subnets delete server-subnet2 --region=us-central1 --quiet --project=$projectname
Limpar regras de firewall
No Cloud Shell, faça o seguinte:
gcloud compute firewall-rules delete allow-iap-client --quiet --project=$projectname
gcloud compute firewall-rules delete allow-iap-server1 --quiet --project=$projectname
gcloud compute firewall-rules delete allow-iap-server2 --quiet --project=$projectname
gcloud compute firewall-rules delete allow-gateway-client --quiet --project=$projectname
gcloud compute firewall-rules delete allow-client-server1 --quiet --project=$projectname
gcloud compute firewall-rules delete allow-client-server2 --quiet --project=$projectname
Limpar rotas personalizadas
No Cloud Shell, faça o seguinte:
gcloud compute routes delete client-to-server1-route --quiet --project=$projectname
gcloud compute routes delete client-to-server2-route --quiet --project=$projectname
gcloud compute routes delete server1-to-client-route --quiet --project=$projectname
Limpar VPCs
No Cloud Shell, faça o seguinte:
gcloud compute networks delete client-vpc --quiet --project=$projectname
gcloud compute networks delete server-vpc1 --quiet --project=$projectname
gcloud compute networks delete server-vpc2 --quiet --project=$projectname
11. Parabéns
Você usou rotas estáticas IPv6 personalizadas com próximos saltos definidos como next-hop-gateway , next-hop-instance e next-hop-address. Você também validou a comunicação IPv6 de ponta a ponta usando essas rotas.
A seguir
Confira alguns destes codelabs:
- Acessar as APIs do Google de hosts locais usando endereços IPv6
- Opções de endereçamento IP IPv4 e IPv6