Utilizzo dell'istanza dell'hop successivo (non taggato e taggato), dell'indirizzo dell'hop successivo e del gateway dell'hop successivo delle route statiche IPv6

Informazioni su questo codelab
schedule60 minuti
subjectUltimo aggiornamento: 21 marzo 2025
account_circleScritto da: Ghaleb Al-Habian

Le route personalizzate statiche influiscono sul comportamento di routing predefinito in una VPC. Le route personalizzate IPv6 ora supportano nuovi attributi 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 connesse da un'istanza VM con più NIC. Inoltre, dimostrerai come combinare gli indirizzi ULA e GUA e fornire la raggiungibilità della VPC ULA all'internet pubblico utilizzando la nuova funzionalità di route personalizzate.

  • Come creare una route personalizzata IPv6 con un hop successivo next-hop-ilb specificando il nome dell'ILB
  • Come creare una route personalizzata IPv6 con un hop successivo next-hop-ilb specificando l'indirizzo IPv6 dell'ILB
  • 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 quanto segue

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export projectname=$(gcloud config list --format="value(core.project)")

Architettura complessiva del lab

5fc56288b4f8ae05.png

Per dimostrare entrambi i tipi di hop successivi delle route personalizzate, creerai due VPC: un VPC client e un VPC server che utilizzano l'indirizzamento ULA.

Affinché la VPC client possa accedere 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 inserite tra due bilanciatori del carico interno. Per fornire il routing all'istanza client (dopo aver eliminato la route predefinita ::/0), utilizzerai una route personalizzata con next-hop-ilb (che utilizza l'indirizzo dell'ILB) che rimanda all'ILB.

3. Configurazione VPC client

Crea il VPC client

In Cloud Shell, svolgi i seguenti passaggi:

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, svolgi i seguenti passaggi:

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 istanza client

In Cloud Shell, svolgi i seguenti passaggi:

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, svolgi i seguenti passaggi:

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 l'IAP per l'istanza client

In Cloud Shell, svolgi i seguenti passaggi:

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

In caso di esito positivo, verrà visualizzata una finestra del terminale dall'istanza client. Esci dalla sessione SSH per continuare con il codelab.

4. Configurazione VPC del server

Crea la VPC del server

In Cloud Shell, svolgi i seguenti passaggi:

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, svolgi i seguenti passaggi:

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, svolgi i seguenti passaggi:

gcloud compute instances create server-instance \
    --subnet server-subnet \
    --stack-type IPV4_IPV6 \
    --zone us-central1-a \
    --project=$projectname

Aggiungi una regola del firewall per consentire l'accesso al server dal client

In Cloud Shell, svolgi i seguenti passaggi:

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 una regola firewall per consentire l'IAP

In Cloud Shell, svolgi i seguenti passaggi:

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 il seguente comando

sudo apt update && sudo apt -y install apache2

Verifica che Apache sia in esecuzione

sudo systemctl status apache2

Sovrascrivi 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 di gateway con più NIC

In Cloud Shell, svolgi i seguenti passaggi:

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, svolgi i seguenti passaggi:

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

Verifica le istanze del gateway

Per assicurarti che lo script di avvio sia stato passato correttamente e che la tabella di routing v6 sia corretta. Accedi tramite SSH a una delle istanze del gateway

In Cloud Shell, elenca le istanze gateway eseguendo quanto segue:

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

Nella shell della VM gateway, esegui il seguente comando per controllare l'inoltro IPv6

sudo sysctl net.ipv6.conf.all.forwarding

Il comando deve restituire il valore "1", che indica che il forwarding IPv6 è abilitato.

Verifica la tabella di routing IPv6 nell'istanza

ip -6 route show

Esito di esempio che mostra le route delle 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 componenti del bilanciatore del carico

Prima di poter creare route in entrambe le VPC, dobbiamo creare bilanciatori del carico passthrough interni su entrambi i lati delle istanze gateway per inoltrare il traffico.

I bilanciatori del carico creati in questo codelab sono costituiti 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 di solito (questo comporterà l'aggiunta di regole firewall per consentire i controlli di integrità e creare route speciali nelle istanze gateway). Poiché questo codelab è incentrato sul forwarding IPv6, ci baseremo sul comportamento di distribuzione del traffico predefinito dei bilanciatori del carico passthrough interni quando tutti i backend non sono operativi, ovvero invierà il traffico 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 a fini di routing, tutti i protocolli vengono inoltrati indipendentemente dal protocollo del servizio di backend.
  • Regola di inoltro: viene creata una regola di inoltro per ogni VPC .
  • Indirizzo IPv6 interno: in questo codelab, lasceremo che la regola di inoltro assegni automaticamente gli indirizzi IPv6 dalla subnet

Crea controllo di integrità

In Cloud Shell, svolgi i seguenti passaggi:

gcloud compute health-checks create tcp tcp-hc-22 \
    --project=$projectname \
    --region=us-central1 \
    --port=22

Crea servizi di backend

In Cloud Shell, svolgi i seguenti passaggi:

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

Aggiungere un gruppo di istanze al servizio di backend

In Cloud Shell, svolgi i seguenti passaggi:

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 inoltro

In Cloud Shell, svolgi i seguenti passaggi:

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 inoltro emettendo 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 sia ai VPC client che ai VPC server utilizzando gli indirizzi IPv6 dei bilanciatori del carico come hop successivi.

Prendi nota degli indirizzi dei server

In Cloud Shell, svolgi i seguenti passaggi:

gcloud compute instances list \
   --project $projectname \
   --zones us-central1-a \
   --filter="name~server-instance" \
--format='value[separator=","](name,networkInterfaces[0].ipv6Address)'

Dovresti visualizzare 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, poiché lo utilizzerai in seguito nei comandi curl dall'istanza client. Purtroppo, le variabili di ambiente non possono essere utilizzate facilmente per archiviarle perché 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 all'istanza server1.

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 ancora una route verso la VPC server.

Proviamo a risolvere il problema. Per il momento esci dalla sessione SSH.

Aggiungi una route personalizzata nella VPC del cliente

Poiché nel VPC del cliente manca una route verso il prefisso ULA. Aggiungiamolo ora creando una route che indichi l'ILB 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-place di bash)

In Cloud Shell, svolgi i seguenti passaggi:

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 curl all'istanza del 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 scade comunque perché la VPC del server non ha ancora una route di ritorno alla VPC del client tramite l'istanza gateway.

Esci dalla sessione SSH per continuare con il codelab.

Aggiungi una route personalizzata nel VPC del server

In Cloud Shell, svolgi i seguenti passaggi:

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, prova ancora una volta a eseguire curl all'istanza del server.

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

Questo comando curl ora riesce a dimostrare che hai la raggiungibilità end-to-end dall'istanza client all'istanza del server ULA. Questa connettività è ora possibile solo tramite l'utilizzo di route personalizzate IPv6 con next-hop-ilb 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 farlo e verifichiamo che la connettività sia ancora stabilita tra client e server.

Eliminare i percorsi precedenti

Ripristina l'ambiente prima di aggiungere percorsi personalizzati eliminando quelli che utilizzano il nome dell'istanza.

In Cloud Shell, svolgi i seguenti passaggi:

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 all'istanza server1.

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.

Aggiungere route personalizzate nelle VPC client e server

Aggiungiamo di nuovo le route personalizzate nelle VPC client e server, ma anziché utilizzare l'indirizzo dell'ILB, utilizzeremo il nome e la regione dell'ILB nel comando.

In Cloud Shell, svolgi i seguenti passaggi:

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 curl all'istanza del 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 riesce a dimostrare che hai la raggiungibilità end-to-end dall'istanza client all'istanza del server ULA.

9. Esegui la pulizia

Ripulire le route personalizzate

In Cloud Shell, svolgi i seguenti passaggi:

gcloud compute routes delete client-to-server-route  --quiet --project=$projectname
gcloud compute routes delete server-to-client-route  --quiet --project=$projectname

Ripulire i componenti del bilanciamento del carico

In Cloud Shell, svolgi i seguenti passaggi:

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

Ripulire le istanze e il modello di istanza

In Cloud Shell, svolgi i seguenti passaggi:

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

Eliminare le subnet

In Cloud Shell, svolgi i seguenti passaggi:

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

Ripulire le regole firewall

In Cloud Shell, svolgi i seguenti passaggi:

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

Eliminare i VPC

In Cloud Shell, svolgi i seguenti passaggi:

gcloud compute networks delete client-vpc --quiet --project=$projectname
gcloud compute networks delete server-vpc --quiet --project=$projectname

10. Complimenti

Hai utilizzato correttamente route IPv6 personalizzate statiche con next-hop impostato 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…

Letture aggiuntive e video

Documenti di riferimento