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 tue istanze di macchine virtuali (VM) o di container possono raggiungere senza Cloud NAT, ma non vuoi che lo facciano, verifica la presenza 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, vedi Specifiche 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 cluster Google Kubernetes Engine (GKE) sia privato cluster. 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 tua rete Virtual Private Cloud, cercando quelle che potrebbero fornire connettività a internet tramite un hop successivo diverso dal gateway internet predefinito. Esempi:
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.
Route dinamiche apprese da reti on-premise dai router Cloud nel tuo VPC potrebbe 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 i gateway internet predefiniti. Per informazioni su come Google Cloud valuta le route, osserva l'applicabilità e ordine.
Nessun log generato
- Verifica che il logging NAT sia abilitato.
Controlla che la tua visualizzazione dei log non stia filtrando i log che hai che stanno cercando. Per istruzioni, vedi Visualizzazione dei log.
Assicurati che una regola del 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 la modalità Logging delle regole firewall per verificare se le regole personalizzate in uscita bloccano 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 cancellare un filtro dei log in modo che non venga escluso nulla.
Cloud NAT non registra ogni singolo evento. Durante periodi di di traffico in uscita molto intenso, il logging NAT è limitato, proporzionale e il tipo di VM. I log di traduzione o di errore potrebbero essere eliminati e non è possibile determinare cosa viene omesso durante la limitazione.
Pacchetti persi con il motivo: risorse esaurite
Se noti una perdita di pacchetti dalle VM che utilizzano Cloud NAT, la causa potrebbe essere perché non sono disponibili abbastanza indirizzi IP di origine NAT e porta di origine tuple che la VM utilizzerà al momento della perdita di pacchetti (esaurimento delle porte). R a cinque tuple (indirizzo IP di origine NAT, porta di origine e destinazione a 3 tuple) essere riutilizzati entro il timeout TCP TIME_WAIT.
Se non sono disponibili abbastanza tuple NAT, dropped_sent_packets_count
motivo è
OUT_OF_RESOURCES
. Per ulteriori informazioni sulle metriche, consulta Utilizzo di un'istanza VM
metriche.
Per informazioni su come ridurne l'utilizzo, 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. Ciò consente di assicura che le porte non vengano sprecate, ma possano causare la perdita di pacchetti mentre di porte allocate è in aumento.
Per ridurre il numero di pacchetti eliminati, considera quanto segue:
Se puoi incrementare le connessioni più lentamente, Cloud NAT per allocare altre porte.
Se le VM effettuano connessioni TCP, puoi configurare le VM con una valore di
tcp_syn_retries
, in modo da dare al sistema più tempo per la connessione e aumentano le possibilità che abbia successo.Ad esempio, per le VM Linux, puoi visualizzare l'impostazione attuale:
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 impegnativi e devi allocare rapidamente più porte, potrebbe essere necessario regolare il numero minimo di porte per VM. Visualizza la tua porta utilizzo e determinare un numero minimo appropriato di porte per ogni vm.
Pacchetti eliminati con motivo: conflitto indipendente dell'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 ulteriori informazioni sulle metriche, consulta Utilizzare
Metriche delle istanze VM.
Puoi ridurre le probabilità di conflitti indipendenti dagli endpoint utilizzando il comando le seguenti tecniche:
Disattiva la mappatura indipendente degli 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. Disabilitazione in corso... o l'abilitazione della mappatura indipendente degli endpoint non interrompe e connessioni a Internet.
Aumenta il numero minimo predefinito di porte NAT per VM istanza, in modo che la prenotazione delle porte può assegnare più indirizzi IP di origine NAT e tuple di porte di origine a ogni VM del 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 vengono utilizzate:
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 quale 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 di Google Kubernetes Engine, puoi automatizzare questa configurazione utilizzando un
DaemonSet
con privilegi.
Per i cluster GKE, disabilita il NAT di origine eseguito su nodo per i pacchetti inviati alle destinazioni di interesse. Puoi farlo in uno dei seguenti modi in 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 connessione nella tabella può essere dovuta a uno dei seguenti motivi: motivi:
- È stato raggiunto il timeout di una connessione TCP stabilita perché il timeout di inattività della connessione TCP è scaduto per inattività.
- Un endpoint esterno non riesce a stabilire una nuova connessione prima del protocollo TCP Transitory
Timeout inattività connessione scaduto. 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. Di conseguenza, tutti i pacchetti ricevuti vengono eliminati.
- Se rimuovi gli IP NAT dal gateway mentre le connessioni NAT sono ancora attive, le mappature NAT non saranno più valide e queste connessioni verranno dalla tabella di monitoraggio delle connessioni e l'eventuale traffico di ritorno viene eliminato.
Prima di risolvere i cali di pacchetti in entrata, verifica se questi hanno effettivamente un impatto sulla tua applicazione. Per confermare, controlla l'eventuale presenza di errori nell'applicazione ogni volta che si verificano picchi in pacchetti in entrata eliminati.
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 nell'applicazione, in modo che le connessioni a lunga esecuzione possono rimanere aperti per un periodo più lungo.
- Aumenta il valore per il timeout per inattività connessione transitoria TCP, in modo che endpoint esterni che ricevono traffico (avviati dalle risorse Google Cloud) un gateway Cloud NAT ha più tempo per rispondere e stabilire la connessione.
- Aumenta il valore per il timeout per inattività della connessione stabilita TCP, se disponi ha ridotto in modo significativo il valore predefinito.
Necessità di 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
nat_allocation_failed
o una metrica di valutazione. 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 nelle situazioni in cui l'allocazione di più indirizzi IP NAT non è possibile né auspicabile.
Per ridurre l'utilizzo delle porte, completa i seguenti passaggi:
Disabilita Indipendente dagli endpoint Mappatura.
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. Utilizzare un numero basso per indicare il numero minimo il numero di porte riduce lo spreco di indirizzi IP di origine NAT e tuple di porte di origine 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 più basso possibile di porte 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:- Considera il valore medio di
compute.googleapis.com/nat/port_usage
in più 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.
- Considera il valore medio di
Determina il numero massimo più basso possibile di porte per soddisfare le tue esigenze. Ancora una volta, rivedi
compute.googleapis.com/nat/port_usage
come input nel tuo processo decisionale. Considera il valore massimo dicompute.googleapis.com/nat/port_usage
in un periodo di tempo rappresentativo di rappresentativo di un numero di VM come punto di partenza per il numero massimo porte. Ricorda che l'impostazione di un numero massimo troppo alto può impedire ad altre VM di ricevere l'indirizzo IP di origine NAT e le tuple di porte di origine.L'individuazione dei valori giusti per il numero minimo e massimo di porte implica e 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 relativi 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. Ciò consente a Cloud NAT usare rapidamente la stessa 5 tuple invece di dover usare una sola a 5 tuple, che potrebbero richiedere l'allocazione di ulteriori indirizzi IP e origini NAT tuple di porte per ogni VM di invio. Per la procedura per modificare i timeout NAT, consulta Modificare i timeout NAT.
Domande frequenti
Restrizione 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 un 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 a livello di regione come IP NAT indirizzi IP esterni. Anche se sono regionali, sono instradabili pubblicamente. Per informazioni sui diversi modi in cui gli indirizzi IP NAT possono essere allocati assegnati, vedi indirizzi IP NAT.
Quando è possibile e non può essere utilizzato Cloud NAT
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 IP esterno di destinazione, 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 può comunque fornire Servizi NAT a pacchetti inviati da intervalli di indirizzi IP alias della stessa rete a riga di comando. Per ulteriori dettagli, consulta Cloud NAT specifiche e Compute Engine un'interazione.
Public NAT 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 rete VPC attraverso un gateway internet predefinito e poi riceve nella stessa rete.
Quando la VM di origine invia un pacchetto alla destinazione, Public NAT esegue il NAT (SNAT) di origine prima di consegnare il pacchetto alla seconda istanza. Il NAT pubblico esegue la destinazione NAT (DNAT) per le risposte dal secondo alla prima istanza. Per un esempio dettagliato, consulta Flusso di lavoro e configurazione di NAT pubblico di base.
Posso utilizzare Private NAT per la comunicazione tra VM nella stessa rete VPC?
No, Private NAT non esegue NAT sul traffico tra VM nello stesso rete VPC.
Connessioni in arrivo indesiderate 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 entrata non richieste.
Per ulteriori informazioni, consulta le specifiche di Cloud NAT.
Tuttavia, il perimetro della rete di Google Cloud potrebbe rispondere ai ping se
l'indirizzo IP di destinazione è l'indirizzo IP esterno del gateway Cloud NAT
ha mappature di porte attive su 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 colleghi 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 NAT per una VM, prenota tuple di indirizzi e porte di origine in base alla porta di una procedura di prenotazione.
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 della porta.
Per ulteriori informazioni su come diminuire il numero minimo di vedi la prossima domanda.
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 comportare la prenotazione di un numero inferiore di porte per VM durante la procedura di prenotazione delle porte. 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 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 questo valore, è ridotto, Cloud NAT regola automaticamente il numero di porte per ogni istanza inattiva, 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 abiliti Cloud NAT per l'IP principale di una subnet questo intervallo, Google Cloud abilita automaticamente Accesso privato Google. Per maggiori informazioni le informazioni, vedi Interazione di accesso privato Google.