1. Introduzione
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.
Obiettivi didattici
- 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
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 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
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…
- Accedere alle API Google da host on-premise utilizzando indirizzi IPv6
- Opzioni di indirizzamento IP IPv4 e IPv6
- Utilizzare l'istanza dell'hop successivo, l'indirizzo dell'hop successivo e il gateway dell'hop successivo delle route statiche IPv6