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 di tipo istanza hop successivo.
- Come creare una route personalizzata IPv6 con un hop successivo di tipo next-hop-gateway.
- Come creare una route personalizzata IPv6 con un hop successivo next-hop-address.
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 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 tre VPC: un VPC client che utilizza l'indirizzamento GUA, un VPC server che utilizza l'indirizzamento ULA e un secondo VPC server che utilizza l'indirizzamento GUA.
Affinché la VPC client acceda al server ULA, utilizzerai una route personalizzata che utilizza sia l'istanza di hop successivo sia l'indirizzo di hop successivo che puntano a un'istanza gateway con più NIC. Per fornire l'accesso al server GUA (dopo aver eliminato la route ::/0 predefinita), utilizzerai una route personalizzata con next-hop-gateway che punta al gateway internet predefinito per fornire il routing su internet.
3. Configurazione del 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
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=external \
--region=us-central1
Registra la subnet GUA assegnata in una variabile di ambiente utilizzando questo comando
export client_subnet=$(gcloud compute networks subnets \
describe client-subnet \
--project $projectname \
--format="value(externalIpv6Prefix)" \
--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 ULA
Crea il VPC del server ULA
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute networks create server-vpc1 \
--project=$projectname \
--subnet-mode=custom --mtu=1500 \
--bgp-routing-mode=regional \
--enable-ula-internal-ipv6
Crea le subnet del server ULA
In Cloud Shell, esegui le seguenti operazioni:
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
Registra la subnet ULA assegnata in una variabile di ambiente utilizzando questo comando
export server_subnet1=$(gcloud compute networks subnets \
describe server-subnet1 \
--project $projectname \
--format="value(internalIpv6Prefix)" \
--region us-central1)
Avvia la VM server con un indirizzo IPv6 interno ULA
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute instances create server-instance1 \
--subnet server-subnet1 \
--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-server1 \
--direction=INGRESS --priority=1000 \
--network=server-vpc1 --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-server1 \
--direction=INGRESS --priority=1000 \
--network=server-vpc1 --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-instance1 \
--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 Server1!</h1></body></html>' | sudo tee /var/www/html/index.html
Esci dalla sessione SSH per continuare con il codelab.
5. Configurazione del VPC server GUA
Crea il VPC del server GUA
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute networks create server-vpc2 \
--project=$projectname \
--subnet-mode=custom --mtu=1500 \
--bgp-routing-mode=regional
Crea le subnet del server GUA
In Cloud Shell, esegui le seguenti operazioni:
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
Registra la subnet GUA assegnata in una variabile di ambiente utilizzando questo comando
export server_subnet2=$(gcloud compute networks subnets \
describe server-subnet2 \
--project $projectname \
--format="value(externalIpv6Prefix)" \
--region us-central1)
Avvia la VM server con un indirizzo IPV6 GUA
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute instances create server-instance2 \
--subnet server-subnet2 \
--stack-type IPV4_IPV6 \
--zone us-central1-a \
--project=$projectname
Aggiungi una regola firewall per consentire l'accesso all'interno della subnet
In Cloud Shell, esegui le seguenti operazioni:
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
Aggiungi regola firewall per consentire IAP
In Cloud Shell, esegui le seguenti operazioni:
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
Conferma l'accesso SSH all'istanza del server GUA e installa Apache
In Cloud Shell, accedi all'istanza client:
gcloud compute ssh server-instance2 \
--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 Server2!</h1></body></html>' | sudo tee /var/www/html/index.html
Esci dalla sessione SSH per continuare con il codelab.
6. Crea istanza gateway
Elimina la route predefinita del VPC client
In preparazione al reindirizzamento del traffico ULA v6 all'istanza con più NIC e alla disattivazione del routing di uscita da internet. Elimina la route ::/0 predefinita che punta al gateway internet predefinito.
In Cloud Shell, esegui le seguenti operazioni:
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
Avvia la VM multi-NIC del gateway
In Cloud Shell, esegui le seguenti operazioni:In Cloud Shell, esegui le seguenti operazioni:
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
Configura l'istanza del gateway
In Cloud Shell, accedi all'istanza gateway (potrebbe essere necessario attendere alcuni minuti per l'accesso SSH riuscito durante l'avvio dell'istanza):
gcloud compute ssh gateway-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
All'interno della shell della VM gateway, esegui questo comando per abilitare l'inoltro IPv6 e continuare ad accettare RA con l'inoltro abilitato (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
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.
7. Crea e testa le route all'istanza del gateway (utilizzando il nome dell'istanza)
In questa sezione, aggiungerai route ai VPC client e server utilizzando il nome dell'istanza gateway come hop successivo.
Prendi nota degli indirizzi dei server
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute instances list \
--project $projectname \
--filter="name~server-instance" \
--format='value[separator=","](name,networkInterfaces[0].ipv6Address,networkInterfaces[0].ipv6AccessConfigs[0].externalIpv6)'
Dovrebbero essere visualizzati sia i nomi delle istanze del server sia i relativi prefissi IPv6. Esempio di output
server-instance1,fd20:3df:8d5c:0:0:0:0:0,
server-instance2,,2600:1900:4000:71fd:0:0:0:0
Prendi nota di entrambi gli indirizzi, perché li 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.
In Cloud Shell, esegui le seguenti operazioni:
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
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 server1 non ha ancora una route di ritorno verso la VPC client tramite l'istanza gateway.
Esci dalla sessione SSH per continuare con il codelab.
Aggiungi una route personalizzata nel VPC del server ULA
In Cloud Shell, esegui le seguenti operazioni:
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
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 istanza di hop successivo 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 Server1!</h1></body></html>
Esci dalla sessione SSH per continuare con il codelab.
8. Crea e testa le route all'istanza gateway (utilizzando l'indirizzo dell'istanza)
In questa sezione, aggiungerai route sia ai VPC client che a quelli server utilizzando l'indirizzo IPv6 dell'istanza gateway come hop successivo.
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-server1-route --quiet --project=$projectname
gcloud compute routes delete server1-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 scadere perché la VPC client non ha più una route verso la VPC server.
Recupera gli indirizzi IPv6 dell'istanza gateway
Prima di poter scrivere route che utilizzano l'indirizzo hop successivo, dobbiamo ottenere gli indirizzi IPv6 dell'istanza gateway.
In Cloud Shell, esegui le seguenti operazioni:
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)')
Aggiungi route personalizzata nel VPC client
Ora possiamo aggiungere di nuovo la route nel prefisso ULA della VPC client, ma utilizzando l'indirizzo GUA del gateway come hop successivo.
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute routes create client-to-server1-route \
--project=$projectname \
--destination-range=$server_subnet1 \
--network=client-vpc \
--next-hop-address=$gateway_gua_address
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/'
Come previsto, questo comando curl va ancora in timeout perché il VPC server1 non ha ancora una route di ritorno verso il VPC client tramite l'istanza gateway.
Esci dalla sessione SSH per continuare con il codelab.
Aggiungi una route personalizzata nel VPC del server ULA
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute routes create server1-to-client-route \
--project=$projectname \
--destination-range=$client_subnet \
--network=server-vpc1 \
--next-hop-address=$gateway_ula_address
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 indirizzo hop successivo 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 Server1!</h1></body></html>
Esci dalla sessione SSH per continuare con il codelab.
9. Crea e testa la route al gateway internet
Mentre è configurato questo lab, testiamo anche la funzionalità della nuova proprietà next-hop: next-hop-gateway.
Esegui il comando curl dal client all'istanza del server GUA
Per vedere il comportamento prima di aggiungere nuovi percorsi. Esegui un comando curl dall'istanza client verso l'indirizzo IP di server2.
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 verso l'endpoint IPv6
curl -m 5.0 -g -6 'http://[GUA-ipv6-address-of-server2]:80/'
Questo comando curl dovrebbe andare in timeout perché il VPC client ha solo la propria route di subnet e una route al VPC di server1. Per poter raggiungere l'intervallo GUA della rete VPC server2, devi utilizzare il gateway internet predefinito tramite una route personalizzata.
Esci dalla sessione SSH per continuare con il codelab.
Aggiungi una route del gateway personalizzata nel VPC client
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute routes create client-to-server2-route \
--project=$projectname \
--destination-range=$server_subnet2 \
--network=client-vpc \
--next-hop-gateway=default-internet-gateway
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, ripeti lo stesso comando curl
curl -m 5.0 -g -6 'http://[GUA-ipv6-address-of-server2]:80/'
Questo comando curl ora dovrebbe restituire il messaggio di saluto personalizzato, a indicare che sei riuscito a raggiungere l'indirizzo IPv6 dell'altro server tramite il gateway internet predefinito.
Esempio di output:
<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>
Esci dalla sessione SSH per passare alla sezione di pulizia del lab.
10. Esegui la pulizia
Eseguire la pulizia delle istanze
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-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
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-subnet1 --region=us-central1 --quiet --project=$projectname
gcloud compute networks subnets delete server-subnet2 --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-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
Pulire le route personalizzate
In Cloud Shell, esegui le seguenti operazioni:
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
Pulisci i VPC
In Cloud Shell, esegui le seguenti operazioni:
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. Complimenti
Hai utilizzato correttamente le route IPv6 statiche personalizzate con gli hop successivi impostati su next-hop-gateway , next-hop-instance e next-hop-address. Hai anche convalidato la comunicazione IPv6 end-to-end utilizzando queste route.
Passaggi successivi
Dai un'occhiata ad alcuni di questi codelab...
- Accedere alle API di Google da host on-premise utilizzando indirizzi IPv6
- Opzioni di indirizzamento IP IPv4 e IPv6