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 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 traslare l'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 di Azure per abilitare la connettività in uscita:
# | metodo | Tipo di allocazione delle porte | Livello di produzione? | Valutazione |
---|---|---|---|---|
1 | Usare l'indirizzo o 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 | Sì | Migliore |
3 | Assegnare un indirizzo IP pubblico alla macchina virtuale | Statico, esplicito | Sì | Ok |
4 | Accesso in uscita predefinito | Implicito | No | Peggiore |
1. Usare l'indirizzo IP front-end di un servizio di bilanciamento del carico per le regole in uscita tramite regole in uscita
Le regole in uscita consentono di definire in modo esplicito la SNAT (Source Network Address Translation) per un bilanciamento del carico pubblico SKU standard. Questa configurazione consente di usare l'indirizzo o gli indirizzi IP pubblici del servizio di bilanciamento del carico per fornire connettività in uscita alle istanze back-end.
Questa configurazione abilita:
Mascheramento IP
Semplificazione degli elenchi elementi consentiti
Riduzione del 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 proprie esigenze specifiche attraverso l'allocazione manuale delle porte. L'allocazione manuale della porta SNAT in base alle dimensioni del pool back-end e al numero di frontendIPConfigurations 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 * 64.000 / Numero di istanze back-end
Se nel back-end sono presenti set di scalabilità di macchine virtuali, è 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 l'aumento dei set di scalabilità di macchine virtuali o le nuove macchine virtuali non riceveranno porte SNAT sufficienti.
Quando vengono configurati più indirizzi IP front-end usando regole in uscita, le connessioni in uscita possono provenire da uno qualsiasi degli indirizzi IP front-end configurati per l'istanza back-end. Non è consigliabile creare dipendenze da cui è possibile selezionare l'indirizzo IP front-end per le connessioni.
Per altre informazioni sulle regole in uscita, vedere Regole in uscita.
2. Associare un gateway NAT alla subnet
Un gateway NAT di Azure semplifica la connettività Internet in sola 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 presenta gli stessi problemi di esaurimento delle porte SNAT.
Il gateway NAT ha la precedenza su altri metodi di connettività in uscita, tra cui un servizio di bilanciamento del carico, indirizzi IP pubblici a livello di istanza e Firewall di Azure.
Per altre informazioni sul gateway NAT di Azure, vedere Che cos'è il gateway NAT di Azure?.
3. Assegnare un indirizzo IP pubblico alla macchina virtuale
Associazioni | metodo | Protocolli IP |
---|---|---|
IP pubblico sulla scheda di interfaccia di rete della macchina virtuale | SNAT (Source Network Address Translation) non è utilizzata. |
TCP (Transmission Control Protocol) UDP (User Datagram Protocol) ICMP (Internet Control Message Protocol) ESP (Encapsulating 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 è importante se la macchina virtuale abbia un carico bilanciato o meno. Questo scenario ha la precedenza sugli altri, ad eccezione del gateway NAT.
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
In Azure, alle macchine virtuali create in una rete virtuale senza una connettività in uscita esplicita definita viene assegnato un indirizzo IP pubblico in uscita predefinito. Tale 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 creare questa distinzione.
Se una porta viene usata 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 la SNAT, vengono definite 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 i protocolli TCP (Transmission Control Protocol) e UDP (User Datagram Protocol). Quando un indirizzo IP pubblico viene aggiunto come IP front-end a un bilanciamento del carico, 64.000 porte sono idonee per la 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 la 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 connettere servizi PaaS di Azure supportati come Archiviazione di Azure, Azure SQL o Azure Cosmos DB, è possibile usare Collegamento privato di Azure per evitare completamente la 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 in relazione agli endpoint di servizio per l'accesso privato ai servizi ospitati di Azure. Per altre informazioni sulla differenza tra collegamento privato ed endpoint di servizio, vedere Confrontare endpoint privati ed endpoint di servizio.
Come funziona la SNAT predefinita?
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.
Usando SNAT senza regole in uscita tramite un 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 le regole di bilanciamento del carico sono selezionate per l'uso dell'allocazione delle porte predefinite o quando le regole in uscita sono configurate con l'opzione ''Usare il numero predefinito di porte di uscita'', le porte SNAT vengono allocate per impostazione predefinita in base alle dimensioni del pool back-end. I back-end ricevono 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 riceve 512 porte. Se viene aggiunto un secondo indirizzo IP front-end, ogni macchina virtuale riceve 512 porte aggiuntive. Ciò significa che ogni macchina virtuale viene allocata per un totale di 1.024 porte. Di conseguenza, l'aggiunta di un terzo indirizzo IP front-end NON aumenterà il numero di porte SNAT allocate oltre le 1024 porte.
Come regola generale, il numero di porte SNAT fornite quando viene applicata l'allocazione di porte predefinite può essere calcolato come MIN(# delle porte SNAT predefinite fornite in base alle dimensioni del pool * numero di indirizzi IP front-end associati al pool, 1024)
Nella tabella seguente sono riportate le preallocazioni delle porte SNAT per singolo front-end in base alle 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 e IP di destinazione usa una porta SNAT. Questa connessione mantiene un flusso di traffico distinto dall'istanza back-end o 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 in 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 è in grado di separare il risultato di una query da un'altra.
Le connessioni in uscita possono generare un burst. A un'istanza back-end potrebbe essere allocato un numero di porte insufficiente. Usare la funzione riutilizzo delle connessioni all'interno dell'applicazione. Senza riutilizzo delle connessioni, aumenta il rischio di esaurimento delle porte SNAT.
Per altre informazioni sul pool delle connessioni con il Servizio app di Azure, vedere Risoluzione degli errori di connessione in uscita intermittente nel Servizio app di Azure
Le nuove connessioni in uscita a un indirizzo IP di destinazione hanno esito negativo quando si verifica l'esaurimento delle porte. Le connessioni hanno esito positivo quando una porta diventa disponibile. L'esaurimento si verifica quando le 64.000 porte di un indirizzo IP vengono distribuite in numerose istanze back-end. Per materiale sussidiario sulla mitigazione dell'esaurimento delle porte SNAT, vedere la guida alla risoluzione dei problemi.
Riutilizzo delle porte
Per le connessioni TCP, il bilanciamento del carico usa una singola porta SNAT per ogni indirizzo IP e porta di destinazione. Per le connessioni allo stesso INDIRIZZO IP di destinazione, è possibile riutilizzare una singola porta SNAT purché la porta di destinazione sia diversa. Il riutilizzo non è possibile quando esiste già una connessione allo stesso indirizzo IP e porta di destinazione.
Per le connessioni UDP, il servizio di bilanciamento del carico usa un algoritmo NAT con restrizioni di porta, che utilizza una porta SNAT per IP di destinazione, indipendentemente dalla porta di destinazione.
Le singole porte possono essere riutilizzate per un numero illimitato di connessioni in cui è consentito il riutilizzo (quando l'IP o la porta di destinazione è diversa).
Nell'esempio riportato nella tabella seguente, un'istanza back-end con INDIRIZZO IP privato 10.0.0.1 effettua connessioni TCP agli INDIRIZZI IP di destinazione 23.53.254.142 e 26.108.254.155, mentre il servizio di bilanciamento del carico è configurato con indirizzo IP front-end 192.0.2.0. Poiché gli INDIRIZZI IP di destinazione sono diversi, la stessa porta SNAT può essere riutilizzata per più connessioni.
Flusso | Tupla di origine | Tupla di origine dopo SNAT | Tupla di destinazione |
---|---|---|---|
1 | 10.0.0.1:80 | 192.0.2.0:1 | 23.53.254.142:80 |
2 | 10.0.0.1:80 | 192.0.2.0:1 | 26.108.254.155:80 |
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 la SNAT.
Ogni porta può essere usata sia per le connessioni TCP che UDP a un indirizzo IP di destinazione
È necessaria una porta SNAT UDP a seconda che la porta di destinazione sia 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 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 l'uscita non avvenga tramite un indirizzo IP pubblico a livello di istanza nella scheda di interfaccia di rete della macchina virtuale.
Le configurazioni IPv4 secondarie di un'interfaccia di rete non sono supportate con le regole in uscita. Per la connettività in uscita nelle configurazioni IPv4 secondarie, collegare indirizzi IP pubblici a livello di istanza o sfruttare invece il gateway NAT.
Passaggi successivi
- Risolvere gli errori di connessione in uscita a causa dell'esaurimento SNAT
- Esaminare le metriche SNAT e acquisire familiarità con il modo corretto per filtrare, dividere e visualizzare le metriche.
- Informazioni su come eseguire la migrazione del metodo di connettività in uscita esistente al gateway NAT