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 i 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 il NAT one-to-one 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 Modifica o assegnazione di un indirizzo IP esterno a un'istanza esistente.

  • Assicurati che il cluster Google Kubernetes Engine (GKE) sia un cluster privato. Ogni VM dei nodi in un cluster non privato ha un indirizzo IP esterno, perciò ogni nodo può utilizzare le route nella tua rete Virtual Private Cloud (VPC) il cui hop successivo è il gateway internet predefinito senza fare affidamento su Cloud NAT. Per ulteriori 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à a internet tramite un hop successivo diverso dal gateway internet predefinito. Ad esempio:

    • Le route statiche personalizzate i cui hop successivi sono VM, bilanciatori del carico di rete passthrough interni o tunnel Cloud VPN potrebbero fornire indirettamente connettività a internet. Ad esempio, le VM dell'hop successivo o 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 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à maggiori rispetto a quelle i cui hop successivi sono gateway internet predefiniti. Per informazioni su come Google Cloud valuta le route, consulta l'articolo sull'applicabilità e l'ordine di routing.

Nessun log generato

  • Verifica che il logging NAT sia abilitato.
  • Controlla che la visualizzazione dei log non filtra i log che stai cercando. Per le istruzioni, consulta la sezione 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 venga inviato al gateway NAT. Puoi utilizzare il logging delle regole firewall per vedere se le regole in uscita personalizzate bloccano il traffico in uscita.

  • Esamina Tipi di Cloud NAT. La destinazione per il tuo 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 da non escludere nulla.

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

Pacchetti caduti con una ragione: risorse esaurite

Se noti una perdita di pacchetti nelle VM che utilizzano Cloud NAT, è possibile che non siano disponibili un numero sufficiente di tuppi per l'indirizzo IP di origine e la porta di origine NAT perché la VM possa utilizzare al momento della perdita di pacchetti (esaurimento delle porte). Un cinque tuple (indirizzo IP di origine NAT, porta di origine e 3 tuple di destinazione) non può essere riutilizzato entro il timeout TCP TIME_WAIT.

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

Vedi 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 i cali di pacchetti quando viene utilizzata l'allocazione dinamica delle porte.

Pacchetti ignorati 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ò aiuta a garantire che le porte non vengano sprecate, ma può comportare la perdita di pacchetti mentre il numero di porte allocate è in aumento.

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

  • Se puoi accelerare le connessioni, 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 da dare al sistema più tempo per stabilire la connessione e aumentare le probabilità che la connessione abbia esito positivo.

    Ad esempio, per le VM Linux, puoi visualizzare l'impostazione attuale:

      sysctl net.ipv4.tcp_syn_retries
      

    Se necessario, puoi aumentare il valore impostato:

      sudo sysctl -w net.ipv4.tcp_syn_retries=NUM
      

  • Se hai carichi di lavoro intensivi e devi allocare rapidamente più porte, potrebbe essere necessario 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 motivo: conflitto indipendente dall'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 dagli endpoint. Se lo è, il dropped_sent_packets_count motivo è ENDPOINT_INDEPENDENT_CONFLICT. Per ulteriori informazioni sulle metriche, consulta la pagina relativa all'utilizzo delle metriche delle istanze VM.

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

  • Disattiva la mappatura indipendente dagli endpoint. Ciò consente alla nuova connessione da una porta e un indirizzo IP di origine di utilizzare un indirizzo IP e una porta di origine NAT diversi da quelli utilizzati in precedenza. La disabilitazione o l'abilitazione della mappatura indipendente dagli endpoint non interrompe le connessioni stabilite.

  • Aumenta il numero minimo di porte NAT per istanza VM, in modo che la procedura di prenotazione delle porte possa assegnare più indirizzi IP di origine NAT e tuple delle porte di origine a ogni VM client. Ciò 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 della porta di origine.

  • Controlla quante porte di origine temporanee 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 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 temporanea (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 (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 ciascun nodo per i pacchetti inviati alle destinazioni di interesse. Puoi farlo in due modi:

Devi allocare più indirizzi IP

A volte le VM non possono connettersi a internet perché non hai abbastanza indirizzi IP NAT. Più fattori possono causare questo problema. 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, dato l'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 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 tuo 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 nelle situazioni in cui non è possibile o auspicabile l'allocazione di 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 certo numero di tuple di porte di origine e indirizzi IP di origine NAT 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 le tuple delle porte di origine sulle VM con meno connessioni attive. Se si verificano timeout della connessione durante l'allocazione delle porte, consulta Ridurre il calo dei 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 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 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 di compute.googleapis.com/nat/port_usage che si verifica più di frequente in un periodo di tempo rappresentativo per un numero rappresentativo di VM.
  4. Determina il numero massimo possibile di porte più basso per soddisfare le tue esigenze. Ancora una volta, esamina compute.googleapis.com/nat/port_usage come input del 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 alle altre VM di ricevere l'indirizzo IP di origine NAT e le tuple delle porte di origine.

  5. Trovare i valori corretti per il numero minimo e massimo di porte prevede test iterativi. 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, i relativi significati e i valori predefiniti. Se hai bisogno di creare rapidamente una serie di connessioni TCP nella stessa destinazione a 3 tuple di destinazione, 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 delle porte di origine. Ciò consente a Cloud NAT di utilizzare più rapidamente le stesse 5 tuple anziché dover utilizzare una singola tupla, il che potrebbe richiedere l'allocazione di indirizzi IP di origine NAT e tuple delle porte di origine aggiuntivi per ogni VM di invio. Per la procedura di modifica dei timeout NAT, consulta Modificare i timeout NAT.

Domande frequenti

Limitazione a livello di regione 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 devi fornire connettività per altre regioni o reti VPC, crea ulteriori gateway Cloud NAT per queste regioni.

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

I gateway Cloud NAT utilizzano gli indirizzi IP esterni a livello di regione come indirizzi IP NAT. Anche se sono a livello di regione, 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ò o 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 il servizio NAT 1 a 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 il traffico a una VM o a un bilanciatore del carico di destinazione che ha un indirizzo IP esterno, anche se l'origine e la destinazione si trovano nella stessa rete VPC?

Sì. Il percorso di rete prevede l'invio del traffico dalla rete VPC tramite un gateway internet predefinito e la ricezione nella stessa rete.

Quando la VM di origine invia un pacchetto alla destinazione, Public NAT esegue l'origine NAT (SNAT) prima di consegnare il pacchetto alla seconda istanza. Il servizio NAT pubblico esegue la tecnologia NAT di destinazione (DNAT) per le risposte dalla seconda istanza alla prima. 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 la traduzione 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) alle 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 Google Cloud potrebbe rispondere ai ping se l'indirizzo IP di destinazione è un indirizzo IP esterno di un gateway Cloud NAT con mapping 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 che non ha un indirizzo IP esterno, consulta Scegliere un'opzione di connessione per le VM solo interne. Ad esempio, nell'ambito della configurazione di Compute Engine di esempio 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, prenota l'indirizzo di origine e le tuple delle porte di origine in base alla procedura di prenotazione delle porte.

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

Per ulteriori informazioni su come ridurre il numero minimo di porte, consulta la domanda successiva.

Posso ridurre 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 procedura di prenotazione delle porte riservando un numero inferiore di porte per VM. In questo caso, le connessioni TCP esistenti potrebbero essere reimpostate e, in tal caso, devono essere ristabilite.

Quando si cambia la mappatura NAT dagli intervalli primari e secondari solo all'intervallo principale, le porte aggiuntive allocate a ogni istanza vengono rilasciate immediatamente?

No. Eventuali porte aggiuntive utilizzate da intervalli secondari vengono conservate dalle istanze fino a quando il numero di porte minime per VM non viene ridotto. 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.

Se passi solo agli intervalli principali, Cloud NAT conserva le porte allocate aggiuntive per le istanze a cui sono già state assegnate. Dopo aver modificato gli intervalli per cui Cloud NAT viene applicato solo a Primario, il numero effettivo di porte assegnate a queste istanze non viene modificato fino a quando 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 il numero minimo di porte per VM. Dopo aver ridotto questo valore, Cloud NAT regola automaticamente il numero di porte allocate per istanza, riducendo il consumo delle 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 ulteriori informazioni, consulta Interazione dell'accesso privato Google.

Passaggi successivi