Risolvere i problemi di configurazione

Questa guida può aiutarti a risolvere i problemi comuni di Cloud NAT.

Problemi comuni

Le VM possono connettersi a internet in modo imprevisto, senza Cloud NAT

Se le istanze di macchine virtuali (VM) o di container possono connettersi a internet senza Cloud NAT, ma non vuoi che lo facciano, verifica la presenza dei seguenti problemi:

  • Determina se l'interfaccia di rete della VM ha un indirizzo IP esterno. Se all'interfaccia di rete è assegnato un indirizzo IP esterno, Google Cloud esegue automaticamente one-to-one NAT 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 su come modificare o assegnare un indirizzo IP esterno a un'istanza esistente.

  • Assicurati che il cluster Google Kubernetes Engine (GKE) sia un cluster privato. Ogni VM nodo in un cluster non privato ha un indirizzo IP esterno, quindi ogni nodo può utilizzare le route nella rete Virtual Private Cloud (VPC) il cui hop successivo è il gateway internet predefinito senza utilizzare Cloud NAT. Per ulteriori informazioni, anche sul modo in cui i cluster non privati interagiscono con i gateway Cloud NAT, consulta Interazione di 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 personalizzate 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 dell'hop successivo o le VM di backend per un bilanciatore del carico di rete passthrough interno potrebbero avere a loro volta indirizzi IP esterni o un tunnel Cloud VPN potrebbe connettersi a una rete che offre accesso a internet.

    • Le route dinamiche personalizzate apprese dalle reti on-premise dai router Cloud nella tua 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 Applicabilità e ordine del routing.

Nessun log generato

  • Verifica che il logging NAT sia abilitato.
  • Verifica che la visualizzazione dei log non stia filtrando i log che stai cercando. Per le istruzioni, consulta Visualizzazione dei log.

  • Assicurati che una regola firewall non blocchi il traffico. Le regole firewall che bloccano il traffico in uscita (in uscita) vengono applicate prima che il traffico fosse inviato al gateway NAT. Puoi utilizzare il logging delle regole firewall per verificare se le regole in uscita personalizzate bloccano il traffico in uscita.

  • Esamina i 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 di log non escluda i log che vuoi conservare. Puoi cancellare un filtro dei log in modo che nulla sia escluso.

  • Cloud NAT non registra ogni singolo evento. Durante i periodi di traffico in uscita elevato, il logging NAT viene limitato, proporzionale al tipo di macchina della VM. I log degli errori o di traduzione potrebbero essere eliminati e non è possibile determinare cosa viene omesso durante la limitazione.

Pacchetti eliminati con motivo: risorse esaurite

Se noti una perdita di pacchetti dalle VM che utilizzano Cloud NAT, è possibile che non siano disponibili abbastanza tuple di porte e indirizzi IP di origine NAT per l'utilizzo della VM al momento della perdita di pacchetti (esaurimento delle porte). Una tupla a cinque tuple (indirizzo IP di origine NAT, porta di origine e destinazione a 3 tuple) non può essere riutilizzata entro il timeout TCP TIME_WAIT.

Se non sono disponibili abbastanza tuple NAT, il dropped_sent_packets_count motivo è OUT_OF_RESOURCES. Per ulteriori informazioni sulle metriche, consulta Utilizzo delle metriche delle istanze VM.

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 dei pacchetti quando viene utilizzata l'allocazione dinamica delle porte.

Pacchetti eliminati quando è configurata l'allocazione dinamica delle porte

L'allocazione dinamica delle porte rileva quando una VM sta per uscire dalle porte e raddoppia il numero di porte allocate alla VM. In questo modo puoi assicurarti che le porte non vengano sprecate, ma che possano causare la perdita di pacchetti mentre aumenta il numero di porte allocate.

Per ridurre il numero di pacchetti eliminati, considera quanto segue:

  • Se puoi incrementare le connessioni più lentamente, Cloud NAT ha più tempo per allocare più porte.

  • Se le VM creano connessioni TCP, puoi configurare le VM con un valore maggiore per tcp_syn_retries, in modo che il sistema abbia più tempo per stabilire la connessione e aumenti le possibilità che la connessione vada a buon fine.

    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 bursanti e devi allocare rapidamente più porte, potresti dover regolare il numero minimo di porte per VM. Visualizza l'utilizzo della porta e determina un numero minimo appropriato di porte per VM.

Pacchetti eliminati con motivo: conflitto indipendente dell'endpoint

Se noti una perdita di pacchetti dalle VM che utilizzano Public NAT e hai attivato la mappatura indipendente dagli endpoint, la perdita di pacchetti potrebbe essere causata da un conflitto indipendente degli endpoint. Se lo è, il dropped_sent_packets_count motivo è ENDPOINT_INDEPENDENT_CONFLICT. Per ulteriori informazioni sulle metriche, consulta Utilizzo delle metriche delle istanze VM.

Puoi ridurre le probabilità di conflitti indipendenti dagli endpoint utilizzando le tecniche seguenti:

  • Disattiva la mappatura indipendente degli endpoint. Ciò consente alla nuova connessione da un determinato indirizzo IP di origine e una determinata porta di utilizzare un indirizzo IP e una porta di origine NAT diversi rispetto a prima. La disabilitazione o l'abilitazione della mappatura indipendente degli endpoint non interrompe le connessioni stabilite.

  • Aumenta il numero minimo predefinito di porte NAT per istanza VM, in modo che la procedura di prenotazione delle porte possa assegnare più tuple di porte e indirizzi IP 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 di porte di origine temporanee vengano assegnati lo stesso indirizzo IP di origine NAT e la stessa tupla di porte di origine.

  • Controlla quante porte di origine temporanea 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 tue istanze VM per utilizzare un set più ampio di porte di origine temporanee:

    • 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 quali intervalli di porte sono configurati con questi comandi:

        netsh int ipv4 show dynamicport tcp
        netsh int ipv4 show dynamicport udp
        
      • Puoi impostare il numero massimo di porte TCP e UDP di origine temporanea al massimo possibile (64.512) con questi 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 ogni nodo per i pacchetti inviati alle destinazioni di interesse. Puoi farlo in due modi:

Pacchetti ricevuti persi

Un gateway Cloud NAT mantiene una tabella di monitoraggio delle connessioni per archiviare i dettagli delle connessioni attive e le mappature di porte e indirizzi IP, nonché la modalità di traduzione degli indirizzi IP e delle porte delle VM in porte e indirizzi IP NAT. Un gateway Cloud NAT elimina 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:

  • Una connessione TCP stabilita è scaduta perché il timeout per inattività della connessione stabilita TCP è scaduto per inattività.
  • Un endpoint esterno non riesce a stabilire una nuova connessione prima della scadenza 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 un SYN 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 per 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, i mapping NAT non sono più validi e queste connessioni vengono rimosse immediatamente dalla tabella di monitoraggio delle connessioni e l'eventuale traffico di ritorno viene eliminato.

Prima di gestire le interruzioni dei pacchetti in entrata, verifica se le interruzioni influiscono effettivamente sulla tua applicazione. Per conferma, controlla se nell'applicazione sono presenti errori ogni volta che si verificano picchi di pacchetti in entrata eliminati.

Se le cadute dei 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 possano rimanere aperte per un periodo più lungo.
  • Aumenta il valore di Timeout inattività connessione transitoria TCP, in modo che gli endpoint esterni che ricevono traffico (avviati dalle risorse Google Cloud) attraverso un gateway Cloud NAT abbiano più tempo per rispondere e stabilire la connessione.
  • Aumenta il valore per il timeout per inattività della connessione stabilita TCP se hai diminuito in modo significativo il valore predefinito.

Necessità di allocare più indirizzi IP

A volte le VM non sono in grado di connettersi a internet perché non hai un numero sufficiente di indirizzi IP NAT. Questo problema può essere causato da più fattori. Per saperne di più, consulta la tabella seguente.

Causa principale Sintomo Soluzione
Hai allocato manualmente gli indirizzi, ma non ne hai allocato un numero sufficiente, in base all'utilizzo attuale delle porte.
  • Nella console Google Cloud viene visualizzato l'errore Devi allocare almeno "X" indirizzi IP per consentire a tutte le istanze di accedere a internet.
  • Il valore della metrica nat_allocation_failed è true.

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 nessuna VM nel gateway NAT. Per informazioni sui criteri di avviso, consulta Definizione dei criteri di avviso.

Riduci l'utilizzo delle porte

Puoi ridurre al minimo il numero di porte utilizzate da ogni VM nei casi in cui non è possibile o auspicabile allocare più indirizzi IP NAT.

Per ridurre l'utilizzo delle porte, completa i seguenti passaggi:

  1. Disabilita la mappatura indipendente dagli endpoint.

  2. 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 indirizzi IP di origine NAT e di tuple di porte di origine tra il numero minimo e massimo di porte incluse. L'utilizzo di un numero basso per il numero minimo di porte riduce lo spreco di indirizzi IP di origine NAT e di tuple di porte di origine sulle VM con meno connessioni attive. Se si verificano timeout della connessione durante l'allocazione delle porte, consulta Ridurre le perdite di pacchetti con l'allocazione dinamica delle porte.

  3. 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 sulla revisione del numero di porte utilizzate (compute.googleapis.com/nat/port_usage) come input per il processo decisionale. Per informazioni su come trovare l'utilizzo della porta, 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 un periodo di tempo rappresentativo per un numero rappresentativo di VM.
    • Considera il valore di compute.googleapis.com/nat/port_usage che si ripete più di frequente in un periodo di tempo rappresentativo per un numero rappresentativo di VM.
  4. Determina il numero massimo più basso possibile di porte per soddisfare le tue esigenze. Anche in questo caso, rivedi compute.googleapis.com/nat/port_usage come contributo al tuo processo decisionale. Considera il valore massimo di compute.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 alto può impedire ad altre VM di ricevere l'indirizzo IP di origine NAT e le tuple di porte di origine.

  5. L'individuazione dei valori giusti per il numero minimo e massimo di porte richiede un test iterativo. Per la procedura per modificare il numero minimo e massimo di porte, consulta Modificare il numero minimo o massimo di porte quando è configurata l'allocazione dinamica delle porte.

  6. Esamina i timeout NAT, il loro significato e i relativi valori predefiniti. Se devi creare rapidamente una serie di connessioni TCP nella stessa destinazione a 3 tuple, valuta la possibilità di ridurre il tempo di attesa TCP, in modo che Cloud NAT possa riutilizzare più rapidamente l'indirizzo IP di origine NAT e le tuple di porte di origine. In questo modo Cloud NAT può utilizzare più rapidamente la stessa a 5 tuple anziché una a 5 tuple univoca, il che potrebbe richiedere l'allocazione di ulteriori tuple di porte e indirizzi IP di origine NAT 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 una regione, di una rete VPC o di un router Cloud.

Se hai bisogno di fornire connettività per altre regioni o reti VPC, crea per loro gateway Cloud NAT aggiuntivi.

Gli indirizzi IP NAT esterni utilizzati dai gateway Cloud NAT sono globali o a livello di regione?

I gateway Cloud NAT utilizzano indirizzi IP esterni a livello di regione come indirizzi IP NAT. Anche se sono regionali, sono instradabili pubblicamente. Per informazioni sui diversi modi in cui gli indirizzi IP NAT possono essere assegnati o assegnati, consulta 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?

Generalmente 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 può comunque fornire servizi NAT ai pacchetti inviati da 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.

Il NAT pubblico consente a una VM di origine la cui interfaccia di rete è priva 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 l'origine e la destinazione si trovano nella stessa rete VPC?

Sì. Il percorso di rete prevede l'invio del traffico dalla rete VPC attraverso un gateway internet predefinito, per poi riceverlo 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 dalla seconda istanza alla prima. Per un esempio dettagliato, vedi Configurazione e flusso di lavoro di Public NAT di base.

Posso utilizzare Private NAT per la comunicazione tra le VM nella stessa rete VPC?

No, Private NAT non esegue NAT sul traffico tra VM nella stessa rete VPC.

Connessioni in entrata indesiderate non supportate

Cloud NAT consente le connessioni in entrata (ad esempio, SSH) verso 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 è un indirizzo IP esterno del gateway Cloud NAT con mappature delle porte attive su almeno un'istanza VM. Per vedere 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 che non ha un indirizzo IP esterno, consulta Scegliere un'opzione di connessione per le VM solo interne. Ad esempio, nell'ambito dell'esempio di configurazione di Compute Engine per Cloud NAT, puoi connetterti 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 l'indirizzo di origine e le tuple di porte di origine in base alla procedura di prenotazione delle porte.

Per maggiori informazioni, consulta gli esempi di prenotazioni di porte.

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 lo modifichi in un secondo momento. Ogni gateway Cloud NAT prenota tuple di indirizzi e porte di origine in base alla procedura di prenotazione delle porte.

Per ulteriori informazioni su come diminuire il numero minimo di porte, vedi la domanda successiva.

Posso ridurre il numero minimo di porte per VM dopo aver creato il gateway Cloud NAT?

Sì, ma la riduzione del numero minimo di porte potrebbe comportare la prenotazione di un numero inferiore di porte per VM nella procedura di prenotazione delle porte. In questi casi, le connessioni TCP esistenti possono essere reimpostate e, in tal caso, devono essere ristabilite.

Quando si cambia la mappatura NAT da intervalli principali e secondari a solo intervallo primario, le porte aggiuntive allocate a ciascuna istanza vengono rilasciate immediatamente?

No. Eventuali porte aggiuntive utilizzate dagli intervalli secondari vengono conservate dalle istanze fino a quando l'impostazione del numero minimo di porte per VM non viene ridotta. Quando Cloud NAT è configurato per mappare intervalli secondari (alias) per le subnet, Cloud NAT assegna un minimo di 1024 porte per istanza, in base alla procedura di prenotazione delle porte.

Passando a Solo intervalli primari, Cloud NAT conserva le 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 a Primario, il numero effettivo di porte assegnate a queste istanze non viene modificato finché non viene ridotta anche l'impostazione del numero minimo di porte per VM.

Per ridurre il numero di porte allocate a queste istanze, dopo il passaggio agli intervalli principali, è necessario ridurre l'impostazione del numero minimo di porte per VM. Una volta ridotto questo valore, Cloud NAT regola automaticamente il numero di porte allocate per istanza in basso, riducendo 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'intervallo IP principale di una subnet, Google Cloud abilita automaticamente l'accesso privato Google. Per maggiori informazioni, vedi Interazione di accesso privato Google.

Passaggi successivi