Usare SNAT (Source Network Address Translation) per le connessioni in uscita

Alcuni scenari richiedono che le macchine virtuali o le istanze dell'ambiente di calcolo abbiano connettività in uscita verso Internet. Gli indirizzi IP front-end di un servizio di bilanciamento del carico pubblico possono essere usati per fornire connettività in uscita a Internet per le istanze back-end. Questa configurazione usa SNAT (Source Network Address Translation) per convertire l'INDIRIZZO IP privato della macchina virtuale nell'indirizzo IP pubblico del servizio di bilanciamento del carico. SNAT esegue il mapping dell'indirizzo IP del back-end all'indirizzo IP pubblico del servizio di bilanciamento del carico. SNAT impedisce alle origini esterne di avere un indirizzo diretto alle istanze di back-end.

Metodi di connettività in uscita di Azure

I metodi seguenti sono i metodi più comunemente usati da Azure per abilitare la connettività in uscita:

# Method Tipo di allocazione delle porte Livello di produzione? Valutazione
1 Usare gli indirizzi IP front-end di un servizio di bilanciamento del carico per le regole in uscita tramite regole in uscita Statico, esplicito Sì, ma non su larga scala Ok
2 Associare un gateway NAT alla subnet Dinamico, esplicito Migliore
3 Assegnare un indirizzo IP pubblico alla macchina virtuale Statico, esplicito Ok
4 Accesso in uscita predefinito Implicito No Peggiore

Diagram of Azure outbound options.

1. Usare l'indirizzo IP front-end di un servizio di bilanciamento del carico per le regole in uscita tramite regole in uscita

Diagram public load balancer with outbound rules.

Le regole in uscita consentono di definire in modo esplicito SNAT (source network address translation) per un servizio di bilanciamento del carico pubblico sku standard. Questa configurazione consente di usare l'INDIRIZZO IP pubblico o gli INDIRIZZI IP del servizio di bilanciamento del carico per la connettività in uscita delle istanze back-end.

Questa configurazione abilita:

  • Mascheramento IP

  • Semplificazione degli elenchi consentiti

  • Riduce il numero di risorse IP pubbliche per la distribuzione

Con le regole in uscita, si ha il controllo dichiarativo completo sulla connettività Internet in uscita. Le regole in uscita consentono di ridimensionare e ottimizzare questa capacità in base alle esigenze specifiche tramite l'allocazione manuale delle porte. Allocare manualmente la porta SNAT in base alle dimensioni del pool back-end e al numero di front-endIPConfigurations consente di evitare l'esaurimento SNAT.

È possibile allocare manualmente le porte SNAT in base a "porte per istanza" o "numero massimo di istanze back-end". Se nel back-end sono presenti macchine virtuali, è consigliabile allocare le porte in base alle "porte per istanza" per ottenere il massimo utilizzo delle porte SNAT.

Calcolare le porte per ogni istanza come indicato di seguito:

Numero di indirizzi IP front-end * 64K/ Numero di istanze back-end

Se si dispone di set di scalabilità di macchine virtuali nel back-end, è consigliabile allocare le porte in base al "numero massimo di istanze back-end". Se al back-end vengono aggiunte più macchine virtuali rispetto alle porte SNAT rimanenti consentite, è possibile bloccare la scalabilità orizzontale di set di scalabilità di macchine virtuali oppure le nuove macchine virtuali non riceveranno porte SNAT sufficienti.

Per altre informazioni sulle regole in uscita, vedere Regole in uscita.

2. Associare un gateway NAT alla subnet

Diagram of a NAT gateway and public load balancer.

Il gateway NAT di Azure semplifica la connettività Internet solo in uscita per le reti virtuali. Quando viene configurato in una subnet, per tutta la connettività in uscita vengono usati gli indirizzi IP pubblici statici specificati. La connettività in uscita è possibile senza bilanciamento del carico o indirizzi IP pubblici collegati direttamente alle macchine virtuali. Il gateway NAT è completamente gestito e altamente resiliente.

L'uso di un gateway NAT è il metodo migliore per la connettività in uscita. Un gateway NAT è altamente estendibile, affidabile e non ha gli stessi problemi di esaurimento delle porte SNAT.

Per altre informazioni sul gateway NAT di Azure, vedere Informazioni sul gateway NAT di Azure.

3. Assegnare un indirizzo IP pubblico alla macchina virtuale

Diagram of virtual machines with instance level public IP addresses.

Associazioni Method Protocolli IP
IP pubblico nella scheda di interfaccia di rete della macchina virtuale SNAT (Source Network Address Translation)
non viene usato.
TCP (Transmission Control Protocol)
UDP (User Datagram Protocol)
ICMP (Internet Control Message Protocol)
ESP (Incapsulating Security Payload)

Il traffico torna al client richiedente dall'indirizzo IP pubblico della macchina virtuale (IP a livello di istanza).

Azure usa l'indirizzo IP pubblico assegnato alla configurazione IP della scheda di interfaccia di rete dell'istanza per tutti i flussi in uscita. L'istanza ha tutte le porte temporanee disponibili. Non importa se la macchina virtuale è con carico bilanciato o meno. Questo scenario ha la precedenza rispetto agli altri.

Un indirizzo IP pubblico assegnato a una macchina virtuale è una relazione 1:1, anziché 1:molti, e viene implementato come NAT 1:1 senza stato.

4. Accesso in uscita predefinito

Diagram of default outbound access.

In Azure alle macchine virtuali create in una rete virtuale senza la connettività in uscita esplicita definita viene assegnato un indirizzo IP pubblico in uscita predefinito. Questo indirizzo IP abilita la connettività in uscita dalle risorse a Internet. Questo accesso viene definito accesso in uscita predefinito. Questo metodo di accesso non è consigliato perché non è sicuro e gli indirizzi IP sono soggetti a modifiche.

Importante

Il 30 settembre 2025 l'accesso in uscita predefinito per le nuove distribuzioni verrà ritirato. Per altre informazioni, consultare l'annuncio ufficiale. È consigliabile usare una delle forme di connettività esplicita, come illustrato nelle opzioni 1-3 precedenti.

Che cosa sono le porte SNAT?

Le porte vengono usate per generare identificatori univoci usati per gestire flussi distinti. Internet usa una tupla a cinque per fornire questa distinzione.

Se viene usata una porta per le connessioni in ingresso, ha un listener per le richieste di connessione in ingresso su tale porta. Tale porta non può essere usata per le connessioni in uscita. Per stabilire una connessione in uscita, viene usata una porta temporanea per fornire alla destinazione una porta su cui comunicare e gestire un flusso di traffico distinto. Quando queste porte temporanee vengono usate per SNAT, vengono chiamate porte SNAT.

Per definizione, ogni indirizzo IP ha 65.535 porte. Ogni porta può essere usata per le connessioni in ingresso o in uscita per TCP (Transmission Control Protocol) e UDP (User Datagram Protocol). Quando un indirizzo IP pubblico viene aggiunto come IP front-end a un servizio di bilanciamento del carico, 64.000 porte sono idonee per SNAT.

Ogni porta usata in una regola NAT in ingresso o di bilanciamento del carico utilizza un intervallo di otto porte dalle 64.000 porte SNAT disponibili. Questo utilizzo riduce il numero di porte idonee per SNAT, se lo stesso INDIRIZZO IP front-end viene usato per la connettività in uscita. Se le porte utilizzate dalle regole NAT in ingresso o di bilanciamento del carico si trovano nello stesso blocco di otto porte utilizzate da un'altra regola, le regole non richiedono porte aggiuntive.

Nota

Se è necessario connettersi a qualsiasi servizio PaaS di Azure supportato, ad esempio Archiviazione di Azure, Azure SQL o Azure Cosmos DB, è possibile usare collegamento privato di Azure per evitare completamente SNAT. collegamento privato di Azure invia il traffico dalla rete virtuale ai servizi di Azure tramite la rete backbone di Azure anziché tramite Internet.

collegamento privato è l'opzione consigliata sugli endpoint di servizio per l'accesso privato ai servizi ospitati in Azure. Per altre informazioni sulla differenza tra collegamento privato ed endpoint di servizio, vedere Confrontare endpoint privati ed endpoint di servizio.

Come funziona SNAT predefinito?

Quando una macchina virtuale crea un flusso in uscita, Azure converte l'indirizzo IP di origine in un indirizzo IP temporaneo. Questa traduzione viene eseguita tramite SNAT.

Se si usa SNAT senza regole in uscita tramite un servizio di bilanciamento del carico pubblico, le porte SNAT vengono preallocate come descritto nella tabella di allocazione delle porte SNAT predefinite seguenti:

Tabella di allocazione delle porte predefinita

Quando si selezionano regole di bilanciamento del carico per l'uso dell'allocazione delle porte predefinite o le regole in uscita vengono configurate con "Usa il numero predefinito di porte in uscita", le porte SNAT vengono allocate per impostazione predefinita in base alle dimensioni del pool back-end. I back-end riceveranno il numero di porte definite dalla tabella, per indirizzo IP front-end, fino a un massimo di 1024 porte.

Ad esempio, con 100 macchine virtuali in un pool back-end e un solo ip front-end, ogni macchina virtuale riceverà 512 porte. Se viene aggiunto un secondo indirizzo IP front-end, ogni macchina virtuale riceverà altre 512 porte. Ciò significa che ogni macchina virtuale viene allocata per un totale di 1024 porte. Di conseguenza, l'aggiunta di un terzo indirizzo IP front-end non aumenterà il numero di porte SNAT allocate oltre 1024 porte.

Come regola generale, il numero di porte SNAT fornite quando l'allocazione delle porte predefinite viene sfruttata può essere calcolata come MIN(# delle porte SNAT predefinite fornite in base alle dimensioni del pool * numero di indirizzi IP front-end associati al pool, 1024)

La tabella seguente illustra le preallocazioni delle porte SNAT per un singolo IP front-end, a seconda delle dimensioni del pool back-end:

Dimensioni del pool (istanze VM) Porte SNAT predefinite
1-50 1.024
51-100 512
101-200 256
201-400 128
401-800 64
801-1.000 32

Esaurimento delle porte

Ogni connessione alla stessa porta IP e destinazione di destinazione usa una porta SNAT. Questa connessione mantiene un flusso di traffico distinto dall'istanza back-end o dal client a un server. Questo processo fornisce al server una porta distinta su cui indirizzare il traffico. Senza questo processo, il computer client non è a conoscenza del flusso di cui fa parte un pacchetto.

Si supponga di avere più browser che passano a https://www.microsoft.com, ovvero:

  • IP di destinazione = 23.53.254.142

  • Porta di destinazione = 443

  • Protocollo = TCP

Senza porte SNAT per il traffico restituito, il client non può separare un risultato di una query da un'altra.

Le connessioni in uscita possono scoppiare. È possibile allocare porte insufficienti a un'istanza back-end. Usare la funzionalità di riutilizzo della connessione all'interno dell'applicazione. Senza riutilizzo della connessione, il rischio di esaurimento delle porte SNAT è aumentato.

Per altre informazioni sul pool di connessioni con il servizio app Azure, vedere Risoluzione degli errori di connessione in uscita intermittenti nel servizio app Azure

Le nuove connessioni in uscita a un indirizzo IP di destinazione hanno esito negativo quando si verifica l'esaurimento delle porte. le Connessione hanno esito positivo quando una porta diventa disponibile. Questo esaurimento si verifica quando le 64.000 porte di un indirizzo IP vengono distribuite in molte istanze back-end. Per indicazioni sulla mitigazione dell'esaurimento delle porte SNAT, vedere la guida alla risoluzione dei problemi.

Per le connessioni TCP, il servizio di bilanciamento del carico usa una singola porta SNAT per ogni indirizzo IP e porta di destinazione. Questo multiuso consente più connessioni allo stesso indirizzo IP di destinazione con la stessa porta SNAT. Questo multiuso è limitato se la connessione non è a porte di destinazione diverse.

Per le connessioni UDP, il servizio di bilanciamento del carico usa un algoritmo NAT con restrizioni di porta, che utilizza una porta SNAT per indirizzo IP di destinazione indipendentemente dalla porta di destinazione.

Una porta viene riutilizzata per un numero illimitato di connessioni. La porta viene riutilizzata solo se l'INDIRIZZO IP o la porta di destinazione è diversa.

Vincoli

  • Quando una connessione è inattiva senza nuovi pacchetti inviati, le porte verranno rilasciate dopo 4 -120 minuti.

  • Questa soglia può essere configurata tramite regole in uscita.

  • Ogni indirizzo IP fornisce 64.000 porte che possono essere usate per SNAT.

  • Ogni porta può essere usata sia per le connessioni TCP che UDP a un indirizzo IP di destinazione

  • È necessaria una porta SNAT UDP se la porta di destinazione è univoca o meno. Per ogni connessione UDP a un INDIRIZZO IP di destinazione, viene usata una porta SNAT UDP.

  • Una porta TCP SNAT può essere usata per più connessioni allo stesso indirizzo IP di destinazione, purché le porte di destinazione siano diverse.

  • L'esaurimento SNAT si verifica quando un'istanza back-end esaurisce le porte SNAT specificate. Un servizio di bilanciamento del carico può comunque avere porte SNAT inutilizzate. Se le porte SNAT usate da un'istanza back-end superano le porte SNAT specificate, non è possibile stabilire nuove connessioni in uscita.

  • I pacchetti frammentati vengono eliminati a meno che non si trovi in uscita tramite un indirizzo IP pubblico a livello di istanza nella scheda di interfaccia di rete della macchina virtuale.

  • Le configurazioni IP secondarie di un'interfaccia di rete non forniscono comunicazioni in uscita (a meno che non sia associato un INDIRIZZO IP pubblico) tramite un servizio di bilanciamento del carico.

Passaggi successivi