Connessioni in uscita in AzureOutbound connections in Azure

Azure offre connettività in uscita per le distribuzioni dei clienti tramite vari meccanismi diversi.Azure provides outbound connectivity for customer deployments through several different mechanisms. Questo articolo descrive che cosa sono gli scenari, quando si applicano, come funzionano e come gestirli.This article describes what the scenarios are, when they apply, how they work, and how to manage them.

Nota

Questo articolo descrive solo le distribuzioni di Resource Manager.This article covers Resource Manager deployments only. Vedere Connessioni in uscita (versione classica) per tutti gli scenari di distribuzione classica in Azure.Review Outbound connections (Classic) for all Classic deployment scenarios in Azure.

Una distribuzione in Azure può comunicare con endpoint all'esterno di Azure nello spazio indirizzi IP pubblici.A deployment in Azure can communicate with endpoints outside Azure in the public IP address space. Quando un'istanza avvia un flusso in uscita verso una destinazione nello spazio indirizzi IP pubblici, Azure esegue in modo dinamico il mapping dell'indirizzo IP privato a un indirizzo IP pubblico.When an instance initiates an outbound flow to a destination in the public IP address space, Azure dynamically maps the private IP address to a public IP address. Dopo aver creato questo mapping, il traffico di ritorno per questo flusso con origine in uscita può raggiungere l'indirizzo IP privato da cui ha avuto origine il flusso.After this mapping is created, return traffic for this outbound originated flow can also reach the private IP address where the flow originated.

Azure usa SNAT (Source Network Address Translation) per eseguire questa funzione.Azure uses source network address translation (SNAT) to perform this function. Quando più indirizzi IP privati si mascherano dietro un singolo indirizzo IP pubblico, Azure usa PAT (Port Address Translation) per il mascheramento degli indirizzi IP privati.When multiple private IP addresses are masquerading behind a single public IP address, Azure uses port address translation (PAT) to masquerade private IP addresses. Per PAT vengono usate porte temporanee preallocate in base alle dimensioni del pool.Ephemeral ports are used for PAT and are preallocated based on pool size.

Sono presenti più scenari in uscita.There are multiple outbound scenarios. È possibile combinare questi scenari in base alle esigenze.You can combine these scenarios as needed. Esaminarli con attenzione per comprenderne le funzionalità, i vincoli e gli schemi, in riferimento a modelli di distribuzione e scenari di applicazione specifici.Review them carefully to understand the capabilities, constraints, and patterns as they apply to your deployment model and application scenario. Vedere le linee guida per la gestione di questi scenari.Review guidance for managing these scenarios.

Importante

Load Balancer Standard introduce nuove funzionalità e comportamenti differenti per la connettività in uscita.Standard Load Balancer introduces new abilities and different behaviors to outbound connectivity. Ad esempio, lo scenario 3 non esiste quando è presente un'istanza di Load Balancer Standard interna e devono essere eseguiti passaggi diversi.For example, scenario 3 does not exist when an internal Standard Load Balancer is present and different steps need to be taken. Leggere con attenzione l'intero documento per comprendere i concetti generali e le differenze tra gli SKU.Carefully review this entire document to understand the overall concepts and differences between SKUs.

Panoramica dello scenarioScenario overview

Quando si usa Azure Resource Manager, vengono definiti in modo esplicito il servizio Azure Load Balancer e le risorse correlate.Azure Load Balancer and related resources are explicitly defined when you're using Azure Resource Manager. Attualmente, Azure offre tre diversi metodi per ottenere la connettività in uscita per le risorse di Azure Resource Manager.Azure currently provides three different methods to achieve outbound connectivity for Azure Resource Manager resources.

ScenarioScenario MetodoMethod Protocolli IPIP protocols DESCRIZIONEDescription
1. Macchina virtuale con indirizzo IP pubblico a livello di istanza (con o senza Load Balancer)1. VM with an Instance Level Public IP address (with or without Load Balancer) SNAT, il mascheramento delle porte non viene usatoSNAT, port masquerading not used TCP, UDP, ICMP, ESPTCP, UDP, ICMP, ESP Azure usa l'indirizzo IP pubblico assegnato alla configurazione IP della scheda di interfaccia di rete dell'istanza.Azure uses the public IP assigned to the IP configuration of the instance's NIC. L'istanza ha tutte le porte temporanee disponibili.The instance has all ephemeral ports available.
2. Servizio Load Balancer pubblico associato a una macchina virtuale (nessun indirizzo IP pubblico a livello di istanza per l'istanza)2. Public Load Balancer associated with a VM (no Instance Level Public IP address on the instance) SNAT con mascheramento delle porte (PAT) tramite i front-end di Load BalancerSNAT with port masquerading (PAT) using the Load Balancer frontends TCP, UDPTCP, UDP Azure condivide l'indirizzo IP pubblico dei front-end di Load Balancer pubblici con più IP privati.Azure shares the public IP address of the public Load Balancer frontends with multiple private IP addresses. Azure usa le porte temporanee dei front-end per PAT.Azure uses ephemeral ports of the frontends to PAT.
3. Macchina virtuale autonoma (senza Load Balancer, nessun indirizzo IP pubblico a livello di istanza)3. Standalone VM (no Load Balancer, no Instance Level Public IP address) SNAT con mascheramento delle porte (PAT)SNAT with port masquerading (PAT) TCP, UDPTCP, UDP Azure designa automaticamente un indirizzo IP pubblico per SNAT, condivide questo indirizzo IP pubblico con più indirizzi IP privati del set di disponibilità e usa le porte temporanee di questo indirizzo IP pubblico.Azure automatically designates a public IP address for SNAT, shares this public IP address with multiple private IP addresses of the availability set, and uses ephemeral ports of this public IP address. Si tratta di uno scenario di fallback per gli scenari precedenti.This is a fallback scenario for the preceding scenarios. Non è consigliato se sono necessari visibilità e controllo.We don't recommend it if you need visibility and control.

Se non si vuole che una macchina virtuale comunichi con gli endpoint all'esterno di Azure nello spazio indirizzi IP pubblici, è possibile usare i gruppi di sicurezza di rete per bloccare l'accesso in base alle specifiche esigenze.If you don't want a VM to communicate with endpoints outside Azure in public IP address space, you can use network security groups (NSGs) to block access as needed. La sezione Impedire la connettività in uscita illustra i gruppi di sicurezza di rete più in dettaglio.The section Preventing outbound connectivity discusses NSGs in more detail. La progettazione, l'implementazione e la gestione di una rete virtuale senza accesso in uscita non rientrano nell'ambito di questo articolo.Guidance on designing, implementing, and managing a virtual network without any outbound access is outside the scope of this article.

Scenario 1: macchina virtuale con un indirizzo IP pubblico a livello di istanzaScenario 1: VM with an Instance Level Public IP address

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. Per quanto riguarda le connessioni in uscita, non è importante se la macchina virtuale abbia un carico bilanciato o meno.As far as outbound connections are concerned, it doesn't matter whether the VM is load balanced or not. Questo scenario ha la precedenza rispetto agli altri.This scenario takes precedence over the others. Quando si usa un indirizzo IP pubblico a livello di istanza, la macchina virtuale usa tale indirizzo IP per tutti i flussi in uscita.When an ILPIP is used, the VM uses the ILPIP for all outbound flows.

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.A public IP assigned to a VM is a 1:1 relationship (rather than 1:many) and implemented as a stateless 1:1 NAT. Il mascheramento delle porte (PAT) non viene usato e tutte le porte temporanee sono disponibili per l'uso per la macchina virtuale.Port masquerading (PAT) is not used, and the VM has all ephemeral ports available for use.

Se l'applicazione avvia numerosi flussi in uscita e si assiste a un esaurimento delle porte SNAT, prendere in considerazione 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 port exhaustion, consider assigning an ILPIP to mitigate SNAT constraints. Leggere per intero Gestione dell'esaurimento SNAT.Review Managing SNAT exhaustion in its entirety.

Scenario 2: Macchina virtuale con carico bilanciato senza indirizzo IP pubblico a livello di istanzaScenario 2: Load-balanced VM without an Instance Level Public IP address

In questo scenario la macchina virtuale fa parte di un pool di back-end di Load Balancer pubblico.In this scenario, the VM is part of a public Load Balancer backend 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 di bilanciamento del carico per creare un collegamento fra il front-end dell'IP pubblico e il pool back-end.The Load Balancer resource must be configured with a load balancer rule to create a link between the public IP frontend with the backend pool.

Se questa configurazione delle regole non viene completata, il comportamento sarà quello descritto nello scenario Macchina virtuale autonoma senza indirizzo IP pubblico a livello di istanza.If you do not complete this rule configuration, the behavior is as described in the scenario for Standalone VM with no Instance Level Public IP. Per la regola non è richiesta la presenza di un listener di lavoro nel pool di back-end perché il probe di integrità abbia esito positivo.It is not necessary for the rule to have a working listener in the backend pool for the health probe to succeed.

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 per eseguire questa funzione.Azure uses SNAT to perform this function. Azure usa anche PAT per mascherare più indirizzi IP privati dietro un indirizzo IP pubblico.Azure also uses PAT to masquerade multiple private IP addresses behind a public IP address.

Per distinguere i singoli flussi provenienti dalla macchina virtuale vengono usate le porte temporanee del front-end dell'indirizzo IP pubblico di Load Balancer.Ephemeral ports of the load balancer's public IP address frontend are used to distinguish individual flows originated by the VM. SNAT usa dinamicamente le porte temporanee preallocate quando vengono creati i flussi in uscita.SNAT dynamically uses preallocated 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 called SNAT ports.

Le porte SNAT vengono preallocate come descritto nella sezione Informazioni su SNAT e PAT.SNAT ports are preallocated as described in the Understanding SNAT and PAT section. Sono una risorsa limitata che può esaurirsi.They're a finite resource that can be exhausted. L'importante è capire come vengono usate.It's important to understand how they are consumed. Per informazioni su come progettare questo consumo e come attenuarlo in base alle necessità, vedere Gestione dell'esaurimento SNAT.To understand how to design for this consumption and mitigate as necessary, review Managing SNAT exhaustion.

Se a Load Balancer Basic vengono associati più indirizzi IP (pubblici), uno qualsiasi di questi indirizzi IP pubblici è un candidato per i flussi in uscita e ne viene selezionato uno.When multiple (public) IP addresses are associated with Load Balancer Basic, any of these public IP addresses are a candidate for outbound flows, and one is selected.

Per monitorare l'integrità delle connessioni in uscita con Load Balancer Basic, è possibile usare Log Analytics per Load Balancer e il log eventi di avviso per monitorare i messaggi relativi all'esaurimento delle porte SNAT.To monitor the health of outbound connections with Load Balancer Basic, you can use Log Analytics for Load Balancer and alert event logs to monitor for SNAT port exhaustion messages.

Scenario 3: Macchina virtuale autonoma senza indirizzo IP pubblico a livello di istanzaScenario 3: Standalone VM without an Instance Level Public IP address

In questo scenario la macchina virtuale non fa parte di un pool di Load Balancer pubblico, né di un pool di Load Balancer Standard interno, e non ha assegnato un indirizzo ILPIP.In this scenario, the VM is not part of a public Load Balancer pool (and not part of an internal Standard Load Balancer pool) and does not have an 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.

Importante

Questo scenario si applica anche quando è collegata solo un'istanza di Load Balancer Basic interna.This scenario also applies when only an internal Basic Load Balancer is attached. Lo scenario 3 non è disponibile quando un'istanza di Load Balancer Standard interna è collegata a una macchina virtuale.Scenario 3 is not available when an internal Standard Load Balancer is attached to a VM. È necessario creare in modo esplicito lo scenario 1 o lo scenario 2 oltre a usare un'istanza di Load Balancer Standard interna.You must explicitly create scenario 1 or scenario 2 in addition to using an internal Standard Load Balancer.

Azure usa SNAT con il mascheramento delle porte (PAT) per eseguire questa funzione.Azure uses SNAT with port masquerading (PAT) to perform this function. Questo scenario è simile allo scenario 2, ma non è disponibile alcun controllo sull'indirizzo IP usato.This scenario is similar to scenario 2, except there is no control over the IP address used. Si tratta di uno scenario di fallback per quando non esistono gli scenari 1 e 2.This is a fallback scenario for when scenarios 1 and 2 do not exist. Questo scenario non è consigliato se si vuole avere il controllo dell'indirizzo in uscita.We don't recommend this scenario if you want control over the outbound address. Se le connessioni in uscita sono una parte essenziale dell'applicazione, è consigliabile scegliere un altro scenario.If outbound connections are a critical part of your application, you should chose another scenario.

Le porte SNAT vengono preallocate come descritto nella sezione Informazioni su SNAT e PAT.SNAT ports are preallocated as described in the Understanding SNAT and PAT section. Il numero di macchine virtuali che condividono un set di disponibilità determina il livello di preallocazione applicato.The number of VMs sharing an Availability Set determines which preallocation tier applies. Una macchina virtuale autonoma senza un set di disponibilità costituisce un pool di 1 ai fini della determinazione della preallocazione (1024 porte SNAT).A standalone VM without an Availability Set is effectively a pool of 1 for the purposes of determining preallocation (1024 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's important to understand how they are consumed. Per informazioni su come progettare questo consumo e come attenuarlo in base alle necessità, vedere Gestione dell'esaurimento SNAT.To understand how to design for this consumption and mitigate as necessary, review Managing SNAT exhaustion.

Più scenari combinatiMultiple, combined scenarios

È possibile combinare gli scenari descritti nelle sezioni precedenti per ottenere un risultato particolare.You can combine the scenarios described in the preceding sections to achieve a particular outcome. Quando esistono più scenari, si applica un ordine di precedenza: lo scenario 1 ha la precedenza sullo scenario 2 e 3.When multiple scenarios are present, an order of precedence applies: scenario 1 takes precedence over scenario 2 and 3. Lo scenario 2 sostituisce lo scenario 3.Scenario 2 overrides scenario 3.

Un esempio è una distribuzione di Azure Resource Manager in cui l'applicazione dipende fortemente da connessioni in uscita a un numero limitato di destinazioni, ma riceve anche flussi in ingresso tramite un front-end di Load Balancer.An example is an Azure Resource Manager deployment where the application relies heavily on outbound connections to a limited number of destinations but also receives inbound flows over a Load Balancer frontend. In questo caso, è possibile combinare gli scenari 1 e 2 per una maggiore efficacia.In this case, you can combine scenarios 1 and 2 for relief. Per informazioni su altri modelli, vedere Gestione dell'esaurimento SNAT.For additional patterns, review Managing SNAT exhaustion.

Più front-end per i flussi in uscitaMultiple frontends for outbound flows

Load Balancer StandardLoad Balancer Standard

Load Balancer Standard usa tutti i candidati per i flussi in uscita contemporaneamente quando sono presenti più front-end IP (pubblici).Load Balancer Standard uses all candidates for outbound flows at the same time when multiple (public) IP frontends is present. Ogni front-end moltiplica il numero di porte SNAT preallocate disponibili se è abilitata una regola di bilanciamento del carico per le connessioni in uscita.Each frontend multiplies the number of available preallocated SNAT ports if a load balancing rule is enabled for outbound connections.

È possibile scegliere di non usare un indirizzo IP front-end per le connessioni in uscita con una nuova opzione della regola di bilanciamento del carico:You can choose to suppress a frontend IP address from being used for outbound connections with a new load balancing rule option:

      "loadBalancingRules": [
        {
          "disableOutboundSnat": false
        }
      ]

In genere, il valore predefinito di questa opzione è false, il che significa che questa regola programma le connessioni SNAT in uscita per le macchine virtuali associate nel pool back-end della regola di bilanciamento del carico.Normally, this option defaults to false and signifies that this rule programs outbound SNAT for the associated VMs in the backend pool of the load balancing rule. Il valore può essere impostato su true per impedire che Load Balancer usi l'indirizzo IP front-end associato per le connessioni in uscita per le macchine virtuali nel pool back-end di questa regola di bilanciamento del carico.This can be changed to true to prevent Load Balancer from using the associated frontend IP address for outbound connections for the VM's in the backend pool of this load balancing rule. È tuttavia possibile designare anche un indirizzo IP specifico per i flussi in uscita, come descritto in Più scenari combinati.And you can also still designate a specific IP address for outbound flows as described in Multiple, combined scenarios as well.

Load Balancer BasicLoad Balancer Basic

Load Balancer Basic sceglie un unico front-end da usare per i flussi in uscita quando esistono più front-end IP (pubblici) candidati per i flussi in uscita.Load Balancer Basic chooses a single frontend to be used for outbound flows when multiple (public) IP frontends are candidates for outbound flows. Questa selezione non è configurabile ed è consigliabile considerare casuale l'algoritmo di selezione.This selection is not configurable, and you should consider the selection algorithm to be random. È possibile designare un indirizzo IP specifico per i flussi in uscita come descritto in Più scenari combinati.You can designate a specific IP address for outbound flows as described in Multiple, combined scenarios.

Zone di disponibilitàAvailability Zones

Quando si usa Load Balancer Standard con le zone di disponibilità, i front-end con ridondanza della zona possono fornire connessioni SNAT in uscita con ridondanza della zona e la programmazione SNAT non risente degli errori a livello di zona.When using Standard Load Balancer with Availability Zones, zone-redundant frontends can provide zone-redundant outbound SNAT connections and SNAT programming survives zone failure. Quando vengono usati front-end di zona, la durata delle connessioni SNAT in uscita è legata alla zona a cui appartengono.When zonal frontends are used, outbound SNAT connections share fate with the zone they belong to.

Informazioni su SNAT e PATUnderstanding SNAT and PAT

Mascheramento delle porte SNAT (PAT)Port masquerading SNAT (PAT)

Quando una risorsa pubblica di Load Balancer è associata alle istanze VM, ogni origine di connessione in uscita viene riscritta.When a public Load Balancer resource is associated with VM instances, each outbound connection source is rewritten. L'origine viene riscritta dallo spazio dell'indirizzo IP privato della rete virtuale all'indirizzo IP pubblico front-end del bilanciamento del carico.The source is rewritten from the virtual network private IP address space to the frontend Public IP address of the load balancer. Nello spazio degli indirizzi IP pubblici, le 5 tuple del flusso (indirizzo IP di origine, porta di origine, protocollo di trasporto IP, indirizzo IP di destinazione, porta di destinazione) devono essere univoche.In the public IP address space, the 5-tuple of the flow (source IP address, source port, IP transport protocol, destination IP address, destination port) must be unique. Il mascheramento delle porte SNAT è utilizzabile con i protocolli TCP o UDP IP.Port masquerading SNAT can be used with either TCP or UDP IP protocols.

Per ottenere ciò vengono usate porte temporanee (porte SNAT) dopo la riscrittura dell'indirizzo IP di origine privato, perché più flussi hanno origine da un singolo indirizzo IP pubblico.Ephemeral ports (SNAT ports) are used to achieve this after rewriting the private source IP address, because multiple flows originate from a single public IP address.

Viene utilizzata una singola porta SNAT per flusso verso una singola combinazione di indirizzo IP, porta e protocollo di destinazione.One SNAT port is consumed per flow to a single destination IP address, port, and protocol. Nel caso di più flussi verso la stessa combinazione di indirizzo IP, porta e protocollo di destinazione, ogni flusso utilizza una singola porta SNAT.For multiple flows to the same destination IP address, port, and protocol, 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, alla stessa porta e allo stesso protocollo di destinazione.This ensures that the flows are unique when they originate from the same public IP address and go to the same destination IP address, port, and protocol.

Più flussi destinati ognuno a un indirizzo IP, una porta e un protocollo diversi condividono una sola porta SNAT.Multiple flows, each to a different destination IP address, port, and protocol, share a single SNAT port. L'indirizzo IP, la porta e il protocollo di destinazione rendono univoci i flussi senza la necessità di porte di origine aggiuntive per distinguere i flussi nello spazio indirizzi IP pubblici.The destination IP address, port, and protocol make flows unique without the need for additional source ports to distinguish flows in the public IP address space.

Quando si esauriscono le risorse di porte SNAT, i flussi in uscita vengono completati dopo che i flussi esistenti rilasciano le porte SNAT.When SNAT port resources are exhausted, outbound flows fail until existing flows release SNAT ports. Il servizio Load Balancer recupera le porte SNAT alla chiusura del flusso e usa un timeout per inattività di 4 minuti per il recupero delle porte SNAT dai flussi inattivi.Load Balancer reclaims SNAT ports when the flow closes and uses a 4-minute idle timeout for reclaiming SNAT ports from idle flows.

Per informazioni sui modelli per la mitigazione delle condizioni che portano comunemente all'esaurimento delle porte SNAT, vedere la sezione Gestione di SNAT.For patterns to mitigate conditions that commonly lead to SNAT port exhaustion, review the Managing SNAT section.

Preallocazione di porte temporanee per il mascheramento delle porte SNAT (PAT)Ephemeral port preallocation for port masquerading SNAT (PAT)

Azure usa un algoritmo per determinare il numero di porte SNAT preallocate disponibili in base alla dimensione del pool back-end quando si usa il mascheramento delle porte SNAT (PAT).Azure uses an algorithm to determine the number of preallocated SNAT ports available based on the size of the backend pool when using port masquerading SNAT (PAT). Le porte SNAT sono porte temporanee disponibili per un particolare indirizzo di origine IP pubblico.SNAT ports are ephemeral ports available for a particular public IP source address.

Lo stesso numero di porte SNAT viene allocato rispettivamente per UDP e TCP e utilizzato indipendentemente per ogni protocollo di trasporto IP.The same number of SNAT ports are preallocated for UDP and TCP respectively and consumed independently per IP transport protocol.

Importante

La programmazione SNAT per SKU Standard è basata sul protocollo di trasporto IP e viene derivata dalla regola di bilanciamento del carico.Standard SKU SNAT programming is per IP transport protocol and derived from the load balancing rule. Se esiste una sola regola di bilanciamento del carico TCP, SNAT è disponibile solo per TCP.If only a TCP load balancing rule exists, SNAT is only available for TCP. Se è presente solo una regola di bilanciamento del carico TCP ed è necessaria una connessione SNAT in uscita per UDP, creare una regola di bilanciamento del carico UDP dallo stesso front-end allo stesso pool back-end.If you have only a TCP load balancing rule and need outbound SNAT for UDP, create a UDP load balancing rule from the same frontend to the same backend pool. In questo modo, verrà attivata la programmazione SNAT per UDP.This will trigger SNAT programming for UDP. Non è necessario un probe di integrità o una regola di lavoro.A working rule or health probe is not required. La programmazione SNAT per SKU Basic programma sempre SNAT per il protocollo di trasporto IP, indipendentemente dal protocollo di trasporto specificato nella regole di bilanciamento del carico.Basic SKU SNAT always programs SNAT for both IP transport protocol, irrespective of the transport protocol specified in the load balancing rule.

Azure prealloca le porte SNAT alla configurazione IP della scheda di interfaccia di rete di ogni macchina virtuale.Azure preallocates SNAT ports to the IP configuration of the NIC of each VM. Quando una configurazione IP viene aggiunta al pool, le porte SNAT vengono preallocate per questa configurazione IP in base alla dimensione del pool back-end.When an IP configuration is added to the pool, the SNAT ports are preallocated for this IP configuration based on the backend pool size. Quando vengono creati i flussi in uscita, PAT usa (fino al limite preallocato) e rilascia in modo dinamico tali porte alla chiusura del flusso o quando si verifica un timeout per inattività.When outbound flows are created, PAT dynamically consumes (up to the preallocated limit) and releases these ports when the flow closes or idle timeouts happen.

Nella tabella seguente sono riportate le preallocazioni delle porte SNAT per i livelli di dimensioni del pool back-end:The following table shows the SNAT port preallocations for tiers of backend pool sizes:

Dimensioni del pool (istanze VM)Pool size (VM instances) Porte SNAT preallocate per configurazione IPPreallocated SNAT ports per IP configuration
1-501-50 1.0241,024
51-10051-100 512512
101-200101-200 256256
201-400201-400 128128
401-800401-800 6464
801-1.000801-1,000 3232

Nota

Quando si usa Load Balancer Standard con più front-end, ogni indirizzo IP front-end moltiplica il numero di porte SNAT disponibili nella tabella precedente.When using Standard Load Balancer with multiple frontends, each frontend IP address multiplies the number of available SNAT ports in the previous table. Ad esempio, un pool back-end di 50 macchine virtuali con 2 regole di bilanciamento del carico, ognuna con indirizzi IP front-end distinti, userà 2048 porte SNAT (2 x 1024) per ogni configurazione IP.For example, a backend pool of 50 VM's with 2 load balancing rules, each with a separate frontend IP addresses, will use 2048 (2x 1024) SNAT ports per IP configuration. Vedere i dettagli per più front-end.See details for multiple frontends.

Ricordare che il numero di porte SNAT disponibili non viene convertito direttamente in un numero di flussi.Remember that the number of SNAT ports available does not translate directly to number of flows. È possibile riutilizzare una singola porta SNAT per più destinazioni univoche.A single SNAT port can be reused for multiple unique destinations. Le porte vengono usate solo se è necessario per rendere univoci i flussi.Ports are consumed only if it's necessary to make flows unique. Per indicazioni sulla progettazione e la mitigazione, vedere la sezione su come gestire questa risorsa soggetta a esaurimento e la sezione che descrive PAT.For design and mitigation guidance, refer to the section about how to manage this exhaustible resource and the section that describes PAT.

La modifica delle dimensioni del pool back-end potrebbe influire su alcuni dei flussi stabiliti.Changing the size of your backend pool might affect some of your established flows. Se le dimensioni del pool back-end aumentano e si esegue la transizione al livello successivo, metà delle porte SNAT preallocate vengono recuperate durante la transizione al livello di pool back-end più grande successivo.If the backend pool size increases and transitions into the next tier, half of your preallocated SNAT ports are reclaimed during the transition to the next larger backend pool tier. I flussi associati a una porta SNAT recuperata raggiungeranno il timeout e dovranno essere ristabiliti.Flows that are associated with a reclaimed SNAT port will time out and must be reestablished. Se viene tentato un nuovo flusso, il flusso avrà esito positivo immediatamente, purché siano disponibili porte preallocate.If a new flow is attempted, the flow will succeed immediately as long as preallocated ports are available.

Se le dimensioni del pool back-end diminuiscono e si ha una transizione a un livello più basso, il numero di porte SNAT disponibili aumenta.If the backend pool size decreases and transitions into a lower tier, the number of available SNAT ports increases. In questo caso, non vi sono effetti per le porte SNAT allocate esistenti e i rispettivi flussi.In this case, existing allocated SNAT ports and their respective flows are not affected.

Le allocazioni delle porte SNAT sono specifiche del protocollo di trasporto IP (i protocolli TCP e UDP vengono gestiti separatamente) e vengono rilasciate nelle condizioni seguenti:SNAT ports allocations are IP transport protocol specific (TCP and UDP are maintained separately) and are released under the following conditions:

Rilascio di porte SNAT TCPTCP SNAT port release

  • Se il server e il client inviano entrambi richieste FIN/ACK, la porta SNAT viene rilasciata dopo 240 secondi.If both server/client sends FIN/ACK, SNAT port will be released after 240 seconds.
  • In presenza di una richiesta RST, la porta SNAT viene rilasciata dopo 15 secondi.If a RST is seen, SNAT port will be released after 15 seconds.
  • È stato raggiunto il timeout di inattivitàidle timeout has been reached

Rilascio di porte SNAT UDPUDP SNAT port release

  • È stato raggiunto il timeout di inattivitàidle timeout has been reached

Risoluzione dei problemiProblem solving

Questa sezione è stata pensata per attenuare i problemi relativi all'esaurimento SNAT e ad altri scenari che possono verificarsi con le connessioni in uscita in Azure.This section is intended to help mitigate SNAT exhaustion and other scenarios which can occur with outbound connections in Azure.

Gestione dell'esaurimento delle porte SNAT (PAT)Managing SNAT (PAT) port exhaustion

Le porte temporanee usate per PAT 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 PAT are an exhaustible resource, as described in Standalone VM without an Instance Level Public IP address and Load-balanced VM without an Instance Level Public IP address.

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

In caso di problemi a comprendere il comportamento delle connessioni in uscita, è possibile usare le statistiche dello stack IP (netstat)If you are having trouble understanding the outbound connection behavior, you can use IP stack statistics (netstat). o può essere utile osservare i comportamenti di connessione tramite le acquisizioni di pacchetti.Or it can be helpful to observe connection behaviors by using packet captures. È possibile eseguire queste acquisizioni di pacchetti nel sistema operativo guest dell'istanza o usare Network Watcher per l'acquisizione dei pacchetti.You can perform these packet captures in the guest OS of your instance or use Network Watcher for packet capture.

Modificare l'applicazione per riutilizzare le connessioniModify the 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 that are used for SNAT by reusing connections in your application. Ciò vale soprattutto per i protocolli HTTP/1.1, in cui il riutilizzo 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 that use HTTP as their transport (for example, REST) can benefit in turn.

Il riutilizzo è sempre meglio delle singole connessioni TCP atomiche per ogni richiesta.Reuse is always better than individual, atomic TCP connections for each request. Il riutilizzo garantisce transazioni TCP molto efficienti e con prestazioni più elevate.Reuse results in more performant, very efficient TCP transactions.

Modificare l'applicazione per usare pool di connessioniModify the 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 schema limita il numero di porte temporanee in uso e crea un ambiente più prevedibile.This scheme constrains 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 scheme 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 might already exist within the framework that you're using to develop your application or the configuration settings for your application. È possibile combinare il pool di connessioni con il riutilizzo delle connessioni.You can combine connection pooling with connection reuse. Le richieste multiple impiegano quindi un numero prevedibile fisso di porte per la stessa porta e lo stesso indirizzo IP di destinazione.Your multiple requests then consume a fixed, predictable number of ports to the same destination IP address and port. Le richieste traggono anche vantaggio dall'uso efficiente delle transazioni TCP che riducono la latenza e l'utilizzo delle risorse.The requests also benefit from efficient use of TCP transactions reducing latency and resource utilization. Anche le transazioni UDP possono offrire vantaggi, perché gestire il numero di flussi UDP può a sua volta evitare condizioni di esaurimento e consente di gestire l'utilizzo delle porte SNAT.UDP transactions can also benefit, because managing the number of UDP flows can in turn avoid exhaust conditions and manage the SNAT port utilization.

Modificare l'applicazione per usare una logica di ripetizione meno aggressivaModify the application to use less aggressive retry logic

Quando vengono esaurite le porte temporanee preallocate usate per PAT o si verificano errori nell'applicazione, i tentativi di ripetizione aggressivi o di forza bruta senza logica di backoff e decadimento causano il verificarsi o la persistenza dell'esaurimento.When preallocated ephemeral ports used for PAT 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à di 4 minuti (non modificabile).Ephemeral ports have a 4-minute idle timeout (not adjustable). Se i tentativi di ripetizione sono troppo aggressivi, l'esaurimento delle porte non viene eliminato autonomamente.If the retries are too aggressive, the exhaustion has no opportunity to clear up on its own. La modalità e la frequenza con cui l'applicazione effettua nuovi tentativi di transazioni sono quindi un fattore fondamentale della progettazione.Therefore, considering how--and how often--your application retries transactions is a critical part of the design.

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

Con l'assegnazione di un indirizzo IP pubblico a livello di istanza lo scenario cambia in Indirizzo IP pubblico a livello di istanza a una macchina virtuale.Assigning an ILPIP changes your scenario to Instance Level Public IP to a VM. Tutte le porte temporanee dell'IP pubblico usate per ogni VM sono disponibili per la VM,All ephemeral ports of the public IP that are used for each VM are available to the VM. al contrario di quanto accade negli scenari in cui le porte temporanee di un IP pubblico sono condivise con tutte le VM associate al rispettivo pool back-end. Bisogna considerare anche l'altro lato della medaglia, ad esempio i costi aggiuntivi per gli indirizzi IP pubblici e l'impatto potenziale di creare un elenco con un numero elevato di singoli indirizzi IP consentiti.(As opposed to scenarios where ephemeral ports of a public IP are shared with all the VMs associated with the respective backend pool.) There are trade-offs to consider, such as the additional cost of public IP addresses and the potential impact of whitelisting a large number of individual IP addresses.

Nota

Questa opzione non è disponibile per i ruoli di lavoro Web.This option is not available for web worker roles.

Usare più front-endUse multiple frontends

Quando si usa un'istanza di Load Balancer Standard pubblica, si assegnano più indirizzi IP front-end per le connessioni in uscita e si moltiplica il numero di porte SNAT disponibili.When using public Standard Load Balancer, you assign multiple frontend IP addresses for outbound connections and multiply the number of SNAT ports available. È necessario creare una configurazione IP front-end, una regola e un pool back-end per attivare la programmazione di SNAT per l'IP pubblico del front-end.You need to create a frontend IP configuration, rule, and backend pool to trigger the programming of SNAT to the public IP of the frontend. La regola non deve necessariamente funzionare e un probe di integrità non deve necessariamente avere esito positivo.The rule does not need to function and a health probe does not need to succeed. Se si usano più front-end anche per le connessioni in entrata (anziché solo per quelle in uscita), è consigliabile usare probe di integrità personalizzati per garantire l'affidabilità.If you do use multiple frontends for inbound as well (rather than just for outbound), you should use custom health probes well to insure reliability.

Nota

Nella maggior parte dei casi l'esaurimento delle porte SNAT indica una progettazione non valida.In most cases, exhaustion of SNAT ports is a sign of bad design. Assicurarsi di conoscere il motivo dell'esaurimento delle porte prima di usare più front-end per aggiungere porte SNAT.Make sure you understand why you are exhausting ports before using more frontends to add SNAT ports. Potrebbe essere indice di un problema che può causare errori in un secondo momento.You may be masking a problem which can lead to failure later.

Scalabilità orizzontaleScale out

Le porte preallocate vengono assegnate in base alle dimensioni del pool back-end e raggruppate in livelli per ridurre al minimo le interruzioni quando alcune delle porte devono essere riallocate in base al successivo livello di dimensioni maggiore del pool back-end.Preallocated ports are assigned based on the backend pool size and grouped into tiers to minimize disruption when some of the ports have to be reallocated to accomodate the next larger backend pool size tier. È possibile scegliere di aumentare l'intensità dell'utilizzo delle porte SNAT per un front-end specifico ridimensionando il pool back-end fino alle dimensioni massime per un determinato livello.You may have an option to increase intensity of SNAT port utilization for a given frontend by scaling your backend pool to maximum size for a given tier. A questo scopo, le dimensioni dell'applicazione devono essere aumentate in modo efficiente.This requires for the application to scale out efficiently.

Ad esempio, due macchine virtuali nel pool back-end devono avere 1024 porte SNAT disponibili per ogni configurazione IP, per un totale di 2048 porte SNAT per la distribuzione.For example, 2 virtual machines in the backend pool would have 1024 SNAT ports available per IP configuration, allowing a total of 2048 SNAT ports for the deployment. Se la distribuzione viene aumentata a 50 macchine virtuali, anche se il numero di porte preallocate resta costante per ogni macchina virtuale, potrà essere usato un totale di 51.200 (50 x 1024) porte SNAT dalla distribuzione.If the deployment were to be increased to 50 virtual machines, even though the number of preallocated ports remains constant per virtual machine, a total of 51,200 (50 x 1024) SNAT ports can be used by the deployment. Per aumentare le dimensioni della distribuzione, controllare il numero di porte preallocate per ogni livello per assicurarsi di definire la scalabilità orizzontale in base alle dimensioni massime per il rispettivo livello.If you wish to scale out your deployment, check the number of preallocated ports per tier to make sure you shape your scale out to the maximum for the respective tier. Se nell'esempio precedente si sceglie di applicare scalabilità orizzontale fino a 51 istanze anziché 50, si passa al livello successivo, finendo con meno porte SNAT per ogni macchina virtuale e in totale.In the preceeding example, if you had chosen to scale out to 51 instead of 50 instances, your would progress to the next tier and end up with less SNAT ports per VM as well as in total.

Al contrario, applicare scalabilità orizzontale fino al successivo livello di dimensioni maggiore del pool back-end per le possibili connessioni in uscita se le porte allocate devono essere riallocate.Conversely, scale out to the next larger backend pool size tier potentially outbound connections if allocated ports have to be reallocated. Se non si vuole che questo avvenga, è necessario definire la distribuzione in base alle dimensioni del livello.If you don't want this to take place, you need to shape your deployment to the tier size. In alternativa, assicurarsi che l'applicazione possa eseguire il rilevamento delle porte e nuovi tentativi in base alle esigenze.Or make sure your application can detect and retry as necessary. I keep-alive TCP possono aiutare a rilevare i casi in cui le porte SNAT non funzionano più a causa della riallocazione.TCP keepalives can assist in detect when SNAT ports no longer function due to being reallocated.

Usare keep-alive per reimpostare il timeout di inattività per le connessioni uscitaUse keepalives to reset the outbound idle timeout

Il timeout di inattività delle connessioni in uscita è di 4 minuti.Outbound connections have a 4-minute idle timeout. Questo timeout non è modificabile.This timeout is not adjustable. È comunque possibile usare keep-alive del livello trasporto (ad esempio, keep-alive TCP) o del livello applicazione per aggiornare un flusso inattivo e reimpostare il timeout di inattività, se necessario.However, you can use transport (for example, TCP keepalives) or application-layer keepalives to refresh an idle flow and reset this idle timeout if necessary.

Quando si usano keep-alive TCP, è sufficiente abilitarli sul lato della connessione.When using TCP keepalives, it is sufficient to enable them on one side of the connection. Ad esempio, è sufficiente abilitarli sul lato server solo per reimpostare il timer di inattività del flusso, mentre questo non è necessario per entrambi i lati per i keep-alive TCP avviati.For example, it is sufficient to enable them on the server side only to reset the idle timer of the flow and it is not necessary for both sides to initiated TCP keepalives. Si applicano concetti simili anche per il livello dell'applicazione, tra cui le configurazioni client-server di database.Similar concepts exist for application layer, including database client-server configurations. Controllare il lato server per verificare le opzioni disponibili per keep-alive specifici dell'applicazione.Check the server side for what options exist for application specific keepalives.

Individuazione dell'IP pubblico usato da una VMDiscovering the public IP that a VM uses

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.

Usando il comando nslookup è possibile inviare una query DNS per il nome myip.opendns.com al resolver OpenDNS.By 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 run the following query from your VM, the response is the public IP used for that VM:

nslookup myip.opendns.com resolver1.opendns.com

Impedire la connettività in uscitaPreventing outbound connectivity

A volte è preferibile che a una VM non sia consentito creare un flusso in uscitaSometimes it's undesirable for a VM to be allowed to create an outbound flow. oppure potrebbe essere necessario gestire le destinazioni che possono essere raggiunte con i flussi in uscita o le destinazioni che possono iniziare flussi in ingresso.Or there might be a requirement to manage which destinations can be reached with outbound flows, or which destinations can begin inbound flows. In questo caso è possibile usare i gruppi di sicurezza di rete per gestire le destinazioni che la macchina virtuale può raggiungere.In this case, you can use network security groups to manage the destinations that the VM can reach. È anche possibile usare i gruppi di sicurezza di rete per gestire la destinazione pubblica che può avviare i flussi in ingresso.You can also use NSGs to manage which public destination can initiate inbound flows.

Quando si applica un gruppo di sicurezza di rete a una macchina virtuale con carico bilanciato, considerare i tag del servizio e le regole di sicurezza predefinite.When you apply an NSG to a load-balanced VM, pay attention to the service tags and default security 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.

LimitazioniLimitations

  • DisableOutboundSnat non è disponibile come opzione quando si configura una regola di bilanciamento del carico nel portale.DisableOutboundSnat is not available as an option when configuring a load balancing rule in portal. In alternativa, usare REST, un modello o strumenti client.Use REST, template, or client tools instead.
  • I ruoli di lavoro Web senza una rete virtuale e altri servizi della piattaforma Microsoft possono essere accessibili quando si usa solo Load Balancer Standard interno a causa di un effetto collaterale della modalità di funzionamento dei servizi pre-VNet e altre piattaforme di servizi.Web Worker Roles without a VNet and other Microsoft platform services can be accessible when only an internal Standard Load Balancer is used due to a side effect from how pre-VNet services and other platform services function. Non è necessario basarsi su questo effetto collaterale poiché il servizio stesso o la piattaforma sottostante sono soggetti a modifiche senza preavviso.You must not rely on this side effect as the respective service itself or the underlying platform may change without notice. Presupporre sempre che è necessario creare una connettività in uscita in modo esplicito se desiderato quando si usa solo Load Balancer Standard interno.You must always assume you need to create outbound connectivity explicitly if desired when using an internal Standard Load Balancer only. Lo scenario SNAT predefinito 3 descritto in questo articolo non è disponibile.The default SNAT scenario 3 described in this article is not available.

Passaggi successiviNext steps