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

Alcuni scenari richiedono che le macchine virtuali o le istanze di calcolo dispongano della connettività in uscita a 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

Per abilitare la connettività in uscita in Azure vengono usati i metodi seguenti:

# Metodo Tipo di allocazione delle porte Grado di produzione? Classificazione
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 Ottimale
3 Assegnare un indirizzo IP pubblico alla macchina virtuale Statico, esplicito OK
4 Uso predefinito dell'accesso in uscita Implicita No Peggiore

Diagramma delle opzioni in uscita di Azure.

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

Diagramma del servizio di bilanciamento del carico pubblico con regole in uscita.

Le regole in uscita consentono di definire in modo esplicito SNAT (source network address translation) per un servizio di bilanciamento del carico pubblico dello 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 specifiche esigenze tramite l'allocazione manuale delle porte. L'allocazione manuale della 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 tramite "porte per istanza" o "numero massimo di istanze back-end". Se si dispone di macchine virtuali nel back-end, è consigliabile allocare le porte in base alle "porte per istanza" per ottenere il massimo utilizzo delle porte SNAT.

Le porte per istanza devono essere calcolate 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 che la scalabilità del set di scalabilità di macchine virtuali venga bloccata o che le nuove macchine virtuali non ricevano porte SNAT sufficienti.

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

2. Associare un gateway NAT alla subnet

Diagramma di un gateway NAT e di un servizio di bilanciamento del carico pubblico.

Rete virtuale NAT 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 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.

Per altre informazioni su NAT Rete virtuale di Azure, vedere Informazioni su NAT Rete virtuale di Azure.

3. Assegnare un indirizzo IP pubblico alla macchina virtuale

Diagramma delle macchine virtuali con indirizzi IP pubblici a livello di istanza.

Associazioni Metodo 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 tornerà 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 bilanciamento del carico 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

Diagramma dell'accesso in uscita predefinito.

Nota

Questo metodo non è consigliato per i carichi di lavoro di produzione perché aggiunge il rischio di esaurimento delle porte. Evitare di usare questo metodo per i carichi di lavoro di produzione per evitare potenziali errori di connessione.

Qualsiasi risorsa di Azure a cui non è associato un indirizzo IP pubblico, non dispone di un servizio di bilanciamento del carico con regole in uscita, non fa parte della modalità di orchestrazione flessibile dei set di scalabilità di macchine virtuali o non ha una risorsa gateway NAT associata alla subnet viene allocato un numero minimo di porte per le porte in uscita. Questo accesso è noto come accesso in uscita predefinito ed è il metodo peggiore per fornire connettività in uscita per le applicazioni.

Ecco alcuni altri esempi di accesso in uscita predefinito:

  • Uso di un servizio di bilanciamento del carico SKU di base
  • Una macchina virtuale in Azure (senza le associazioni indicate in precedenza). In questo caso la connettività in uscita viene fornita dall'indirizzo IP di accesso in uscita predefinito. Questo INDIRIZZO IP è un indirizzo IP dinamico assegnato da Azure che non è possibile controllare. SNAT predefinito non è consigliato per i carichi di lavoro di produzione e può causare errori di connettività.
  • Una macchina virtuale nel pool back-end di un servizio di bilanciamento del carico senza regole in uscita. Di conseguenza, si usa l'indirizzo IP front-end di un servizio di bilanciamento del carico per il traffico in uscita e in ingresso e sono più soggetti a errori di connettività dall'esaurimento delle porte SNAT.

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 per le connessioni in ingresso viene usata una porta, dispone di 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. Anche se tutti gli INDIRIZZI IP pubblici aggiunti come indirizzi IP front-end possono essere allocati, gli INDIRIZZI IP front-end vengono usati uno alla volta. Ad esempio, se due istanze back-end vengono allocate 64.000 porte, con accesso a due indirizzi IP front-end, entrambe le istanze back-end utilizzeranno le porte dal primo IP front-end fino a quando non sono state esaurite tutte le 64.000 porte.

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

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 pre-allocate come descritto nella tabella di allocazione delle porte SNAT predefinite seguente.

Tabella di allocazione delle porte predefinita

Nella tabella seguente vengono illustrate le preallocation delle porte SNAT per le dimensioni del pool back-end:

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

Esaurimento della porta

Ogni connessione alla stessa porta IP di destinazione e destinazione userà una porta SNAT. Questa connessione gestisce 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 un pacchetto.

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

  • IP di destinazione = 23.53.254.142

  • Porta di destinazione = 443

  • Protocollo = TCP

Senza porte di destinazione diverse per il traffico restituito (la porta SNAT usata per stabilire la connessione), il client non avrà modo di separare un risultato di una query da un'altra.

Le connessioni in uscita possono scoppiare. Un'istanza back-end può essere allocata insufficienti porte. Usare la funzionalità di riutilizzo delle connessioni all'interno dell'applicazione. Senza riutilizzare la connessione, il rischio di esaurimento della porta SNAT è aumentato.

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

Le nuove connessioni in uscita a un indirizzo IP di destinazione avranno esito negativo quando si verifica l'esaurimento della porta. Le connessioni avranno esito positivo quando una porta diventa disponibile. Questo esaurimento si verifica quando le 64.000 porte da 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 userà 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 con porta , che usa 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'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 per le connessioni TCP e UDP a un indirizzo IP di destinazione

  • È necessaria una porta UDP SNAT 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, in quanto le porte di destinazione sono diverse.

  • L'esaurimento SNAT si verifica quando un'istanza back-end viene esaurita da 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 sarà possibile stabilire nuove connessioni in uscita.

  • I pacchetti frammentati verranno eliminati a meno che non sia in uscita un indirizzo IP pubblico a livello di istanza nella scheda di interfaccia 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