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-instance.
- Come creare una route personalizzata IPv6 con un hop successivo 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 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 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 possa accedere al server ULA, utilizzerai una route personalizzata che utilizza sia next-hop-instance che next-hop-address che rimandano a un'istanza di gateway con più NIC. Per fornire l'accesso al server GUA (dopo aver eliminato la route predefinita ::/0), utilizzerai una route personalizzata con next-hop-gateway che rimanda al gateway internet predefinito per fornire il routing su internet.
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
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=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 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 della VPC del server ULA
Crea la VPC del server ULA
In Cloud Shell, svolgi i seguenti passaggi:
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, svolgi i seguenti passaggi:
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, svolgi i seguenti passaggi:
gcloud compute instances create server-instance1 \
--subnet server-subnet1 \
--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-server1 \
--direction=INGRESS --priority=1000 \
--network=server-vpc1 --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-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 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 Server1!</h1></body></html>' | sudo tee /var/www/html/index.html
Esci dalla sessione SSH per continuare con il codelab.
5. Configurazione VPC del server GUA
Crea il VPC del server GUA
In Cloud Shell, svolgi i seguenti passaggi:
gcloud compute networks create server-vpc2 \
--project=$projectname \
--subnet-mode=custom --mtu=1500 \
--bgp-routing-mode=regional
Crea le sottoreti del server GUA
In Cloud Shell, svolgi i seguenti passaggi:
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 del server con un indirizzo IPv6 GUA
In Cloud Shell, svolgi i seguenti passaggi:
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, svolgi i seguenti passaggi:
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 una regola firewall per consentire l'IAP
In Cloud Shell, svolgi i seguenti passaggi:
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 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 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 della VPC client
In preparazione al reindirizzamento del traffico ULA v6 all'istanza multi-NIC e alla disattivazione del routing in uscita di internet. Elimina la route ::/0 predefinita che punta al gateway internet predefinito.
In Cloud Shell, svolgi i seguenti passaggi:
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 gateway multi-NIC
In Cloud Shell, esegui quanto segue:
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 stabilire una connessione SSH durante l'avvio dell'istanza):
gcloud compute ssh gateway-instance \
--project=$projectname \
--zone=us-central1-a \
--tunnel-through-iap
Nella shell della VM gateway, esegui il seguente comando per attivare 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 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.
7. Crea e testa le route all'istanza del gateway (utilizzando il nome dell'istanza)
In questa sezione, aggiungerai route sia alle VPC client che a quelle server utilizzando il nome dell'istanza gateway come hop successivo.
Prendi nota degli indirizzi dei server
In Cloud Shell, svolgi i seguenti passaggi:
gcloud compute instances list \
--project $projectname \
--filter="name~server-instance" \
--format='value[separator=","](name,networkInterfaces[0].ipv6Address,networkInterfaces[0].ipv6AccessConfigs[0].externalIpv6)'
Dovresti visualizzare 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, poiché li 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 client
Poiché nel VPC del cliente manca una route verso il prefisso ULA. Aggiungiamolo subito.
In Cloud Shell, svolgi i seguenti passaggi:
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 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 ancora perché la VPC server1 non ha ancora una route di ritorno alla VPC client tramite l'istanza gateway.
Esci dalla sessione SSH per continuare con il codelab.
Aggiungi una route personalizzata nella VPC del server ULA
In Cloud Shell, svolgi i seguenti passaggi:
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, 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 indicare 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-instance 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 del gateway (utilizzando l'indirizzo dell'istanza)
In questa sezione aggiungerai route sia alle VPC client che a quelle server utilizzando l'indirizzo IPv6 dell'istanza gateway come hop successivo.
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-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 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.
Ottenere gli indirizzi IPv6 dell'istanza gateway
Prima di poter scrivere route che utilizzano next-hop-address, dobbiamo ottenere gli indirizzi IPv6 dell'istanza gateway.
In Cloud Shell, svolgi i seguenti passaggi:
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 una route personalizzata nella VPC del client
Ora possiamo aggiungere di nuovo la route nella VPC del client con il prefisso ULA, ma utilizzando l'indirizzo GUA del gateway come next-hop.
In Cloud Shell, svolgi i seguenti passaggi:
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 curl all'istanza del server.
curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'
Come previsto, questo comando curl scade ancora perché il VPC server1 non ha ancora un percorso di ritorno al VPC client tramite l'istanza gateway.
Esci dalla sessione SSH per continuare con il codelab.
Aggiungi una route personalizzata nella VPC del server ULA
In Cloud Shell, svolgi i seguenti passaggi:
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, 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 indicare 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-address 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 il percorso per il gateway internet
Dato che hai 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 all'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 scadere perché il VPC client ha solo la route della propria subnet e una route al VPC di server1. Per poter raggiungere l'intervallo GUA della VPC del 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 nella VPC client
In Cloud Shell, svolgi i seguenti passaggi:
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 curl
curl -m 5.0 -g -6 'http://[GUA-ipv6-address-of-server2]:80/'
Ora questo comando curl dovrebbe riuscire a restituire il messaggio di saluto personalizzato, a indicare che hai raggiunto correttamente 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
Ripulire le istanze
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-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
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-subnet1 --region=us-central1 --quiet --project=$projectname
gcloud compute networks subnets delete server-subnet2 --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-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
Ripulire le route personalizzate
In Cloud Shell, svolgi i seguenti passaggi:
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
Eliminare i VPC
In Cloud Shell, svolgi i seguenti passaggi:
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 personalizzate statiche con next-hops impostato 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 Google da host on-premise utilizzando indirizzi IPv6
- Opzioni di indirizzamento IP IPv4 e IPv6