Questo tutorial presuppone che tu abbia familiarità con i concetti di base di reti VPC (Virtual Private Cloud), protocollo BGP (Border Gateway Protocol), reti private virtuali (VPN) e tunnel IPsec.
Google Cloud fornisce un servizio VPN ad alta disponibilità per connettere la rete VPC ad ambienti in esecuzione all'esterno di Google Cloud, ad esempio on-premise o su AWS tramite una connessione VPN IPsec. La VPN ad alta disponibilità offre uno SLA con disponibilità del servizio del 99,99% se configurato in base alle best practice di Google.
Panoramica dell'architettura
L'architettura descritta in questo documento include i seguenti componenti:
- Router Cloud: un servizio Google Cloud completamente distribuito e gestito per fornire il routing dinamico tramite BGP per le tue reti VPC.
- Gateway VPN ad alta disponibilità: un gateway VPN gestito da Google in esecuzione su Google Cloud. Ogni gateway VPN ad alta disponibilità è una risorsa di area geografica con due interfacce, ciascuna con propri indirizzi IP esterni: interfaccia 0 e 1.
- Tunnel VPN: connessioni dal gateway VPN ad alta disponibilità al gateway VPN peer su AWS tramite il quale passa il traffico criptato.
- Gateway VPN peer: due endpoint VPN site-to-site di AWS, che possono provenire da un gateway privato virtuale AWS o da un gateway di AWS Transit.
Ognuna delle connessioni gateway VPN peer è dotata di due tunnel preconfigurati per puntare a un singolo gateway cliente, in questo caso un'interfaccia VPN ad alta disponibilità Google Cloud. Con questa configurazione, il numero minimo di tunnel per soddisfare lo SLA (accordo sul livello del servizio) con disponibilità del servizio del 99,99% è quattro.
Le opzioni di routing e la larghezza di banda combinata sui tunnel VPN variano in base all'opzione VPN site-to-site utilizzata sul lato AWS:
Gateway di trasporto pubblico: se crei il gateway di trasporto pubblico AWS senza preferenza BGP, ECMP distribuisce equamente il traffico tra i tunnel attivi.
Per utilizzare la connettività VPN su più reti Virtual Private Cloud Google, consulta le best practice per la creazione di un sistema hub e spoke in Google Cloud.
Per ulteriori informazioni sui gateway AWS per il trasporto pubblico, consulta la documentazione di Amazon Virtual Private Cloud.
Gateway privato virtuale: se utilizzi un gateway privato virtuale AWS, viene selezionato solo un tunnel tra tutte le connessioni sul gateway. Per utilizzare più di un tunnel, utilizza un gateway AWS in modo che ECMP sia disponibile.
Per informazioni dettagliate sulla priorità delle route VPN con AWS, consulta la documentazione delle opzioni di routing delle VPN site-to-site di AWS.
Per ulteriori informazioni sui gateway privati virtuali AWS, consulta la documentazione del tunnel VPN Ato Site-to-Site.
Il seguente diagramma mostra l'architettura.
Obiettivi
- Creare una rete VPC su Google Cloud.
- Creare un gateway VPN ad alta disponibilità e un router Cloud su Google Cloud.
- Creare gateway cliente su AWS.
- Crea una connessione VPN con routing dinamico su AWS.
- Creare un gateway VPN esterno e tunnel VPN su Google Cloud.
- Verifica e testa la connessione VPN tra le reti VPC su Google Cloud e AWS.
Costi
Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:
Per una stima dei costi per i componenti di Google Cloud, utilizza il Calcolatore prezzi di Google Cloud.
Questo tutorial utilizza i componenti fatturabili di Amazon Web Services, inclusi i seguenti:
- Gateway AWS Transit
- VPN ATO Site-to-Site
Per una stima dei costi per i componenti AWS, utilizza il Calcolatore prezzi di AWS.
Prima di iniziare
-
Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.
-
Attiva l'API Compute Engine.
-
In Google Cloud Console, attiva Cloud Shell.
-
Assicurati di disporre dei ruoli amministrativi obbligatori per configurare i componenti di networking:
- Amministratore rete:
compute.networkAdmin
- Amministratore sicurezza:
compute.securityAdmin
- Amministratore Compute:
compute.admin
Per saperne di più sulle finalità di questi ruoli, consulta Ruoli IAM per funzioni di job relative al networking.
- Amministratore rete:
Crea il gateway VPN ad alta disponibilità e il router Cloud su Google Cloud
In questa sezione creerai una rete VPC, un gateway VPN ad alta disponibilità e un router Cloud su Google Cloud.
In Cloud Shell, assicurati di lavorare nel progetto Cloud che hai creato o selezionato:
gcloud config set project YOUR_PROJECT_ID export PROJECT_ID=`gcloud config list --format="value(core.project)"`
Sostituisci
YOUR_PROJECT_ID
con l'ID del progetto Cloud.Crea una rete VPC personalizzata con una singola subnet:
gcloud compute networks create NETWORK \ --subnet-mode SUBNET_MODE \ --bgp-routing-mode BGP_ROUTING_MODE
Sostituisci quanto segue:
NETWORK
: il nome della reteSUBNET_MODE
: la modalità subnetBGP_ROUTING_MODE
: modalità di routing BGP
Il comando dovrebbe essere simile al seguente esempio:
gcloud compute networks create gc-vpc \ --subnet-mode custom \ --bgp-routing-mode global
Crea una subnet per ospitare le VM di test:
gcloud compute networks subnets create SUBNET_NAME \ --network NETWORK \ --region SUBNET_REGION \ --range IP_ADDRESS_RANGE
Sostituisci quanto segue:
SUBNET_NAME
: il nome della subnetSUBNET_REGION
: la regione in cui creare la subnetIP_ADDRESS_RANGE
: intervallo di indirizzi IP per la subnet
I comandi dovrebbero essere simili al seguente esempio:
gcloud compute networks subnets create subnet-east4 \ --network gc-vpc \ --region us-east4 \ --range 10.1.1.0/24
Crea il gateway VPN ad alta disponibilità:
gcloud compute vpn-gateways create HA_VPN_GATEWAY_NAME \ --network NETWORK \ --region REGION
Sostituisci
HA_VPN_GATEWAY_NAME
con il nome del gateway VPN ad alta disponibilità.Crea un router Cloud:
gcloud compute routers create ROUTER_NAME \ --region REGION \ --network NETWORK \ --asn GOOGLE_ASN \ --advertisement-mode custom \ --set-advertisement-groups all_subnets
Sostituisci quanto segue:
ROUTER_NAME
: il nome del tuo router CloudGOOGLE_ASN
: l'ASN privato (numero di sistema autonomo) per il router Cloud che stai creando. Può essere qualsiasi ASN privato nell'intervallo 64512-65534 o 4200000000-4294967294 che non stai già utilizzando come ASN peer nella stessa regione e nella stessa rete.
Il comando dovrebbe essere simile al seguente esempio:
gcloud compute routers create cloud-router \ --region us-east4 \ --network gc-vpc \ --asn 65534 \ --advertisement-mode custom \ --set-advertisement-groups all_subnets
Questa procedura crea un gateway VPN con due interfacce. Prendi nota degli indirizzi esterni in modo da poterli utilizzare durante la configurazione dell'ambiente sul lato AWS.
Crea gateway e connessioni VPN su AWS
In questa sezione creerai gateway per i clienti, gateway di destinazione e connessioni VPN con routing dinamico.
I comandi AWS vengono eseguiti utilizzando l'interfaccia a riga di comando di AWS.
Crea due gateway cliente utilizzando il comando AWS seguente:
aws ec2 create-customer-gateway --type ipsec.1 --public-ip INTERFACE_0_IP_ADDRESS --bgp-asn GOOGLE_ASN aws ec2 create-customer-gateway --type ipsec.1 --public-ip INTERFACE_1_IP_ADDRESS --bgp-asn GOOGLE_ASN
Sostituisci
INTERFACE_0_IP_ADDRESS
eINTERFACE_1_IP_ADDRESS
con gli indirizzi IP pubblici del passaggio finale nella sezione precedente.Crea un gateway di destinazione e collegalo alla rete VPC.
Il gateway di destinazione può essere un gateway privato virtuale o un gateway di transito. Per ulteriori informazioni, consulta Creare un gateway di destinazione.
Segui le istruzioni per un gateway privato virtuale o un gateway di transito:
Gateway privato virtuale:
Crea un gateway privato virtuale con un ASN lato AWS specifico:
aws ec2 create-vpn-gateway --type ipsec.1 --amazon-side-asn AWS_SIDE_ASN
Sostituisci
AWS_SIDE_ASN
con l'ASN per il lato AWS.Questo comando dovrebbe essere simile al seguente esempio:
aws ec2 create-vpn-gateway --type ipsec.1 --amazon-side-asn 65001
Collega il gateway privato virtuale alla tua rete VPC:
aws ec2 attach-vpn-gateway --vpn-gateway-id VPN_GATEWAY_ID --vpc-id VPC_ID
Gateway del trasporto pubblico:
Crea un gateway di trasporto pubblico:
aws ec2 create-transit-gateway --description TRANSIT_GATEWAY_DESCRIPTION \ --options=AmazonSideAsn=65001,AutoAcceptSharedAttachments=enable,DefaultRouteTableAssociation=enable,DefaultRouteTablePropagation=enable,VpnEcmpSupport=enable,DnsSupport=enable
Sostituisci
TRANSIT_GATEWAY_DESCRIPTION
con una descrizione per il tuo gateway di transito.Collega la tua rete VPC al gateway di transito:
aws ec2 create-transit-gateway-vpc-attachment \ --transit-gateway-id TRANSIT_GATEWAY_ID \ --vpc-id VPC_ID \ --subnet-id SUBNET_ID
Crea una connessione VPN con routing dinamico.
Il metodo per creare una connessione VPN con routing dinamico varia a seconda che il gateway di destinazione sia un gateway privato virtuale o un gateway di transito. Per ulteriori informazioni, consulta Creare una connessione VPN site-to-site.
Segui le istruzioni per un gateway privato virtuale o un gateway di transito:
Gateway privato virtuale:
Crea una connessione VPN con routing dinamico tra il gateway privato virtuale e i gateway del cliente e applica i tag alla connessione VPN:
aws ec2 create-vpn-connection \ --type ipsec.1 \ --customer-gateway-id CUSTOMER_GATEWAY_1 \ --vpn-gateway-id VPN_GATEWAY_ID \ --options TunnelOptions='[{TunnelInsideCidr=AWS_T1_IP,PreSharedKey=SHARED_SECRET_1},{TunnelInsideCidr=AWS_T2_IP,PreSharedKey=SHARED_SECRET_2}]' aws ec2 create-vpn-connection \ --type ipsec.1 \ --customer-gateway-id CUSTOMER_GATEWAY_2 \ --vpn-gateway-id VPN_GATEWAY_ID \ --options TunnelOptions='[{TunnelInsideCidr=AWS_T3_IP,PreSharedKey=SHARED_SECRET_3},{TunnelInsideCidr=AWS_T4_IP,PreSharedKey=SHARED_SECRET_4}]'
Gateway del trasporto pubblico:
Crea una connessione VPN con routing dinamico tra il gateway di transito e i gateway del cliente:
aws ec2 create-vpn-connection \ --type ipsec.1 \ --customer-gateway-id CUSTOMER_GATEWAY_1 \ --transit-gateway-id TRANSIT_GATEWAY_ID \ --options TunnelOptions='[{TunnelInsideCidr=AWS_T1_IP,PreSharedKey=SHARED_SECRET_1},{TunnelInsideCidr=AWS_T2_IP,PreSharedKey=SHARED_SECRET_2}]' aws ec2 create-vpn-connection \ --type ipsec.1 \ --customer-gateway-id CUSTOMER_GATEWAY_2 \ --transit-gateway-id TRANSIT_GATEWAY_ID \ --options TunnelOptions='[{TunnelInsideCidr=AWS_T3_IP,PreSharedKey=SHARED_SECRET_3},{TunnelInsideCidr=AWS_T4_IP,PreSharedKey=SHARED_SECRET_4}]'
Sostituisci quanto segue:
CUSTOMER_GATEWAY_1
: gateway VPN Google Cloud, interfaccia 0CUSTOMER_GATEWAY_2
: gateway VPN Google Cloud, interfaccia 1AWS_T1_IP
: indirizzo IP interno per il gateway privato virtuale per la connessione 1, tunnel 1AWS_T2_IP
: indirizzo IP interno per il gateway privato virtuale per la connessione 1, tunnel 2AWS_T3_IP
: indirizzo IP interno per il gateway privato virtuale per la connessione 2, tunnel 1AWS_T4_IP
: indirizzo IP interno per il gateway privato virtuale per la connessione 2, tunnel 2SHARED_SECRET_1
: chiave precondivisa per la connessione 1, tunnel 1SHARED_SECRET_2
: chiave precondivisa per la connessione 1, tunnel 2SHARED_SECRET_3
: chiave precondivisa per la connessione 2, tunnel 1SHARED_SECRET_4
: chiave precondivisa per la connessione 2, tunnel 2
AWS riserva alcuni intervalli CIDR, per cui non puoi utilizzare valori in questi intervalli come indirizzi IP interni (
AWS_T1_IP
,AWS_T2_IP
,AWS_T3_IP
eAWS_T4_IP
). Per informazioni su quale CIDR blocca i prenotazioni AWS, consulta Cloud CIDR IPv4 del tunnel.Questi comandi creano quattro tunnel verso Google Cloud.
Scarica i file di configurazione per le due connessioni VPN.
Nei passaggi successivi, utilizzerai i valori dei file di configurazione per creare e configurare risorse sul lato Google Cloud.
Crea tunnel VPN e interfacce del router Cloud su Google Cloud
In questa sezione verranno utilizzate le informazioni provenienti dalle connessioni VPN AWS create nella sezione precedente per creare e configurare componenti su Google Cloud.
Quando configuri i tunnel VPN in AWS, utilizza il protocollo di crittografia IKEv2 e seleziona meno insiemi di trasformazioni sul lato AWS. Ad esempio, seleziona una combinazione di singoli algoritmi di crittografia di Fase 1 e Fase 2, algoritmi di integrità e numeri di gruppo Diffie-Hellman (DH). In caso contrario, il tunnel Cloud VPN non può essere rielaborato a causa delle dimensioni elevate dell'associazione di sicurezza (SA) per i set di trasformazione AWS predefiniti. Queste dimensioni elevate dei payload possono causare la frammentazione IP dei pacchetti IKE lato AWS, che non è supportata da Cloud VPN. Per ulteriori informazioni, consulta Opzioni tunnel per la tua connessione VPN site-to-site.
In Cloud Shell, crea un gateway VPN esterno con quattro interfacce per gli indirizzi IP esterni di AWS:
gcloud compute external-vpn-gateways create PEER_GATEWAY_NAME --interfaces \ 0=AWS_GW_IP_1,1=AWS_GW_IP_2,2=AWS_GW_IP_3,3=AWS_GW_IP_4
Sostituisci quanto segue:
AWS_GW_IP_1
: indirizzo IP esterno per il gateway privato virtuale per la connessione 1, tunnel 1AWS_GW_IP_2
: indirizzo IP esterno per il gateway privato virtuale per la connessione 1, tunnel 2AWS_GW_IP_3
: indirizzo IP esterno per il gateway privato virtuale per la connessione 2, tunnel 1AWS_GW_IP_4
: indirizzo IP esterno per il gateway privato virtuale per la connessione 2, tunnel 2
Crea quattro tunnel VPN:
Tunnel 1:
gcloud compute vpn-tunnels create tunnel-1 \ --peer-external-gateway PEER_GATEWAY_NAME \ --peer-external-gateway-interface 0 \ --region REGION \ --ike-version IKE_VERSION \ --shared-secret SHARED_SECRET_1 \ --router ROUTER_NAME \ --vpn-gateway HA_VPN_GATEWAY_NAME \ --interface 0
Tunnel 2:
gcloud compute vpn-tunnels create tunnel-2 \ --peer-external-gateway PEER_GATEWAY_NAME \ --peer-external-gateway-interface 1 \ --region REGION \ --ike-version IKE_VERSION \ --shared-secret SHARED_SECRET_2 \ --router ROUTER_NAME \ --vpn-gateway HA_VPN_GATEWAY_NAME \ --interface 0
Tunnel 3:
gcloud compute vpn-tunnels create tunnel-3 \ --peer-external-gateway PEER_GATEWAY_NAME \ --peer-external-gateway-interface 2 \ --region REGION \ --ike-version IKE_VERSION \ --shared-secret SHARED_SECRET_3 \ --router ROUTER_NAME \ --vpn-gateway HA_VPN_GATEWAY_NAME \ --interface 1
Tunnel 4:
gcloud compute vpn-tunnels create tunnel-4 \ --peer-external-gateway PEER_GATEWAY_NAME \ --peer-external-gateway-interface 3 \ --region REGION \ --ike-version IKE_VERSION \ --shared-secret SHARED_SECRET_4 \ --router ROUTER_NAME \ --vpn-gateway HA_VPN_GATEWAY_NAME \ --interface 1
Creare quattro interfacce router Cloud.
Nei comandi seguenti, sostituisci ogni segnaposto
GOOGLE_BGP_IP_TUNNEL
con l'indirizzo IP interno del tunnel sul lato Google Cloud. Puoi trovare i valori nei file di configurazione VPN AWS come indirizzo del gateway cliente per ogni tunnel. Ciascuno di questi indirizzi deve essere compreso nell'intervallo CIDR/30
dell'intervallo di rete169.254.0.0/16
.Interfaccia router Cloud 1:
gcloud compute routers add-interface ROUTER_NAME \ --interface-name int-1 \ --vpn-tunnel tunnel-1 \ --ip-address GOOGLE_BGP_IP_TUNNEL_1 \ --mask-length 30 \ --region REGION
Interfaccia router Cloud 2:
gcloud compute routers add-interface ROUTER_NAME \ --interface-name int-2 \ --vpn-tunnel tunnel-2 \ --ip-address GOOGLE_BGP_IP_TUNNEL_2 \ --mask-length 30 \ --region REGION
Interfaccia router Cloud 3:
gcloud compute routers add-interface ROUTER_NAME \ --interface-name int-3 \ --vpn-tunnel tunnel-3 \ --ip-address GOOGLE_BGP_IP_TUNNEL_3 \ --mask-length 30 \ --region REGION
Interfaccia router Cloud 4:
gcloud compute routers add-interface ROUTER_NAME \ --interface-name int-4 \ --vpn-tunnel tunnel-4 \ --ip-address GOOGLE_BGP_IP_TUNNEL_4 \ --mask-length 30 \ --region REGION
Aggiungi peer BGP.
Nei comandi seguenti, sostituisci
PEER_ASN
con l'ASN per il lato AWS della sessione BGP.Connessione AWS 1, tunnel 1
gcloud compute routers add-bgp-peer ROUTER_NAME \ --peer-name aws-conn1-tunn1 \ --peer-asn PEER_ASN \ --interface int-1 \ --peer-ip-address AWS_T1_IP \ --region REGION
Connessione AWS 1, tunnel 2
gcloud compute routers add-bgp-peer ROUTER_NAME \ --peer-name aws-conn1-tunn2 \ --peer-asn PEER_ASN \ --interface int-2 \ --peer-ip-address AWS_T2_IP \ --region REGION
Connessione AWS 2, tunnel 1
gcloud compute routers add-bgp-peer ROUTER_NAME \ --peer-name aws-conn2-tunn1 \ --peer-asn PEER_ASN \ --interface int-3 \ --peer-ip-address AWS_T3_IP \ --region REGION
Connessione AWS 2, tunnel 2
gcloud compute routers add-bgp-peer ROUTER_NAME \ --peer-name aws-conn2-tunn2 \ --peer-asn PEER_ASN \ --interface int-4 \ --peer-ip-address AWS_T4_IP \ --region REGION
Verificare la configurazione
In Cloud Shell, verifica lo stato del router Cloud:
gcloud compute routers get-status ROUTER_NAME \ --region REGION \ --format='flattened(result.bgpPeerStatus[].name, result.bgpPeerStatus[].ipAddress, result.bgpPeerStatus[].peerIpAddress)'
L'output è simile al seguente:
result.bgpPeerStatus[].peerIpAddress)' result.bgpPeerStatus[0].ipAddress: 169.254.171.18 result.bgpPeerStatus[0].name: aws-conn1-tunn1 result.bgpPeerStatus[0].peerIpAddress: 169.254.171.17 result.bgpPeerStatus[1].ipAddress: 169.254.156.154 result.bgpPeerStatus[1].name: aws-conn1-tunn2 result.bgpPeerStatus[1].peerIpAddress: 169.254.156.153 result.bgpPeerStatus[2].ipAddress: 169.254.123.38 result.bgpPeerStatus[2].name: aws-conn2-tunn1 result.bgpPeerStatus[2].peerIpAddress: 169.254.123.37 result.bgpPeerStatus[3].ipAddress: 169.254.48.186 result.bgpPeerStatus[3].name: aws-conn2-tunn2 result.bgpPeerStatus[3].peerIpAddress: 169.254.48.185
Elenca tutti i tunnel:
gcloud compute vpn-tunnels list
L'output è simile al seguente:
NAME REGION GATEWAY PEER_ADDRESS tunnel-1 us-east4 ha-vpn-gw 34.205.x.x tunnel-2 us-east4 ha-vpn-gw 52.203.x.x tunnel-3 us-east4 ha-vpn-gw 3.208.x.x tunnel-4 us-east4 ha-vpn-gw 52.204.x.x
Controlla lo stato del tunnel:
gcloud compute vpn-tunnels describe tunnel-1 \ --region REGION \ --format='flattened(status,detailedStatus)'
L'output è simile al seguente:
detailed_status: Tunnel is up and running. status: ESTABLISHED
Elenca route dinamiche imparate dal router Cloud:
gcloud compute routers get-status ROUTER_NAME \ --region REGION \ --format="flattened(result.bestRoutes)"
L'output è simile al seguente:
result.bestRoutes[0].creationTimestamp: 2021-01-19T20:42:07.366-08:00 result.bestRoutes[0].destRange: 10.2.2.0/24 result.bestRoutes[0].kind: compute#route result.bestRoutes[0].nextHopIp: 169.254.171.17 result.bestRoutes[0].priority: 100 result.bestRoutes[1].creationTimestamp: 2021-01-19T20:42:07.366-08:00 result.bestRoutes[1].destRange: 10.2.2.0/24 result.bestRoutes[1].kind: compute#route result.bestRoutes[1].nextHopIp: 169.254.156.153 result.bestRoutes[1].priority: 100 result.bestRoutes[2].creationTimestamp: 2021-01-19T20:56:26.588-08:00 result.bestRoutes[2].destRange: 10.2.2.0/24 result.bestRoutes[2].kind: compute#route result.bestRoutes[2].nextHopIp: 169.254.123.37 result.bestRoutes[2].priority: 100 result.bestRoutes[3].creationTimestamp: 2021-01-19T20:56:26.588-08:00 result.bestRoutes[3].destRange: 10.2.2.0/24 result.bestRoutes[3].kind: compute#route result.bestRoutes[3].nextHopIp: 169.254.48.185 result.bestRoutes[3].priority: 100
Testa la connettività
Creare VM di test su ciascun lato dei tunnel per testare le richieste di ping.
Assicurati di aver attivato le regole firewall per consentire il traffico ICMP.
Per istruzioni sulla creazione di VM in Compute Engine, consulta la guida introduttiva.
Per istruzioni su come creare VM su AWS, consulta Avviare una macchina virtuale.
Testa la connessione utilizzando il comando
ping
.Misura la larghezza di banda tra le macchine di test utilizzando iperf.
Lato server:
iperf3 -s
Lato client:
iperf3 -c SERVER_IP_ADDRESS -P NUMBER_OF_PARALLEL_SESSIONS
Esegui la pulizia
Elimina le risorse Google Cloud e AWS che hai creato durante questo tutorial.
Elimina il progetto Google Cloud
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, puoi eliminare il progetto:
- In Google Cloud Console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina risorse AWS
Passaggi successivi
- Scopri di più sulla VPN Google Cloud.
- Scopri di più su best practice e architetture di riferimento per la progettazione di VPC.