1. Introduzione
Le route personalizzate statiche influenzano il comportamento di routing predefinito in un VPC. Le route personalizzate IPv6 ora supportano nuovi attributi di hop successivo: next-hop-gateway, next-hop-instance e next-hop-address. Questo codelab descrive come utilizzare le route personalizzate IPv6 con queste nuove opzioni di hop successivo utilizzando due VPC connessi da un'istanza VM con più NIC. Mostrerai anche come combinare l'indirizzamento ULA e GUA e come fornire raggiungibilità alla rete VPC ULA a internet pubblico utilizzando la nuova funzionalità di route personalizzati.
Obiettivi didattici
- Come creare una route personalizzata IPv6 con un hop successivo next-hop-ilb specificando il nome del bilanciatore del carico interno
- Come creare una route personalizzata IPv6 con un hop successivo next-hop-ilb specificando l'indirizzo IPv6 del bilanciamento del carico interno
Che cosa ti serve
- Progetto Google Cloud
2. Prima di iniziare
Aggiorna il progetto per supportare il codelab
Questo codelab utilizza le variabili $per facilitare l'implementazione della configurazione di gcloud in Cloud Shell.
In Cloud Shell, esegui le seguenti operazioni:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export projectname=$(gcloud config list --format="value(core.project)")
Architettura complessiva del lab

Per dimostrare entrambi i tipi di hop successivo di route personalizzate, creerai due VPC: un client e un server VPC che utilizzano l'indirizzamento ULA.
Affinché la VPC client acceda al server, utilizzerai una route personalizzata che utilizza next-hop-ilb che punta a un bilanciatore del carico interno (utilizzando il nome del bilanciatore del carico interno) davanti a un gruppo di istanze gateway con più NIC che si trovano tra due bilanciatori del carico interni. Per fornire il routing all'istanza client (dopo aver eliminato la route ::/0 predefinita), utilizzerai una route personalizzata con next-hop-ilb (utilizzando l'indirizzo di ILB) che punta a ILB.
3. Configurazione VPC client
Crea il VPC client
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute networks create client-vpc \
--project=$projectname \
--subnet-mode=custom --mtu=1500 \
--bgp-routing-mode=regional \
--enable-ula-internal-ipv6
Crea la subnet client
In Cloud Shell, esegui le seguenti operazioni:
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=internal \
--region=us-central1
Registra la subnet IPv6 assegnata in una variabile di ambiente utilizzando questo comando
export client_subnet=$(gcloud compute networks subnets \
describe client-subnet \
--project $projectname \
--format="value(internalIpv6Prefix)" \
--region us-central1)
Avvia l'istanza client
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute instances create client-instance \
--subnet client-subnet \
--stack-type IPV4_IPV6 \
--zone us-central1-a \
--project=$projectname
Aggiungi una regola firewall per il traffico VPC del client
In Cloud Shell, esegui le seguenti operazioni:
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
Aggiungi una regola firewall per consentire IAP per l'istanza client
In Cloud Shell, esegui le seguenti operazioni:
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
Conferma l'accesso SSH all'istanza client
In Cloud Shell, accedi all'istanza client:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Se l'operazione va a buon fine, vedrai una finestra del terminale dall'istanza client. Esci dalla sessione SSH per continuare con il codelab.
4. Configurazione del VPC server
Crea il VPC del server
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute networks create server-vpc \
--project=$projectname \
--subnet-mode=custom --mtu=1500 \
--bgp-routing-mode=regional \
--enable-ula-internal-ipv6
Crea le subnet del server
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute networks subnets create server-subnet \
--network=server-vpc \
--project=$projectname \
--range=192.168.0.0/24 \
--stack-type=IPV4_IPV6 \
--ipv6-access-type=internal \
--region=us-central1
Registra la subnet assegnata in una variabile di ambiente utilizzando questo comando
export server_subnet=$(gcloud compute networks subnets \
describe server-subnet \
--project $projectname \
--format="value(internalIpv6Prefix)" \
--region us-central1)
Avvia la VM server
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute instances create server-instance \
--subnet server-subnet \
--stack-type IPV4_IPV6 \
--zone us-central1-a \
--project=$projectname
Aggiungi una regola firewall per consentire l'accesso al server dal client
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute firewall-rules create allow-client-server \
--direction=INGRESS --priority=1000 \
--network=server-vpc --action=ALLOW \
--rules=tcp --source-ranges=$client_subnet \
--project=$projectname
Aggiungi regola firewall per consentire IAP
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute firewall-rules create allow-iap-server \
--direction=INGRESS --priority=1000 \
--network=server-vpc --action=ALLOW \
--rules=tcp:22 \
--source-ranges=35.235.240.0/20 \
--project=$projectname
Installa Apache nell'istanza del server ULA
In Cloud Shell, accedi all'istanza client:
gcloud compute ssh server-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
All'interno della shell della VM server, esegui questo comando
sudo apt update && sudo apt -y install apache2
Verifica che Apache sia in esecuzione
sudo systemctl status apache2
Sovrascrivere la pagina web predefinita
echo '<!doctype html><html><body><h1>Hello World! From Server Instance!</h1></body></html>' | sudo tee /var/www/html/index.html
Esci dalla sessione SSH per continuare con il codelab.
5. Crea istanze gateway
Crea un modello di istanza gateway con più NIC
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute instance-templates create gateway-instance-template \
--project=$projectname \
--instance-template-region=us-central1 \
--region=us-central1 \
--network-interface=stack-type=IPV4_IPV6,subnet=client-subnet,no-address \
--network-interface=stack-type=IPV4_IPV6,subnet=server-subnet,no-address \
--can-ip-forward \
--metadata=startup-script='#! /bin/bash
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'
Crea un gruppo di istanze gateway con più NIC
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute instance-groups managed create gateway-instance-group \
--project=$projectname \
--base-instance-name=gateway-instance \
--template=projects/$projectname/regions/us-central1/instanceTemplates/gateway-instance-template \
--size=2 \
--zone=us-central1-a
Verificare le istanze del gateway
Per assicurarti che lo script di avvio sia stato trasmesso correttamente e che la tabella di routing v6 sia corretta. Accedi tramite SSH a una delle istanze gateway
In Cloud Shell, elenca le istanze del gateway eseguendo questo comando:
gcloud compute instances list \
--project=$projectname \
--zones=us-central1-a \
--filter name~gateway \
--format 'csv(name)'
Prendi nota di uno dei nomi delle istanze e utilizzalo nel comando successivo per connetterti all'istanza tramite SSH.
In Cloud Shell, accedi a una delle istanze del gateway
gcloud compute ssh gateway-instance-<suffix> \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
All'interno della shell della VM gateway, esegui questo comando per controllare l'inoltro IPv6
sudo sysctl net.ipv6.conf.all.forwarding
Il comando deve restituire il valore "1", che indica che l'inoltro IPv6 è attivato.
Verifica la tabella di routing IPv6 sull'istanza
ip -6 route show
Output di esempio che mostra le route di subnet ULA e GUA, con la route predefinita che punta all'interfaccia 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
Esci dalla sessione SSH per continuare con il codelab.
6. Crea i componenti del bilanciatore del carico
Prima di poter creare route in entrambi i VPC, dovremo creare bilanciatori del carico pass-through interni su entrambi i lati delle istanze gateway per inoltrare il traffico.
I bilanciatori del carico creati in questo codelab sono composti da
- Controllo di integrità: in questo codelab creeremo semplici controlli di integrità che hanno come target la porta 22. Tieni presente che i controlli di integrità non funzioneranno come sono stati implementati (ciò comporterebbe l'aggiunta di regole firewall per consentire i controlli di integrità e la creazione di route speciali sulle istanze gateway). Poiché questo codelab è incentrato sul forwarding IPv6, ci affideremo al comportamento di distribuzione del traffico predefinito dei bilanciatori del carico passthrough interni quando tutti i backend non sono integri, ovvero al forwarding a tutti i backend come ultima risorsa.
- Servizio di backend: utilizzeremo il protocollo TCP per il servizio di backend. Tuttavia, poiché i bilanciatori del carico vengono creati per scopi di routing, tutti i protocolli vengono inoltrati indipendentemente dal protocollo del servizio di backend.
- Regola di forwarding: creiamo una regola di forwarding per VPC .
- Indirizzo IPv6 interno: in questo codelab, la regola di forwarding allocherà automaticamente gli indirizzi IPv6 dalla subnet
Crea controllo di integrità
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute health-checks create tcp tcp-hc-22 \
--project=$projectname \
--region=us-central1 \
--port=22
Crea servizi di backend
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute backend-services create bes-ilb-clientvpc \
--project=$projectname \
--load-balancing-scheme=internal \
--protocol=tcp \
--network=client-vpc \
--region=us-central1 \
--health-checks=tcp-hc-22 \
--health-checks-region=us-central1
gcloud compute backend-services create bes-ilb-servervpc \
--project=$projectname \
--load-balancing-scheme=internal \
--protocol=tcp \
--network=server-vpc \
--region=us-central1 \
--health-checks=tcp-hc-22 \
--health-checks-region=us-central1
Aggiungi il gruppo di istanze al servizio di backend
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute backend-services add-backend bes-ilb-clientvpc \
--project=$projectname \
--region=us-central1 \
--instance-group=gateway-instance-group \
--instance-group-zone=us-central1-a
gcloud compute backend-services add-backend bes-ilb-servervpc \
--project=$projectname \
--region=us-central1 \
--instance-group=gateway-instance-group \
--instance-group-zone=us-central1-a
Creare regole di forwarding
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute forwarding-rules create fr-ilb-clientvpc \
--project=$projectname \
--region=us-central1 \
--load-balancing-scheme=internal \
--network=client-vpc \
--subnet=client-subnet \
--ip-protocol=TCP \
--ip-version=IPV6 \
--ports=ALL \
--backend-service=bes-ilb-clientvpc \
--backend-service-region=us-central1
gcloud compute forwarding-rules create fr-ilb-servervpc \
--project=$projectname \
--region=us-central1 \
--load-balancing-scheme=internal \
--network=server-vpc \
--subnet=server-subnet \
--ip-protocol=TCP \
--ip-version=IPV6 \
--ports=ALL \
--backend-service=bes-ilb-servervpc \
--backend-service-region=us-central1
Registra gli indirizzi IPv6 di entrambe le regole di forwarding eseguendo i seguenti comandi in Cloud Shell:
export fraddress_client=$(gcloud compute forwarding-rules \
describe fr-ilb-clientvpc \
--project $projectname \
--format="value(IPAddress)" \
--region us-central1)
export fraddress_server=$(gcloud compute forwarding-rules \
describe fr-ilb-servervpc \
--project $projectname \
--format="value(IPAddress)" \
--region us-central1)
7. Crea e testa le route ai bilanciatori del carico (utilizzando l'indirizzo del bilanciatore del carico)
In questa sezione, aggiungerai route ai VPC client e server utilizzando gli indirizzi IPv6 dei bilanciatori del carico come hop successivi.
Prendi nota degli indirizzi dei server
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute instances list \
--project $projectname \
--zones us-central1-a \
--filter="name~server-instance" \
--format='value[separator=","](name,networkInterfaces[0].ipv6Address)'
Dovrebbero essere visualizzati sia i nomi delle istanze del server sia i relativi prefissi IPv6. Esempio di output
server-instance,fd20:3df:8d5c:0:0:0:0:0
Prendi nota dell'indirizzo del server, in quanto lo utilizzerai in un secondo momento nei comandi curl dall'istanza client. Purtroppo, le variabili di ambiente non possono essere utilizzate facilmente per archiviarli, in quanto non vengono trasferite tramite le sessioni SSH.
Esegui il comando curl dal client all'istanza del server ULA
Per vedere il comportamento prima di aggiungere nuovi percorsi. Esegui un comando curl dall'istanza client verso server-instance1.
In Cloud Shell, accedi all'istanza client:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
All'interno dell'istanza client, esegui un comando curl utilizzando l'indirizzo IPv6 ULA dell'istanza server1 (il comando imposta un breve timeout di 5 secondi per evitare che curl attenda troppo a lungo)
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Questo comando curl dovrebbe andare in timeout perché la VPC client non ha ancora una route verso la VPC server.
Cerchiamo di risolvere il problema. Esci dalla sessione SSH per il momento.
Aggiungi route personalizzata nel VPC client
Poiché nel VPC client manca una route verso il prefisso ULA. Aggiungiamolo ora creando una route che punti al bilanciamento del carico interno lato client per indirizzo.
Nota: ai bilanciatori del carico passthrough interni IPv6 vengono assegnati indirizzi /96. È necessario rimuovere la maschera /96 dall'indirizzo prima di passarlo al comando successivo. (di seguito viene utilizzata la sostituzione in loco di bash)
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute routes create client-to-server-route \
--project=$projectname \
--destination-range=$server_subnet \
--network=client-vpc \
--next-hop-ilb=${fraddress_client//\/96}
Accedi di nuovo all'istanza client tramite SSH:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
All'interno dell'istanza client, riprova a eseguire il comando curl sull'istanza server. (il comando imposta un breve timeout di 5 secondi per evitare che curl attenda troppo a lungo)
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Questo comando curl va ancora in timeout perché la VPC del server non ha ancora una route di ritorno verso la VPC del client tramite l'istanza gateway.
Esci dalla sessione SSH per continuare con il codelab.
Aggiungi route personalizzata nel VPC del server
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute routes create server-to-client-route \
--project=$projectname \
--destination-range=$client_subnet \
--network=server-vpc \
--next-hop-ilb=${fraddress_server//\/96}
Accedi di nuovo all'istanza client tramite SSH:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
All'interno dell'istanza client, riprova a eseguire il comando curl sull'istanza server.
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Questo comando curl ora va a buon fine e mostra che hai una raggiungibilità end-to-end dall'istanza client all'istanza server ULA. Questa connettività è ora possibile solo tramite l'utilizzo di route personalizzate IPv6 con bilanciamento del carico interno come hop successivi.
Esempio di output
<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 Server Instance!</h1></body></html>
Esci dalla sessione SSH per continuare con il codelab.
8. Crea e testa le route ai bilanciatori del carico (utilizzando il nome del bilanciatore del carico)
In alternativa, next-hop-ilb può fare riferimento anche al nome del bilanciatore del carico anziché al suo indirizzo IPv6. In questa sezione esaminiamo la procedura per eseguire questa operazione e verificare che la connettività sia ancora stabilita tra il client e il server.
Eliminare i percorsi precedenti
Ripristiniamo l'ambiente allo stato precedente all'aggiunta di route personalizzate eliminando le route personalizzate che utilizzano il nome dell'istanza.
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute routes delete client-to-server-route --quiet --project=$projectname
gcloud compute routes delete server-to-client-route --quiet --project=$projectname
Esegui il comando curl dal client all'istanza del server ULA
Per verificare che le route precedenti siano state eliminate correttamente, esegui un comando curl dall'istanza client verso server-instance1.
In Cloud Shell, accedi all'istanza client:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
All'interno dell'istanza client, esegui un comando curl utilizzando l'indirizzo IPv6 ULA dell'istanza server1 (il comando imposta un breve timeout di 5 secondi per evitare che curl attenda troppo a lungo)
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Questo comando curl dovrebbe andare in timeout perché la rete VPC client non ha più una route verso la rete VPC server.
Aggiungi route personalizzate nei VPC client e server
Aggiungiamo di nuovo le route personalizzate nei VPC client e server, ma anziché utilizzare l'indirizzo del bilanciamento del carico interno, utilizzeremo il nome e la regione del bilanciamento del carico interno nel comando.
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute routes create client-to-server-route \
--project=$projectname \
--destination-range=$server_subnet \
--network=client-vpc \
--next-hop-ilb=fr-ilb-clientvpc \
--next-hop-ilb-region=us-central1
gcloud compute routes create server-to-client-route \
--project=$projectname \
--destination-range=$client_subnet \
--network=server-vpc \
--next-hop-ilb=fr-ilb-servervpc \
--next-hop-ilb-region=us-central1
Accedi di nuovo all'istanza client tramite SSH:
gcloud compute ssh client-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
All'interno dell'istanza client, riprova a eseguire il comando curl sull'istanza server. (il comando imposta un breve timeout di 5 secondi per evitare che curl attenda troppo a lungo)
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Questo comando curl ora va a buon fine e mostra che hai una raggiungibilità end-to-end dall'istanza client all'istanza server ULA.
9. Esegui la pulizia
Liberare spazio dalle route personalizzate
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute routes delete client-to-server-route --quiet --project=$projectname
gcloud compute routes delete server-to-client-route --quiet --project=$projectname
Liberare spazio nei componenti del bilanciamento del carico
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute forwarding-rules delete fr-ilb-clientvpc --region us-central1 --quiet --project=$projectname
gcloud compute forwarding-rules delete fr-ilb-servervpc --region us-central1 --quiet --project=$projectname
gcloud compute backend-services delete bes-ilb-clientvpc --region us-central1 --quiet --project=$projectname
gcloud compute backend-services delete bes-ilb-servervpc --region us-central1 --quiet --project=$projectname
gcloud compute health-checks delete tcp-hc-22 --region us-central1 --quiet --project=$projectname
Eseguire la pulizia delle istanze e del modello di istanza
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute instances delete client-instance --zone us-central1-a --quiet --project=$projectname
gcloud compute instances delete server-instance --zone us-central1-a --quiet --project=$projectname
gcloud compute instance-groups managed delete gateway-instance-group --zone us-central1-a --quiet --project=$projectname
gcloud compute instance-templates delete gateway-instance-template --region us-central1 --quiet --project=$projectname
Pulire le subnet
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute networks subnets delete client-subnet --region=us-central1 --quiet --project=$projectname
gcloud compute networks subnets delete server-subnet --region=us-central1 --quiet --project=$projectname
Pulire le regole firewall
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute firewall-rules delete allow-iap-client --quiet --project=$projectname
gcloud compute firewall-rules delete allow-iap-server --quiet --project=$projectname
gcloud compute firewall-rules delete allow-gateway-client --quiet --project=$projectname
gcloud compute firewall-rules delete allow-client-server --quiet --project=$projectname
Libera spazio nei VPC
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute networks delete client-vpc --quiet --project=$projectname
gcloud compute networks delete server-vpc --quiet --project=$projectname
10. Complimenti
Hai utilizzato correttamente le route statiche personalizzate IPv6 con gli hop successivi impostati su next-hop-ilb. Hai anche convalidato la comunicazione IPv6 end-to-end utilizzando queste route.
Passaggi successivi
Dai un'occhiata ad alcuni di questi codelab...
- Accedi alle API di Google da host on-premise con indirizzi IPv6
- Opzioni di indirizzamento IP IPv4 e IPv6
- Utilizzo dell'istanza di hop successivo delle route statiche IPv6, dell'indirizzo di hop successivo e del gateway di hop successivo