Risolvere i problemi di configurazione
Questa guida può aiutarti a risolvere i problemi comuni di Cloud NAT.
Problemi comuni
Le VM possono raggiungere internet in modo imprevisto, senza Cloud NAT
Se le istanze di macchine virtuali (VM) o i container possono raggiungere internet senza Cloud NAT, ma non vuoi che lo facciano, controlla i seguenti problemi:
Determina se l'interfaccia di rete della VM ha un indirizzo IP esterno. Se all'interfaccia di rete è stato assegnato un indirizzo IP esterno, Google Cloud esegue automaticamente il NAT uno a uno per i pacchetti le cui origini corrispondono all'indirizzo IP interno principale dell'interfaccia. Per ulteriori informazioni, consulta le specifiche di Cloud NAT.
Per determinare se una VM ha un indirizzo IP esterno, consulta la sezione relativa alla modifica o all'assegnazione di un indirizzo IP esterno a un'istanza esistente.
Assicurati che il tuo cluster Google Kubernetes Engine (GKE) sia un cluster privato. Ogni VM del nodo in un cluster non privato ha un indirizzo IP esterno, pertanto ogni nodo può utilizzare le route nella rete Virtual Private Cloud (VPC) il cui hop successivo è il gateway internet predefinito senza fare affidamento su Cloud NAT. Per ulteriori informazioni, inclusa la modalità di interazione dei cluster non privati con i gateway Cloud NAT, consulta Interazione con Compute Engine.
Elenca le route nella rete Virtual Private Cloud, cercando quelle che potrebbero fornire connettività a internet tramite un hop successivo diverso dal gateway internet predefinito. Ad esempio:
Le route statiche i cui hop successivi sono VM, bilanciatori del carico di rete passthrough interni o tunnel Cloud VPN potrebbero fornire indirettamente la connettività a internet. Ad esempio, le VM di hop successivo o le VM di backend per un bilanciatore del carico di rete passthrough interno potrebbero avere indirizzi IP esterni oppure un tunnel Cloud VPN potrebbe connettersi a una rete che offre accesso a internet.
Le route dinamiche apprese dalle reti on-premise dai router Cloud nella rete VPC potrebbero connettersi a una rete che offre accesso a internet.
Tieni presente che altre route personalizzate nella tua rete VPC potrebbero avere priorità più elevate rispetto alle route i cui hop successivi sono gateway internet predefiniti. Per informazioni su come Google Cloud valuta le route, consulta l'applicabilità e l'ordine del routing.
Non vengono generati log
- Verifica che il logging NAT sia abilitato.
Verifica che la visualizzazione dei log non escluda i log che stai cercando. Per istruzioni, vedi Visualizzazione dei log.
Assicurati che una regola firewall non stia bloccando il traffico. Le regole del firewall che bloccano il traffico in uscita vengono applicate prima che il traffico venga inviato al gateway NAT. Puoi utilizzare il logging delle regole firewall per verificare se le regole di uscita personalizzate stanno bloccando il traffico in uscita.
Consulta la sezione Tipi di Cloud NAT. La destinazione del traffico potrebbe non essere gestita da NAT.
Alcuni log sono esclusi
Verifica che il logging NAT sia abilitato e che il filtro dei log non escluda i log che vuoi conservare. Puoi pulire un filtro dei log in modo che non venga escluso nulla.
Cloud NAT non registra ogni singolo evento. Durante i periodi di traffico in uscita intenso, il logging NAT viene limitato in modo proporzionale al tipo di macchina della VM. I log di traduzione o di errore potrebbero essere eliminati e non è possibile determinare cosa viene omesso durante la limitazione.
Pacchetti ignorati con il motivo: risorse esaurite
Se noti una perdita di pacchetti dalle VM che utilizzano Cloud NAT, il motivo potrebbe essere che non sono disponibili tuple di indirizzi IP di origine e porte di origine NAT sufficienti per l'utilizzo da parte della VM al momento della perdita di pacchetti (esaurimento delle porte). Una tuple di cinque elementi (indirizzo IP di origine NAT, porta di origine e tuple di destinazione di 3 elementi) non può essere riutilizzata entro il timeout TIME_WAIT TCP.
Se non sono disponibili tuple NAT sufficienti, il dropped_sent_packets_count
motivo è
OUT_OF_RESOURCES
. Per saperne di più sulle metriche, consulta Utilizzare le metriche delle istanze VM.
Per scoprire come ridurre l'utilizzo delle porte, consulta Ridurre l'utilizzo delle porte.
Se utilizzi l'allocazione dinamica delle porte, consulta la sezione seguente per scoprire come ridurre le perdite di pacchetti quando viene utilizzata questa opzione.
Pacchetti persi quando è configurata l'allocazione dinamica delle porte
L'allocazione dinamica delle porte rileva quando una VM sta per esaurire le porte e raddoppia il numero di porte allocate alla VM. In questo modo, si garantisce che le porte non vengano sprecate, ma possono verificarsi pacchetti persi mentre il numero di porte allocate aumenta.
Per ridurre il numero di pacchetti persi, tieni presente quanto segue:
Se puoi aumentare le connessioni più lentamente, Cloud NAT ha più tempo per allocare più porte.
Se le VM effettuano connessioni TCP, puoi configurarle con un valore più elevato per
tcp_syn_retries
, che offre al sistema più tempo per stabilire la connessione e aumenta le probabilità di successo della connessione.Ad esempio, per le VM Linux puoi visualizzare l'impostazione corrente:
sysctl net.ipv4.tcp_syn_retries
Se necessario, puoi aumentare l'impostazione:
sudo sysctl -w net.ipv4.tcp_syn_retries=NUM
Se hai carichi di lavoro intermittenti e devi allocare rapidamente più porte, potresti dover modificare il numero minimo di porte per VM. Visualizza l'utilizzo delle porte e determina un numero minimo appropriato di porte per VM.
Pacchetti ignorati con il motivo: conflitto di indipendenza degli endpoint
Se noti una perdita di pacchetti dalle VM che utilizzano NAT pubblico e hai attivato la mappatura indipendente dall'endpoint, la perdita di pacchetti potrebbe essere causata da un conflitto indipendente dall'endpoint. In questo caso, il
dropped_sent_packets_count
motivo è
ENDPOINT_INDEPENDENT_CONFLICT
. Per saperne di più sulle metriche, consulta Utilizzare
le metriche delle istanze VM.
Puoi ridurre le probabilità di conflitti indipendenti dall'endpoint utilizzando le seguenti tecniche:
Disattiva la mappatura indipendente dagli endpoint. In questo modo, la nuova connessione da un determinato indirizzo IP e porta di origine può utilizzare un indirizzo IP e una porta di origine NAT diversi da quelli utilizzati in precedenza. La disattivazione o l'attivazione della mappatura indipendente dagli endpoint non interrompe le connessioni stabilite.
Aumenta il numero predefinito minimo di porte NAT per istanza VM, in modo che la procedura di prenotazione delle porte possa assegnare più tuple di indirizzo IP di origine e porta di origine NAT a ogni VM client. In questo modo si riduce la probabilità che a due o più tuple di indirizzi IP client e porte di origine effimere venga assegnato lo stesso indirizzo IP di origine NAT e la stessa tuple di porta di origine.
Controlla quante porte di origine effimere sono in uso:
Per le VM Linux:
netstat -an | egrep 'ESTABLISHED|TIME_WAIT|CLOSE_WAIT' | wc -l
Per le VM Windows:
netstat -tan | findstr "ESTABLISHED TIME_WAIT CLOSE_WAIT" | find /c /v ""
Configura le istanze VM in modo che utilizzino un insieme più ampio di porte di origine effimere:
Per le VM Linux:
Puoi visualizzare l'intervallo di porte configurato con questo comando:
cat /proc/sys/net/ipv4/ip_local_port_range
Puoi impostare
ip_local_port_range
sul numero massimo di porte di origine temporanee (64.512) con questo comando:echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
Per le VM Windows:
Puoi visualizzare gli intervalli di porte configurati con questi comandi:
netsh int ipv4 show dynamicport tcp netsh int ipv4 show dynamicport udp
Puoi impostare il numero di porte TCP e UDP di origine temporanee sul valore massimo possibile (64.512) con i seguenti comandi:
netsh int ipv4 set dynamicport tcp start=1024 num=64512 netsh int ipv4 set dynamicport udp start=1024 num=64512
Sui nodi Google Kubernetes Engine, puoi automatizzare questa configurazione utilizzando un
DaemonSet
privilegiato.
Per i cluster GKE, disattiva la NAT di origine eseguita su ogni nodo per i pacchetti inviati alle destinazioni di interesse. Puoi farlo in uno di due modi:
Implementando il
ip-masq-agent
e aggiungendo le destinazioni di interesse all'elenco dinonMasqueradeCIDRs
.Disattivando SNAT per le destinazioni predefinite senza masquerading con il
--disable-default-snat
flag quando crei un cluster.
Pacchetti ricevuti persi
Un gateway Cloud NAT gestisce una tabella di monitoraggio delle connessioni per memorizzare i dettagli delle connessioni attive e le mappature di indirizzi IP e porte, ovvero la modalità di conversione degli indirizzi IP e delle porte delle VM in indirizzi IP e porte NAT. Un gateway Cloud NAT ignora un pacchetto di dati in entrata se la tabella di monitoraggio delle connessioni non contiene alcuna voce per la connessione.
L'assenza della voce di collegamento nella tabella può essere dovuta a uno dei seguenti motivi:
- È stato raggiunto il timeout di una connessione TCP stabilita perché il timeout di inattività della connessione TCP stabilita è scaduto per inattività.
- Un endpoint esterno non riesce a stabilire una nuova connessione prima del timeout di inattività della connessione transitoria TCP. Ad esempio, una risorsa Google Cloud avvia una connessione con
TCP SYN
, ma l'endpoint esterno non risponde con unSYN ACK
. - Un endpoint esterno, ad esempio un prober, tenta di connettersi a un indirizzo IP e a una porta NAT. Cloud NAT non accetta connessioni in entrata non richieste. Le voci relative a questo tipo di connessioni non saranno presenti nella tabella delle connessioni. Pertanto, tutti i pacchetti ricevuti verranno eliminati.
- Se rimuovi gli IP NAT dal gateway mentre le connessioni NAT sono ancora attive, le mappature NAT diventano non valide e queste connessioni vengono immediatamente rimosse dalla tabella di monitoraggio delle connessioni. Qualsiasi traffico di ritorno viene abbandonato.
Prima di risolvere i cali di pacchetti in entrata, verifica se questi hanno effettivamente un impatto sulla tua applicazione. Per conferma, controlla la presenza di errori nell'applicazione ogni volta che si verificano picchi nei pacchetti di ingresso persi.
Se i cali di pacchetti in entrata influiscono sulla tua applicazione, prova a utilizzare le seguenti tecniche per risolvere il problema:
- Utilizza i meccanismi keepalive nella tua applicazione, in modo che le connessioni di lunga durata possano rimanere aperte per un periodo più lungo.
- Aumenta il valore di Timeout inattività della connessione transitoria TCP, in modo che gli endpoint esterni che ricevono traffico (avviato dalle risorse Google Cloud) tramite un gateway Cloud NAT abbiano più tempo per rispondere e stabilire la connessione.
- Aumenta il valore per il timeout di inattività della connessione stabilita TCP se hai ridotto notevolmente il valore predefinito.
È necessario allocare più indirizzi IP
A volte le VM non riescono a raggiungere internet perché non disponi di indirizzi IP NAT sufficienti. Questo problema può essere causato da diversi fattori. Per ulteriori informazioni, consulta la tabella seguente.
Causa principale | Sintomo | Soluzione |
---|---|---|
Hai allocato manualmente gli indirizzi, ma non ne hai allocati abbastanza, dato l'utilizzo attuale delle porte. |
|
Esegui una di queste operazioni:
|
Hai superato un limite fisso per gli indirizzi IP NAT. |
|
|
Per monitorare gli errori causati da un numero insufficiente di indirizzi IP,
crea un avviso per la metrica
nat_allocation_failed
. Questa metrica è impostata su true
se Google Cloud non è in grado di allocare indirizzi IP sufficienti per qualsiasi VM nel gateway NAT. Per informazioni sui criteri di avviso, consulta Definire i criteri di avviso.
Ridurre l'utilizzo delle porte
Puoi ridurre al minimo il numero di porte utilizzate da ogni VM in situazioni in cui non è possibile o auspicabile allocare più indirizzi IP NAT.
Per ridurre l'utilizzo delle porte, completa i seguenti passaggi:
Disattiva la mappatura indipendente dagli endpoint.
Attiva l'allocazione dinamica delle porte. Per utilizzare l'allocazione dinamica delle porte, imposta un numero minimo di porte per VM e un numero massimo di porte per VM. Cloud NAT alloca automaticamente un numero di tuple di indirizzo IP di origine e porta di origine NAT compreso tra il numero minimo e quello massimo di porte. L'utilizzo di un numero ridotto per il numero minimo di porte riduce lo spreco di tuple di porta e indirizzo IP di origine NAT sulle VM con meno connessioni attive. Se si verificano timeout di connessione durante l'allocazione delle porte, consulta Ridurre le cadute di pacchetti con l'allocazione dinamica delle porte.
Determina il numero minimo di porte più basso possibile per soddisfare le tue esigenze. Esistono diversi metodi per farlo e la maggior parte si basa sull'esame del numero di porte utilizzate (
compute.googleapis.com/nat/port_usage
) come input per il processo decisionale. Per informazioni su come trovare l'utilizzo delle porte, consulta Visualizzare l'utilizzo delle porte. Di seguito sono riportati due esempi di metodi per determinare un numero minimo di porte:- Prendi in considerazione il valore medio di
compute.googleapis.com/nat/port_usage
su un periodo di tempo rappresentativo per un numero rappresentativo di VM. - Prendi in considerazione il valore più frequente di
compute.googleapis.com/nat/port_usage
in un periodo di tempo rappresentativo per un numero rappresentativo di VM.
- Prendi in considerazione il valore medio di
Determina il numero massimo di porte più basso possibile per soddisfare le tue esigenze. Esamina di nuovo
compute.googleapis.com/nat/port_usage
come input per la procedura di presa di decisione. Considera il valore massimo dicompute.googleapis.com/nat/port_usage
in un periodo di tempo rappresentativo per un numero rappresentativo di VM come punto di partenza per il numero massimo di porte. Tieni presente che l'impostazione di un numero massimo troppo elevato può impedire alle altre VM di ricevere tuple di porta e indirizzo IP di origine NAT.Per trovare i valori giusti per le porte minime e massime sono necessari test iterativi. Per la procedura per modificare i numeri di porta minima e massima, consulta Modificare le porte minime o massime quando è configurata l'allocazione dinamica delle porte.
Esamina i timeout NAT, i relativi significati e i valori predefiniti. Se devi creare rapidamente una serie di collegamenti TCP alla stessa tupla di destinazione 3, ti consigliamo di ridurre il tempo di attesa TCP in modo che Cloud NAT possa riutilizzare più rapidamente le tuple dell'indirizzo IP di origine e della porta di origine NAT. In questo modo, Cloud NAT può utilizzare più rapidamente la stessa tupla 5 anziché dover utilizzare una tupla 5 univoca, che potrebbe richiedere l'allocazione di tuple di indirizzo IP di origine e porta di origine NAT aggiuntive per ogni VM di invio. Per la procedura per modificare i timeout NAT, consulta Modificare i timeout NAT.
Domande frequenti
Limitazione regionale per Cloud NAT
Posso utilizzare lo stesso gateway Cloud NAT in più di una regione?
No. Un gateway Cloud NAT non può essere associato a più di una regione, rete VPC o router Cloud.
Se devi fornire connettività per altre regioni o reti VPC, crea gateway Cloud NAT aggiuntivi.
Gli indirizzi IP NAT esterni utilizzati dai gateway Cloud NAT sono globali o regionali?
I gateway Cloud NAT utilizzano indirizzi IP esterni regionali come indirizzi IP NAT. Anche se sono regionali, sono indirizzabili pubblicamente. Per informazioni sui diversi modi in cui è possibile allocare o assegnare indirizzi IP NAT, consulta Indirizzi IP NAT.
Quando Cloud NAT può e non può essere utilizzato
Cloud NAT si applica alle istanze, incluse le VM dei nodi GKE, che hanno indirizzi IP esterni?
In genere no. Se l'interfaccia di rete di una VM ha un indirizzo IP esterno, Google Cloud esegue sempre NAT 1:1 per i pacchetti inviati dall'indirizzo IP interno principale dell'interfaccia di rete senza utilizzare Cloud NAT. Tuttavia, Cloud NAT potrebbe comunque fornire servizi NAT ai pacchetti inviati dagli intervalli di indirizzi IP alias della stessa interfaccia di rete. Per ulteriori dettagli, consulta le specifiche di Cloud NAT e l'interazione con Compute Engine.
La NAT pubblica consente a una VM di origine la cui interfaccia di rete non dispone di un indirizzo IP esterno di inviare traffico a una VM di destinazione o a un bilanciatore del carico con un indirizzo IP esterno, anche quando la sorgente e la destinazione si trovano nella stessa rete VPC?
Sì. Il percorso di rete prevede l'invio del traffico fuori dalla rete VPC tramite un gateway internet predefinito e la sua ricezione nella stessa rete.
Quando la VM di origine invia un pacchetto alla destinazione, il NAT pubblico esegue il NAT di origine (SNAT) prima di consegnare il pacchetto alla seconda istanza. Il NAT pubblico esegue il NAT di destinazione (DNAT) per le risposte dalla seconda istanza alla prima. Per un esempio dettagliato, consulta Configurazione e workflow di base di Public NAT.
Posso utilizzare Private NAT per la comunicazione tra VM nella stessa rete VPC?
No, Private NAT non esegue la NAT sul traffico tra VM nella stessa rete VPC.
Connessioni in entrata non richieste non supportate
Cloud NAT consente connessioni in entrata (ad esempio SSH) a istanze senza indirizzi IP esterni?
No, Cloud NAT non supporta le connessioni in arrivo non richieste.
Per ulteriori informazioni, consulta le specifiche di Cloud NAT.
Tuttavia, l'edge della rete di Google Cloud potrebbe rispondere ai ping se l'indirizzo IP di destinazione è un indirizzo IP esterno del gateway Cloud NAT che ha mappature delle porte attive per almeno un'istanza VM. Per visualizzare gli indirizzi IP assegnati a un gateway Cloud NAT, utilizza il comando gcloud compute routers get-nat-ip-info.
Gli indirizzi IP esterni contrassegnati come IN_USE
potrebbero rispondere ai ping.
Se devi connetterti a una VM senza indirizzo IP esterno, consulta Scegliere un'opzione di connessione per le VM solo interne. Ad esempio, nell'ambito della configurazione di Compute Engine per Cloud NAT, ti connetti a una VM senza un indirizzo IP esterno utilizzando Identity-Aware Proxy.
Cloud NAT e porte
Perché una VM ha un numero fisso di porte (64
per impostazione predefinita)?
Quando un gateway Cloud NAT fornisce il NAT per una VM, preleva le tuple di indirizzo e porta di origine in base alla procedura di prenotazione delle porte.
Per ulteriori informazioni, consulta gli esempi di prenotazione delle banchine.
Posso modificare il numero minimo di porte riservate per una VM?
Sì. Puoi aumentare o diminuire il numero minimo di porte per VM quando crei un nuovo gateway Cloud NAT o modificandolo in un secondo momento. Ogni gateway Cloud NAT riserva tuple di indirizzo di origine e porta di origine in base alla procedura di prenotazione delle porte.
Per ulteriori informazioni su come diminuire il numero minimo di porte, consulta la domanda successiva.
Posso diminuire il numero minimo di porte per VM dopo aver creato il gateway Cloud NAT?
Sì, tuttavia, la riduzione del numero minimo di porte potrebbe portare alla procedura di prenotazione delle porte di un numero inferiore di porte per VM. In questo caso, le connessioni TCP esistenti potrebbero essere reimpostate e, in questo caso, devono essere ristabilite.
Quando passi dalla mappatura NAT dagli intervalli principale e secondario solo all'intervallo principale, le porte aggiuntive allocate a ogni istanza vengono rilasciate immediatamente?
No. Eventuali porte aggiuntive utilizzate dagli intervalli secondari vengono conservate dalle istanze fino a quando l'impostazione Numero minimo di porte per VM non viene ridotta. Quando Cloud NAT è configurato per mappare intervalli secondari (alias) per le subnet, assegna un minimo di 1024 porte per istanza in base alla procedura di prenotazione delle porte.
Se passi solo agli intervalli principali, Cloud NAT conserva queste porte aggiuntive allocate per le istanze a cui sono già state assegnate. Dopo aver modificato gli intervalli per i quali Cloud NAT viene applicato solo al primario, il numero effettivo di porte assegnate a queste istanze non viene modificato finché non viene ridotta anche l'impostazione Numero minimo di porte per VM.
Per ridurre il numero di porte allocate a queste istanze, dopo il passaggio agli intervalli principali, l'impostazione Numero minimo di porte per VM deve essere ridotta. Dopo aver ridotto questo valore, Cloud NAT riduce automaticamente il numero di porte allocate per istanza, il che riduce il consumo di porte.
Cloud NAT e altri servizi Google
Cloud NAT consente l'accesso alle API e ai servizi Google?
Quando attivi Cloud NAT per l'intervallo IP principale di una subnet, Google Cloud attiva automaticamente l'accesso privato Google. Per scoprire di più, consulta la sezione Interazione con l'accesso privato Google.