Informazioni sulle connessioni in uscita in AzureUnderstanding outbound connections in Azure

Importante

Azure Load Balancer supporta due tipi diversi: Basic e Standard.Azure Load Balancer supports two different types: Basic and Standard. Questo articolo illustra Load Balancer Basic.This article discusses Basic Load Balancer. Load Balancer Basic è disponibile a livello generale, mentre Load Balancer Standard è attualmente in anteprima pubblica.Basic Load Balancer is generally available, whereas Standard Load Balancer is currently in Public Preview. Per altre informazioni su Load Balancer Standard, vedere Panoramica di Load Balancer Standard.For more information about Standard Load Balancer, see Standard Load Balancer Overview.

Una macchina virtuale (VM) in Azure può comunicare con endpoint all'esterno di Azure nello spazio di indirizzi IP pubblici.A Virtual Machine (VM) in Azure can communicate with endpoints outside of Azure in public IP address space. Quando una VM avvia un flusso in uscita verso una destinazione nello spazio di indirizzi IP pubblici, Azure esegue il mapping dell'indirizzo IP privato della macchina virtuale a un indirizzo IP pubblico e consente il traffico di ritorno per raggiungere la macchina virtuale.When a VM initiates an outbound flow to a destination in public IP address space, Azure maps the VM's private IP address to a public IP address and allows return traffic to reach the VM.

Azure offre tre metodi diversi per stabilire connettività in uscita.Azure provides three different methods to achieve outbound connectivity. Ogni metodo ha funzionalità e vincoli specifici.Each method has its own capabilities and constraints. Esaminare ogni metodo attentamente e scegliere quello che soddisfa le proprie esigenze.Review each method carefully to choose which one meets your needs.

ScenarioScenario MetodoMethod NotaNote
Macchina virtuale autonoma (nessun bilanciamento del carico, nessun indirizzo IP pubblico a livello di istanza)Standalone VM (no load balancer, no Instance Level Public IP address) SNAT predefinitoDefault SNAT Azure associa un indirizzo IP pubblico per SNATAzure associates a public IP address for SNAT
Macchina virtuale con carico bilanciato (nessun indirizzo IP pubblico a livello di istanza nella VM)Load-balanced VM (no Instance Level Public IP address on VM) SNAT con il bilanciamento del caricoSNAT using the load balancer Azure usa un indirizzo IP pubblico di Load Balancer per SNATAzure uses a public IP address of the Load Balancer for SNAT
Macchina virtuale con indirizzo IP pubblico a livello di istanza (con o senza bilanciamento del carico)VM with Instance Level Public IP address (with or without load balancer) SNAT non usatoSNAT is not used Azure usa l'IP pubblico assegnato alla macchina virtualeAzure uses the public IP assigned to the VM

Se non si vuole che una macchina virtuale comunichi con gli endpoint all'esterno di Azure nello spazio di indirizzi IP pubblici, è possibile usare i gruppi di sicurezza di rete per bloccare l'accesso.If you do not want a VM to communicate with endpoints outside of Azure in public IP address space, you can use Network Security Groups (NSG) to block access. Per informazioni più dettagliate sull'uso dei gruppi di sicurezza di rete, vedere Prevenzione della connettività pubblica.Using NSGs is discussed in more detail in Preventing Public Connectivity.

Macchina virtuale autonoma senza indirizzo IP pubblico a livello di istanzaStandalone VM with no Instance Level Public IP address

In questo scenario la macchina virtuale non fa parte di un pool di Azure Load Balancer e non ha assegnato un indirizzo IP pubblico a livello di istanza.In this scenario, the VM is not part of an Azure Load Balancer pool and does not have an Instance Level Public IP (ILPIP) address assigned to it. Quando la macchina virtuale crea un flusso in uscita, Azure converte l'indirizzo IP di origine privata del flusso in uscita in un indirizzo IP di origine pubblica.When the VM creates an outbound flow, Azure translates the private source IP address of the outbound flow to a public source IP address. L'indirizzo IP pubblico usato per questo flusso in uscita non è configurabile e non interferisce con il limite della risorsa IP pubblico della sottoscrizione.The public IP address used for this outbound flow is not configurable and does not count against the subscription's public IP resource limit. Azure usa SNAT (Source Network Address Translation) per eseguire questa funzione.Azure uses Source Network Address Translation (SNAT) to perform this function. Per distinguere i singoli flussi originati dalla macchina virtuale vengono usate porte temporanee dell'indirizzo IP pubblico.Ephemeral ports of the public IP address are used to distinguish individual flows originated by the VM. SNAT assegna dinamicamente le porte temporanee dopo che sono stati creati i flussi.SNAT dynamically allocates ephemeral ports when flows are created. In questo contesto le porte temporanee usate per SNAT sono dette porte SNAT.In this context, the ephemeral ports used for SNAT are referred to as SNAT ports.

Le porte SNAT sono una risorsa limitata che può esaurirsi.SNAT ports are a finite resource that can be exhausted. L'importante è capire come vengono usate.It is important to understand how they are consumed. Viene usata una porta SNAT per il flusso verso un singolo indirizzo IP di destinazione.One SNAT port is consumed per flow to a single destination IP. In caso di più flussi verso lo stesso e indirizzo IP e la stessa porta di destinazione, viene usata una porta SNAT per ogni flusso.For multiple flows to the same destination IP address and port, each flow consumes a single SNAT port. Si garantisce così che i flussi siano univoci quando hanno origine dallo stesso indirizzo IP pubblico e quando sono destinati allo stesso indirizzo IP e alla stessa porta di destinazione.This ensures that the flows are unique when originated from the same public IP address to the same destination IP address and port. Più flussi destinati ognuno a un indirizzo IP e a una porta di destinazione diversi condividono una sola porta SNAT.Multiple flows, each to a different destination IP address and port, share a single SNAT port. L'indirizzo IP e la porta di destinazione creano flussi univoci.The destination IP address and port makes the flows unique.

Vedere Log Analytics per Load Balancer e Log eventi di avviso per monitorare l'integrità delle connessioni in uscita.You can use Log Analytics for Load Balancer and Alert event logs to monitor for SNAT port exhaustion messages to monitor health of outbound connections. Quando si esauriscono le risorse di porte SNAT, i flussi in uscita vengono completati dopo che le porte SNAT sono state rilasciate da flussi esistenti.When SNAT port resources are exhausted, outbound flows fail until SNAT ports are released by existing flows. Il timeout di inattività di Load Balancer è di 4 minuti per il recupero di porte SNAT.Load Balancer uses a 4-minute idle timeout for reclaiming SNAT ports. Consultare la sezione seguente Macchina virtuale con indirizzo IP pubblico a livello di istanza (con o senza bilanciamento del carico) e Gestione dell'esaurimento SNAT.Review VM with an Instance Level Public IP address (with or without Load Balancer) the following section as well as Managing SNAT exhaustion.

Macchina virtuale con carico bilanciato senza indirizzo IP pubblico a livello di istanzaLoad-balanced VM with no Instance Level Public IP address

In questo scenario la macchina virtuale fa parte di un pool di Azure Load Balancer.In this scenario, the VM is part of an Azure Load Balancer pool. Alla macchina virtuale non è assegnato un indirizzo IP pubblico.The VM does not have a public IP address assigned to it. La risorsa di bilanciamento del carico deve essere configurata con una regola per collegare il front-end dell'IP pubblico al pool back-end.The Load Balancer resource must be configured with a rule to link the public IP frontend with the backend pool. Se questa configurazione non viene completata, il comportamento sarà quello descritto nella sezione precedente Macchina virtuale autonoma senza indirizzo IP pubblico a livello di istanza.If you do not complete this configuration, the behavior is as described in the preceding section for Standalone VM with no Instance Level Public IP.

Quando la macchina virtuale con carico bilanciato crea un flusso in uscita, Azure converte l'indirizzo IP di origine privata del flusso in uscita nell'indirizzo IP pubblico del front-end pubblico di Load Balancer.When the load-balanced VM creates an outbound flow, Azure translates the private source IP address of the outbound flow to the public IP address of the public Load Balancer frontend. Azure usa SNAT (Source Network Address Translation) per eseguire questa funzione.Azure uses Source Network Address Translation (SNAT) to perform this function. Per distinguere i singoli flussi provenienti dalla macchina virtuale vengono usate le porte temporanee dell'indirizzo IP pubblico di Load Balancer.Ephemeral ports of the Load Balancer's public IP address are used to distinguish individual flows originated by the VM. SNAT assegna dinamicamente le porte temporanee dopo che sono stati creati i flussi in uscita.SNAT dynamically allocates ephemeral ports when outbound flows are created. In questo contesto le porte temporanee usate per SNAT sono dette porte SNAT.In this context, the ephemeral ports used for SNAT are referred to as SNAT ports.

Le porte SNAT sono una risorsa limitata che può esaurirsi.SNAT ports are a finite resource that can be exhausted. L'importante è capire come vengono usate.It is important to understand how they are consumed. Viene usata una porta SNAT per il flusso verso un singolo indirizzo IP e una porta di destinazione.One SNAT port is consumed per flow to a single destination IP address and port. In caso di più flussi verso lo stesso e indirizzo IP e la stessa porta di destinazione, viene usata una porta SNAT per ogni flusso.For multiple flows to the same destination IP address and port, each flow consumes a single SNAT port. Si garantisce così che i flussi siano univoci quando hanno origine dallo stesso indirizzo IP pubblico e quando sono destinati allo stesso indirizzo IP e alla stessa porta di destinazione.This ensures that the flows are unique when originated from the same public IP address to the same destination IP address and port. Più flussi destinati ognuno a un indirizzo IP e a una porta di destinazione diversi condividono una sola porta SNAT.Multiple flows, each to a different destination IP address and port, share a single SNAT port. L'indirizzo IP e la porta di destinazione creano flussi univoci.The destination IP address and port makes the flows unique.

Vedere Log Analytics per Load Balancer e Log eventi di avviso per monitorare l'integrità delle connessioni in uscita.You can use Log Analytics for Load Balancer and Alert event logs to monitor for SNAT port exhaustion messages to monitor health of outbound connections. Quando si esauriscono le risorse di porte SNAT, i flussi in uscita vengono completati dopo che le porte SNAT sono state rilasciate da flussi esistenti.When SNAT port resources are exhausted, outbound flows fail until SNAT ports are released by existing flows. Il timeout di inattività di Load Balancer è di 4 minuti per il recupero di porte SNAT.Load Balancer uses a 4-minute idle timeout for reclaiming SNAT ports. Consultare la sezione seguente e Gestione dell'esaurimento SNAT.Review the following section as well as Managing SNAT exhaustion.

Macchina virtuale con indirizzo IP pubblico a livello di istanza (con o senza bilanciamento del carico)VM with an Instance Level Public IP address (with or without Load Balancer)

In questo scenario la macchina virtuale ha assegnato un IP pubblico a livello di istanza.In this scenario, the VM has an Instance Level Public IP (ILPIP) assigned to it. Non è importante se la macchina virtuale abbia un carico bilanciato o meno.It does not matter whether the VM is load balanced or not. Quando si usa un IP pubblico a livello di istanza, non si applica SNAT.When an ILPIP is used, Source Network Address Translation (SNAT) is not used. La macchina virtuale usa un indirizzo IP pubblico a livello di istanza per tutti i flussi in uscita.The VM uses the ILPIP for all outbound flows. Se l'applicazione avvia numerosi flussi in uscita e si assiste a un esaurimento SNAT, è necessario considerare l'assegnazione di un indirizzo IP pubblico a livello di istanza per ridurre i vincoli SNAT.If your application initiates many outbound flows and you experience SNAT exhaustion, you should consider assigning an ILPIP to mitigate SNAT constraints.

Individuazione dell'indirizzo IP pubblico usato da una macchina virtuale specificaDiscovering the public IP used by a given VM

Esistono molti modi per determinare l'indirizzo IP di origine pubblica di una connessione in uscita.There are many ways to determine the public source IP address of an outbound connection. OpenDNS offre un servizio che consente di visualizzare l'indirizzo IP pubblico della macchina virtuale.OpenDNS provides a service that can show you the public IP address of your VM. Con il comando nslookup è possibile inviare una query DNS per il nome myip.opendns.com al resolver OpenDNS.Using the nslookup command, you can send a DNS query for the name myip.opendns.com to the OpenDNS resolver. Il servizio restituisce l'indirizzo IP di origine usato per inviare la query.The service returns the source IP address that was used to send the query. Quando si esegue la query seguente dalla macchina virtuale, la risposta è l'indirizzo IP pubblico usato per tale VM.When you execute the following query from your VM, the response is the public IP used for that VM.

nslookup myip.opendns.com resolver1.opendns.com

Prevenzione della connettività pubblicaPreventing Public Connectivity

A volte può succedere di non voler consentire a una macchina virtuale di creare un flusso in uscita o può essere necessario gestire le destinazioni che possono essere raggiunte da flussi in uscita oppure le destinazioni possono iniziare flussi in entrata.Sometimes it is undesirable for a VM to be allowed to create an outbound flow or there may be a requirement to manage which destinations can be reached with outbound flows or which destinations may begin inbound flows. In questo caso usare i gruppi di sicurezza di rete (NSG) per gestire le destinazioni che la macchina virtuale può raggiungere e la destinazione pubblica che può avviare i flussi in entrata.In this case, you use Network Security Groups (NSG) to manage the destinations that the VM can reach as well as which public destination can initiate inbound flows. Quando si applica un gruppo di sicurezza di rete a una macchina virtuale con carico bilanciato, è necessario considerare i tag predefiniti e le regole predefinite.When you apply an NSG to a load-balanced VM, you need to pay attention to the default tags and default rules.

È necessario assicurarsi che la macchina virtuale riceva richieste di probe di integrità da Azure Load Balancer.You must ensure that the VM can receive health probe requests from Azure Load Balancer. Se un gruppo di sicurezza di rete blocca le richieste di probe di integrità dal tag AZURE_LOADBALANCER predefinito, il probe di integrità della macchina virtuale avrà esito negativo e la macchina virtuale sarà contrassegnata come non attiva.If an NSG blocks health probe requests from the AZURE_LOADBALANCER default tag, your VM health probe fails and the VM is marked down. Load Balancer interrompe l'invio di nuovi flussi a tale macchina virtuale.Load Balancer stops sending new flows to that VM.

Gestione dell'esaurimento SNATManaging SNAT exhaustion

Le porte temporanee usate per SNAT sono una risorsa esauribile, come descritto in Macchina virtuale autonoma senza indirizzo IP pubblico a livello di istanza e Macchina virtuale con carico bilanciato senza indirizzo IP pubblico a livello di istanza.Ephemeral ports used for SNAT are an exhaustible resource as described in Standalone VM with no Instance Level Public IP address and Load-balanced VM with no Instance Level Public IP address.

Sono disponibili diverse opzioni di mitigazione dei rischi, se si è consapevoli che verranno avviate numerose connessioni in uscita TCP o UDP allo stesso indirizzo IP e alla stessa porta di destinazione, se si riscontrano connessioni in uscita con errore o se il supporto tecnico ha comunicato il possibile esaurimento di porte SNAT.If you know you are initiating many outbound TCP or UDP connections to the same destination IP address and port, observe failing outbound connections, or are advised by support you are exhausting SNAT ports, you have several general mitigation options. Esaminare queste opzioni e scegliere quella ottimale per lo scenario in uso.Review these options and decide what is best for your scenario. È possibile che una o più opzioni risultino utili per gestire questo scenario.It is possible one or more can help manage this scenario.

Modificare l'applicazione per usare di nuovo le connessioniModify application to reuse connections

È possibile ridurre la richiesta di porte temporanee usate per SNAT usando di nuovo le connessioni nell'applicazione.You can reduce demand for ephemeral ports used for SNAT by reusing connections in your application. Ciò vale soprattutto per i protocolli HTTP/1.1 in cui il riuso della connessione è automatico.This is especially true for protocols like HTTP/1.1 where connection reuse is the default. Altri protocolli che usano HTTP come trasporto, ad esempio REST, possono trarne vantaggio, a loro volta.And other protocols using HTTP as their transport (i.e. REST) can benefit in turn. Il riuso è sempre preferibile alle connessioni TCP singole e atomiche per ogni richiesta e comporta transazioni TCP molto efficiente e con prestazioni più elevate.Reuse is always better than individual, atomic TCP connections for each request, and results in more performant, very efficient TCP transactions.

Modificare l'applicazione in modo da usare il pool di connessioniModify application to use connection pooling

Nella connessione è possibile usare una uno schema di pool della connessione, in cui le richieste sono distribuite internamente in un set predefinito di connessioni, ognuna delle quali viene riutilizzata quando possibile.You can employ a connection pooling scheme in your application, where requests are internally distributed across a fixed set of connections (each reusing where possible). Questo limita il numero di porte temporanee in uso e crea un ambiente più prevedibile.This constraints the number of ephemeral ports in use and creates a more predictable environment. Può anche migliorare la velocità effettiva delle richieste, consentendo più operazioni simultanee, quando una connessione si blocca sulla risposta di un'operazione.This can also increase the throughput of requests by allowing multiple simultaneous operations when a single connection is blocking on the reply of an operation. Il pool delle connessioni potrebbe essere già presente nell'ambito usato per sviluppare l'applicazione o le impostazioni di configurazione dell'applicazione.Connection pooling may already exist within the framework you are using to develop your application or the configurations settings for your application. È possibile combinarlo con il riutilizzo delle connessioni, mentre le richieste multiple usano un numero fisso e prevedibile di porte per lo stesso indirizzo IP e la stessa porta di destinazione sfruttando al contempo anche i vantaggi derivanti da un uso molto efficiente delle transazioni TCP che riduce la latenza e l'uso delle risorse.You can combine this with connection reuse and your multiple requests consume a fixed, predictable number of ports to the same destination IP address and port while also benefiting from very efficient use of TCP transactions reducing latency and resource utilization.

Modificare l'applicazione in modo da usare una logica di ripetizione meno aggressivaModify application to use less aggressive retry logic

Quando vengono esaurite le porte temporanee per SNAT o si verificano errori nell'applicazione, i tentativi di ripetizione aggressivi o di forza bruta senza logica di backoff e decadenza causano il verificarsi o la persistenza dell'esaurimento.When ephemeral ports used for SNAT are exhausted or application failures occur, aggressive or brute force retries without decay and backoff logic cause exhaustion to occur or persist. È possibile ridurre la richiesta di porte temporanee usando una logica di ripetizione meno aggressiva.You can reduce demand for ephemeral ports by using a less aggressive retry logic. Le porte temporanee hanno un timeout di inattività 4 minuti (non modificabile) e se i tentativi di ripetizione sono troppo aggressivi, l'esaurimento delle porte non viene eliminato autonomamente.Ephemeral ports have a 4-minute idle timeout (not adjustable) and if the retries are too aggressive, the exhaustion has no opportunity to clear up on its own. Pertanto, la modalità e la frequenza con cui l'applicazione effettua nuovi tentativi di transazioni è un fattore fondamentale della progettazione.Therefore, considering how and how often your application retries transactions is a critical consideration of the design.

Assegnare un indirizzo IP pubblico a livello di istanza a ogni macchina virtualeAssign an Instance-Level Public IP to each VM

In questo modo lo scenario cambia in Indirizzo IP pubblico a livello di istanza a una macchina virtuale.This changes your scenario to Instance-Level Public IP to a VM. Tutte le porte temporanee dell'indirizzo IP pubblico usato per ogni macchina virtuale sono disponibili per la macchina virtuale, a differenza degli scenari in cui le porte temporanee di un indirizzo IP pubblico vengono condivise con tutte le macchine virtuali associate al pool back-end corrispondente.All ephemeral ports of the Public IP used for each VM are available to the VM (as opposed to scenarios where ephemeral ports of a Public IP are shared with all the VM's associated with the respective backend pool). Bisogna considerare i compromessi, ad esempio i costi aggiuntivi per gli indirizzi IP e l'impatto potenziale di creare un elenco con un numero elevato di singoli indirizzi IP consentiti.There are trade-offs to consider, such as additional cost of IP addresses and potential impact of whitelisting a large number of individual IP addresses.

LimitazioniLimitations

Se a un servizio di bilanciamento del carico sono associati più indirizzi IP (pubblici), uno qualsiasi di questi IP indirizzi pubblici è idoneo per i flussi in uscita.If multiple (public) IP addresses are associated with a load balancer, any of these public IP addresses are a candidate for outbound flows.

Azure usa un algoritmo per determinare il numero di porte SNAT disponibili in base alla dimensione del pool.Azure uses an algorithm to determine the number of SNAT ports available based on the size of the pool. Al momento questo parametro non è configurabile.This is not configurable at this time.

Il timeout di inattività delle connessioni in uscita è di 4 minuti.Outbound connections have a 4-minute idle timeout. Questo valore non è modificabile.This is not adjustable.

È importante ricordare che il numero di porte SNAT disponibili non viene traslato direttamente in un numero di connessioni.It is important to remember that the number of SNAT ports available does not translate directly to number of connections. Fare riferimento alle sezioni precedenti per dettagli su come e quando vengono allocate le porte SNAT e su come gestire questa risorsa esauribile.Refer preceding sections for specifics on when and how SNAT ports are allocated and how to manage this exhaustible resource.