Risolvere i problemi di configurazione

Questa guida può aiutarti a risolvere i problemi comuni relativi a 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 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 Cloudesegue automaticamente il NAT uno-a-uno per i pacchetti le cui origini corrispondono all'indirizzo IP interno principale dell'interfaccia. Per maggiori informazioni, consulta le specifiche di Cloud NAT.

    Per determinare se una VM ha un indirizzo IP esterno, consulta Modifica o assegna 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 route nella rete Virtual Private Cloud (VPC) il cui hop successivo è il gateway internet predefinito senza fare affidamento a Cloud NAT. Per maggiori informazioni, incluso il 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à 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 pass-through 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 o 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 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, vedi applicabilità e ordine del routing.

Non vengono generati log

  • Verifica che il logging NAT sia abilitato.
  • Controlla che la visualizzazione dei log non filtri i log che stai cercando. Per istruzioni, vedi Visualizzazione dei log.

  • Assicurati che una regola firewall non stia bloccando il traffico. Le regole 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 tue regole di uscita personalizzate bloccano il traffico in uscita.

  • Consulta 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 i periodi di traffico in uscita elevato, la registrazione NAT viene limitata in modo proporzionale al tipo di macchina della VM. I log di traduzione o degli errori potrebbero essere eliminati e non è possibile determinare cosa viene omesso durante la limitazione.

Pacchetti eliminati con il motivo: risorse esaurite

Se noti una perdita di pacchetti dalle VM che utilizzano Cloud NAT, il problema potrebbe essere dovuto al fatto che non sono disponibili tuple di indirizzo IP di origine NAT e porta di origine sufficienti per l'utilizzo da parte della VM al momento della perdita di pacchetti (esaurimento delle porte). Una tupla a cinque elementi (indirizzo IP di origine NAT, porta di origine e tupla a tre elementi di destinazione) non può essere riutilizzata entro il timeout TCP TIME_WAIT.

Se non sono disponibili tuple NAT sufficienti, il dropped_sent_packets_count motivo è OUT_OF_RESOURCES. Per saperne di più sulle metriche, vedi Utilizzare le metriche delle istanze VM.

Consulta Ridurre l'utilizzo delle porte per scoprire come 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 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 esaurire le porte e raddoppia il numero di porte allocate alla VM. In questo modo si evita lo spreco di porte, ma si possono verificare pacchetti persi mentre il numero di porte allocate aumenta.

Per ridurre il numero di pacchetti persi, valuta quanto segue:

  • Se riesci ad aumentare le connessioni più lentamente, Cloud NAT ha più tempo per allocare più porte.

  • Se le VM stabiliscono connessioni TCP, puoi configurarle con un valore maggiore per tcp_syn_retries, in modo che il sistema abbia più tempo per stabilire la connessione e aumentino le probabilità di riuscita della connessione.

    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 burst e devi allocare rapidamente più porte, potresti dover regolare 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 caso affermativo, il dropped_sent_packets_count motivo è ENDPOINT_INDEPENDENCE_CONFLICT. Per ulteriori informazioni sulle metriche, vedi Utilizzo delle 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 minimo predefinito 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 indirizzo IP client e porta di origine effimera venga assegnata la stessa tupla di indirizzo IP di origine e porta di origine NAT.

  • 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 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 effimere (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 effimere sul valore 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 Google Kubernetes Engine, puoi automatizzare questa configurazione utilizzando un DaemonSet privilegiato.

  • Per i cluster GKE, disabilita la NAT di origine eseguita su ogni nodo per i pacchetti inviati alle destinazioni di interesse. Puoi farlo in due modi:

Pacchetti ricevuti persi

Un gateway Cloud NAT gestisce una tabella di monitoraggio delle connessioni per archiviare i dettagli delle connessioni attive e i mapping di indirizzi IP e porte, ovvero come gli indirizzi IP e le porte delle VM vengono convertiti in indirizzi IP e porte 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 di inattività della connessione TCP stabilita è scaduto a causa di inattività.
  • Un endpoint esterno non riesce a stabilire una nuova connessione prima della scadenza del timeout di inattività della connessione temporanea 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 NAT e a una porta. Cloud NAT non accetta connessioni in entrata non richieste. Le voci per questi tipi di connessioni non saranno presenti nella tabella delle connessioni. Pertanto, tutti i pacchetti ricevuti verranno eliminati.
  • Se rimuovi gli indirizzi IP NAT dal gateway mentre le connessioni NAT sono ancora attive, i mapping NAT diventano non validi e queste connessioni vengono immediatamente rimosse dalla tabella di monitoraggio delle connessioni. Il traffico di ritorno viene eliminato.

Prima di risolvere il problema dei pacchetti in entrata eliminati, verifica se l'eliminazione influisce effettivamente sulla tua applicazione. Per confermare, controlla la presenza di errori nell'applicazione ogni volta che si verificano picchi nei pacchetti in entrata eliminati.

Se le eliminazioni di pacchetti in entrata influiscono sulla tua applicazione, prova a utilizzare le seguenti tecniche per risolvere il problema:

  • Utilizza 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 di inattività della connessione transitoria TCP, in modo che gli endpoint esterni che ricevono traffico (avviato dalle risorse) tramite un gateway Cloud NAT abbiano più tempo per rispondere e stabilire la connessione. Google Cloud
  • Aumenta il valore di timeout di inattività della connessione stabilita TCP se hai ridotto significativamente il valore predefinito.

È necessario allocare più indirizzi IP

A volte le tue VM non riescono a raggiungere internet perché non hai abbastanza indirizzi IP NAT. Questo problema può essere causato da diversi fattori. Per maggiori 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.
  • La console Google Cloud mostra 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.

Procedi in uno dei seguenti modi:

Hai superato un limite rigido 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 sulle policy di avviso, consulta Definizione delle policy 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 o auspicabile.

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

  1. Disattiva mapping 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 tuple di indirizzi IP di origine NAT e porte di origine compreso tra il numero minimo e il numero massimo di porte, inclusi. L'utilizzo di un numero basso per il numero minimo di porte riduce lo spreco di tuple di porta di origine 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 perdite di pacchetti con l'allocazione dinamica delle porte.

  3. 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 metodi di esempio 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 più frequente di compute.googleapis.com/nat/port_usage in un periodo di tempo rappresentativo per un numero rappresentativo di VM.
  4. Determina il numero massimo di porte più basso possibile per soddisfare le tue esigenze. Ancora una volta, esamina compute.googleapis.com/nat/port_usage come input per il 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 elevato può impedire ad altre VM di ricevere tuple di indirizzo IP di origine e porta di origine NAT.

  5. Trovare i valori giusti per le porte minime e massime richiede test iterativi. Per i passaggi per modificare i numeri di porta minimi e massimi, consulta Modificare le porte minime o massime quando è configurata l'allocazione dinamica delle porte.

  6. Esamina i timeout NAT, i relativi significati e i valori predefiniti. Se devi creare rapidamente una serie di connessioni TCP alla stessa tupla di destinazione, valuta la possibilità di ridurre il tempo di attesa TCP in modo che Cloud NAT possa riutilizzare più rapidamente le tuple di porta di origine e indirizzo IP di origine NAT. In questo modo, Cloud NAT può utilizzare più rapidamente la stessa 5-tupla anziché doverne utilizzare una univoca, il che potrebbe richiedere l'allocazione di ulteriori tuple di indirizzo IP di origine NAT e porta di origine per ogni VM di invio. Per i passaggi per modificare i timeout NAT, vedi 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 instradabili pubblicamente. Per informazioni sui diversi modi in cui gli indirizzi IP NAT possono essere allocati o assegnati, 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 di Compute Engine.

La NAT pubblica consente a una VM di origine la cui interfaccia di rete non ha 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 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, la NAT pubblica esegue il source NAT (SNAT) prima di consegnare il pacchetto alla seconda istanza. Public NAT esegue il NAT di destinazione (DNAT) per le risposte dalla seconda istanza alla prima. Per un esempio passo passo, vedi Configurazione e flusso di lavoro 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 le VM nella stessa rete VPC.

Connessioni in entrata non richieste non supportate

Cloud NAT consente connessioni in entrata (ad esempio SSH) alle istanze senza indirizzi IP esterni?

No, Cloud NAT non supporta le connessioni in entrata non richieste. Per maggiori informazioni, consulta le specifiche di Cloud NAT. Tuttavia,il perimetro di rete di Google Cloudpotrebbe rispondere ai ping se l'indirizzo IP di destinazione è un indirizzo IP esterno del gateway Cloud NAT con mappature delle porte attive ad 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 esempio di Compute Engine di 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 NAT per una VM, riserva tuple di indirizzo di origine e porta di origine in base alla procedura di prenotazione delle porte.

Per saperne di più, consulta gli esempi di prenotazione delle 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 modificandolo in un secondo momento. Ogni gateway Cloud NAT riserva le tuple di indirizzo di origine e porta di origine in base alla procedura di prenotazione delle porte.

Per ulteriori informazioni sulla riduzione del 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 comportare la prenotazione di un numero inferiore di porte per VM tramite la procedura di prenotazione delle porte. In questo caso, le connessioni TCP esistenti potrebbero essere reimpostate e, se necessario, devono essere ristabilite.

Quando si passa dalla mappatura NAT dagli intervalli primari e secondari al solo intervallo primario, le porte aggiuntive allocate a ogni istanza vengono rilasciate immediatamente?

No. Tutte le porte aggiuntive utilizzate dagli intervalli secondari vengono mantenute dalle istanze finché l'impostazione Numero minimo di porte per VM non viene ridotta. Quando Cloud NAT è configurato per mappare gli intervalli secondari (alias) per le subnet, Cloud NAT assegna un minimo di 1024 porte per istanza, in base alla procedura di prenotazione delle porte.

Se passi a intervalli primari, Cloud NAT conserva le porte aggiuntive allocate per le istanze a cui sono già state assegnate. Dopo aver modificato gli intervalli a cui viene applicato Cloud NAT in Solo primaria, il numero effettivo di porte assegnate a queste istanze non viene modificato finché non viene ridotta anche l'impostazione Porte minime per VM.

Per ridurre la quantità di porte allocate a queste istanze, dopo il passaggio agli intervalli principali, è necessario ridurre l'impostazione Porte minime per VM. Una volta ridotto questo valore, Cloud NAT regola automaticamente il numero di porte allocate per istanza, 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 viene abilitato automaticamente l'accesso privato Google. Per ulteriori informazioni, vedi Interazione con l'accesso privato Google.

Indaga sui problemi di Cloud NAT con Gemini Cloud Assist

Puoi utilizzare le indagini di Gemini Cloud Assist per risolvere i problemi di Cloud NAT.

Per creare un'indagine:

  1. Nella console Google Cloud , vai alla pagina Cloud NAT.

    Vai a Cloud NAT

  2. Fai clic sul gateway Cloud NAT.

  3. Nella pagina Dettagli del gateway Cloud NAT, fai clic su Analizza.

  4. Nel riquadro di creazione dell'indagine, descrivi il problema che vuoi risolvere, seleziona le risorse interessate e fai clic su Crea per avviare l'indagine.

    Per saperne di più, consulta Creare un'indagine.

Per gli avvisi e gli errori nella configurazione di Cloud NAT, viene visualizzato il pulsante Analizza con l'avviso. Quando crei un'indagine per un avviso o un errore, una descrizione del problema e le risorse pertinenti vengono precompilate automaticamente nel pannello di creazione dell'indagine.

Passaggi successivi