Utiliser SNAT (Source Network Address Translation) pour les connexions sortantes

Certains scénarios requièrent des machines virtuelles ou des instances de calcul pour disposer d’une connectivité sortante à Internet. Les adresses IP front-end d’un équilibreur de charge public peuvent être utilisées pour fournir une connectivité sortante à Internet pour des instances back-end. Cette configuration utilise la traduction d’adresses réseau source (SNAT) pour traduire l’adresse IP de la machine virtuelle en adresse IP publique de l’équilibreur de charge. La SNAT mappe l’adresse IP du back-end sur l’adresse IP publique de votre équilibreur de charge. SNAT permet d’empêcher des sources externes d’avoir une adresse directe vers les instances principales.

Choisissez une méthode de connectivité sortante

Choisissez une méthode explicite de connectivité sortante avant de déployer une charge de travail :

  • Utilisez Azure NAT Gateway pour une connectivité évolutive et sortie uniquement depuis un sous-réseau.
  • Utilisez une IP publique au niveau instance lorsqu’une machine virtuelle a besoin de sa propre adresse publique.
  • Utilisez des règles sortantes lorsque les instances backend utilisent une IP frontend d’équilibreur de charge pour la connectivité sortante.
  • Évitez l’accès sortant par défaut pour les charges de travail en production. Les nouveaux réseaux virtuels utilisent par défaut des sous-réseaux privés.

méthodes de connectivité sortante de Azure

Les méthodes suivantes sont les méthodes les plus couramment utilisées Azure pour activer la connectivité sortante, répertoriées dans l'ordre de priorité lorsque plusieurs méthodes sont utilisées :

# Méthode Type d’allocation des ports Qualité de production ? Rating
1 Associer Azure NAT Gateway au sous-réseau Dynamique, explicite Oui Meilleur
2 Attribuez une adresse IP publique à la machine virtuelle Statique, explicite Oui OK
3 Utilisez une ou plusieurs adresse(s) IP frontale(s) d’un équilibreur de charge pour le trafic sortant via des Règles de trafic sortant Statique, explicite Oui, mais pas à l’échelle OK
4 Utilisez une ou plusieurs adresse(s) IP frontale(s) d’un équilibreur de charge pour le trafic sortant sans des Règles de trafic sortant Statique, implicite Non Pire
5 Accès sortant par défaut Implicite Non Pire

Diagramme des options de sortie Azure.

1. Associer Azure NAT Gateway au subnet

Diagramme d’une passerelle NAT et d’un équilibreur de charge public.

Azure NAT Gateway simplifie la connectivité internet sortante uniquement pour les réseaux virtuels. Lorsque vous le configurez sur un sous-réseau, toute la connectivité sortante utilise vos adresses IP publiques statiques spécifiées. Vous pouvez avoir une connectivité sortante sans équilibreur de charge ni adresses IP publiques directement connectées aux machines virtuelles. NAT Gateway est complètement managé et hautement résilient.

Utiliser NAT Gateway est la meilleure méthode pour la connectivité sortante. NAT Gateway est très extensible, fiable, et n’a pas les mêmes préoccupations concernant l’épuisement des ports SNAT.

NAT Gateway prime sur d’autres méthodes de connectivité sortante, notamment un équilibreur de charge, les adresses IP publiques au niveau d’instance et Pare-feu Azure.

Pour plus d’informations sur Azure NAT Gateway, consultez Qu'est-ce que l'Azure NAT Gateway. Pour plus d’informations sur le fonctionnement du comportement SNAT avec NAT Gateway, consultez SNAT avec NAT Gateway.

2. Attribuez une adresse IP publique à la machine virtuelle

Diagramme de machines virtuelles avec des adresses IP publiques au niveau de l’instance.

Associations Méthode Protocoles IP
Adresse IP publique sur la carte réseau de la machine virtuelle Le port SNAT (Source Network Address Translation, traduction d’adresses réseau sources)
n’est pas utilisé.
Protocole TCP (Transmission Control Protocol)
UDP (User Datagram Protocol)
ICMP (Internet Control Message Protocol)
ESP (Encapsulating Security Payload)

Tout le trafic est retourné au client demandeur à partir de l’adresse IP publique de la machine virtuelle (IP au niveau de l’instance).

Azure utilise l'adresse IP publique affectée à la configuration IP de la carte réseau de l'instance pour tous les flux sortants. L’instance a tous les ports éphémères disponibles. Peu importe si la machine virtuelle est équilibrée en charge ou non. Ce scénario est prioritaire sur les autres, à l’exception de NAT Gateway.

Une adresse IP publique affectée à une machine virtuelle constitue une relation 1:1 (non pas une relation 1-à-plusieurs) ; elle est implémentée comme un NAT 1:1 sans état.

3. Utilisez la ou les adresses IP front-end d’un équilibreur de charge pour le trafic sortant via des règles de trafic sortant

Diagramme d’un équilibreur de charge public avec des règles de trafic sortant.

Les règles de trafic sortant vous permettent de définir explicitement la traduction d’adresses réseau sources (SNAT) pour un équilibreur de charge standard public de référence SKU. Cette configuration vous permet d’utiliser la ou les adresse(s) IP publique(s) de votre équilibreur de charge pour la connectivité sortante des instances principales.

Cette configuration permet :

  • L’usurpation d’adresse IP

  • Simplification de vos listes d’autorisation

  • La réduction du nombre de ressources IP publiques pour le déploiement

Avec les règles de trafic sortant, vous disposez d’un contrôle déclaratif complet sur la connectivité Internet sortante. Les règles de trafic sortant vous permettent de mettre à l’échelle et de régler cette capacité en fonction de vos besoins spécifiques à l’aide d’une allocation de port manuelle. L’allocation manuelle du port SNAT en fonction de la taille du pool backend et du nombre de configurations d’adresses IP frontales peut permettre d’éviter l’épuisement des SNAT.

Vous pouvez allouer manuellement les ports SNAT en fonction des « ports par instance » ou du « nombre maximal d’instances backend ». Si vous avez des machines virtuelles dans le backend, il est recommandé d’allouer des ports en fonction des « ports par instance » pour obtenir une utilisation maximale du port SNAT.

Calculez les ports par instance comme suit :

Nombre d’adresses IP frontales * 64 000 / Nombre d’instances back-end

Si vous avez Virtual Machine Scale Sets dans le back-end, il est recommandé d'allouer des ports par « nombre maximal d'instances principales ». Si plus de machines virtuelles sont ajoutées au serveur principal que les ports SNAT restants autorisés, le scale-out de Virtual Machine Scale Sets peut être bloqué ou les nouvelles machines virtuelles ne recevront pas de ports SNAT suffisants.

Remarque

Quand plusieurs adresses IP front-end sont configurées en utilisant des règles de trafic sortant, les connexions sortantes peuvent provenir de n’importe quelle adresse IP front-end configurée pour l’instance back-end. Nous vous déconseillons de créer des dépendances sur lesquelles une adresse IP front-end peut être sélectionnée pour des connexions.

Pour plus d’informations sur les règles de trafic sortant, consultez Règles de trafic sortant.

4. Utilisez la ou les adresses IP front-end d’un équilibreur de charge pour le trafic sortant sans règles de trafic sortant

Cette option est similaire à la précédente, sauf quand aucune règle de trafic sortant n’est créée. Dans ce cas, le ou les serveurs frontaux de l’équilibreur de charge sont toujours utilisés pour le trafic sortant, mais cela est effectué implicitement sans règles qui spécifient le serveur frontal qui serait utilisé. Le fait de ne pas utiliser de règles sortantes diminue également l’évolutivité du trafic sortant, car la connectivité sortante implicite dispose d’un nombre fixe de ports SNAT par adresse IP frontale, ce qui peut entraîner un épuisement des ports dans les scénarios à fort trafic.

5. Accès sortant par défaut

Diagramme de l’accès sortant par défaut.

Dans Azure, les machines virtuelles créées dans un réseau virtuel sans connectivité sortante explicite définie sont affectées à une adresse IP publique sortante par défaut. Cette adresse IP active la connectivité sortante à partir des ressources sur Internet. Cet accès est appelé accès sortant par défaut. Cette méthode d’accès n’est pas recommandée, car elle n’est pas sécurisée et les adresses IP sont susceptibles de changer.

Important

Le 31 mars 2026, les nouveaux réseaux virtuels utilisent par défaut des sous-réseaux privés. Pour plus d’informations, consultez l’annonce officielle. Utilisez l’une des formes explicites de connectivité, comme indiqué dans les options 1 à 3 ci-dessus.

Ports SNAT d’Azure Load Balancer

Les ports génèrent des identificateurs uniques qui gèrent des flux distincts. Internet utilise cinq tuples pour fournir cette distinction.

Si vous utilisez un port pour les connexions entrantes, il dispose d’un écouteur pour les demandes de connexion entrantes sur ce port. Ce port ne peut pas être utilisé pour les connexions sortantes. Pour établir une connexion sortante, utilisez un port éphémère pour fournir à la destination un port sur lequel communiquer et gérer un flux de trafic distinct. Quand ces ports éphémères sont utilisés pour SNAT, ils sont appelés ports SNAT

Par définition, chaque adresse IP a 65 535 ports. Chaque port peut être utilisé pour les connexions entrantes ou sortantes pour TCP (Protocole de contrôle de transmission) et UDP (protocole de datagramme utilisateur). Lorsque vous ajoutez une adresse IP publique en tant qu’adresse IP frontale à un équilibreur de charge, 64 000 ports sont éligibles pour SNAT.

Chaque port utilisé dans une règle NAT d’équilibrage de charge ou de trafic entrant consomme une plage de huit ports issus des 64 000 ports SNAT disponibles. Cette utilisation réduit le nombre de ports éligibles pour SNAT, si la même adresse IP de front-end est utilisée pour la connectivité sortante. Si les ports consommés par l’équilibrage de charge ou les règles NAT de trafic entrant se trouvent dans le même bloc de huit ports que ceux consommés par une autre règle, les règles ne requièrent aucun autre port.

Remarque

Si vous devez vous connecter à des services PaaS pris Azure en charge tels que stockage Azure, Azure SQL ou Azure Cosmos DB, utilisez Azure Private Link pour éviter entièrement la SNAT. Azure Private Link envoie le trafic de votre réseau virtuel vers Azure services via le réseau principal Azure au lieu d’Internet.

Private Link est l’option recommandée sur les points de terminaison de service pour l’accès privé aux services hébergés Azure. Pour plus d’informations sur la différence entre les points de terminaison de Private Link et de service, consultez Compare Private Endpoints and Service Endpoints.

Comportement par défaut du SNAT d’Azure Load Balancer

Lorsqu’une machine virtuelle crée un flux sortant, Azure traduit l’adresse IP source en adresse IP éphémère. Azure effectue cette traduction via SNAT.

Si vous utilisez SNAT sans règles de trafic sortant via un équilibreur de charge public, le système préalloue les ports SNAT comme décrit dans la table d’allocation de ports SNAT par défaut suivante :

Tableau d’attribution des ports par défaut

Lorsque vous activez l’allocation de ports par défaut, le système alloue des ports SNAT en fonction de la taille du pool principal. Chaque back-end reçoit le nombre de ports définis par la table, par adresse IP frontale, jusqu’à un maximum de 1 024 ports. N’utilisez pas l’allocation de ports par défaut pour les charges de travail de production, car il alloue un nombre minimal de ports à chaque instance principale et augmente le risque d’épuisement des ports SNAT. Envisagez plutôt d’utiliser Azure NAT Gateway ou d’allouer manuellement des ports dans les règles de trafic sortant de votre équilibreur de charge.

Vous pouvez activer l’allocation de port par défaut de plusieurs façons :

  • Configurez une règle d’équilibrage de charge avec disableOutboundSnat défini sur false, ou sélectionnez l’option d’allocation de ports par défaut dans une règle d’équilibrage de charge du portail Azure.
  • Configurez une règle de trafic sortant, mais définissez la propriété allocatedOutboundPorts sur 0, ou sélectionnez Activer l’allocation de port par défaut dans le portail Azure.

Par exemple, avec 100 machines virtuelles dans un pool principal et une seule adresse IP frontale, chaque machine virtuelle reçoit 512 ports. Si vous ajoutez une deuxième adresse IP frontale, chaque machine virtuelle reçoit un nombre supplémentaire de 512 ports. Cette allocation signifie que chaque machine virtuelle est allouée à un total de 1 024 ports. Par conséquent, l’ajout d’une troisième adresse IP frontale n’augmente pas le nombre de ports SNAT alloués au-delà de 1 024 ports.

En règle générale, vous pouvez calculer le nombre de ports SNAT fournis lorsque l’allocation de ports par défaut est appliquée comme suit : MIN(# of default SNAT ports provided based on pool size * number of frontend IPs associated with the pool, 1024).

Le tableau suivant présente les préallocations de port SNAT pour une seule IP de front-end, en fonction de la taille du pool de back-ends :

Taille du pool (instances de machine virtuelle) Ports SNAT par défaut
1-50 1 024
51-100 512
101-200 256
201-400 128
401-800 64
801-1 000 32

Épuisement des ports

Chaque connexion à une même adresse IP de destination et au même port de destination utilise un port SNAT. Cette connexion gère un flux de trafic distinct depuis l’instance ou le client back-end vers un serveur. Ce processus fournit au serveur un port distinct vers lequel envoyer le trafic. Sans ce processus, l’ordinateur client ignore dans quel flux trouver tel ou tel paquet.

Imaginez que plusieurs navigateurs vont vers https://www.microsoft.com, à savoir :

  • IP de destination = 23.53.254.142

  • Port de destination = 443

  • Protocole = TCP

Sans port SNAT pour le trafic en retour, le client ne dispose d’aucun moyen de distinguer les résultats de différentes requêtes.

Le nombre de connexions sortantes peut augmenter rapidement. L’instance back-end risque de se retrouver en manque de ports. Utilisez la fonctionnalité de réutilisation des connexions dans votre application. Sans la réutilisation des connexions, le risque d’épuisement des ports SNAT augmente.

Pour plus d’informations sur le regroupement de connexions avec Azure App Service, consultez Résolution des erreurs de connexion sortantes intermittentes dans Azure App Service.

Un épuisement des ports provoque l’échec des nouvelles connexions sortantes vers une adresse IP de destination. Les connexions sont correctement établies lorsqu’un port est disponible. Cet épuisement se produit lorsque les 64 000 ports à partir d’une adresse IP sont répartis sur de nombreuses instances back-end. Pour obtenir des conseils sur l’atténuation de l’épuisement des ports SNAT, consultez Support et résolution des problèmes pour Azure Load Balancer.

Réutilisation des ports

Pour TCP, chaque connexion active nécessite un tuplet source traduit distinct vers un tuple de destination spécifique, qui se compose de l’adresse IP de destination et du port de destination. Vous pouvez réutiliser un port SNAT pour une connexion à une adresse IP de destination différente ou à un port de destination différent. Vous ne pouvez pas le réutiliser pour une autre connexion active depuis la même instance backend vers la même adresse IP de destination et le même port de destination.

Pour les connexions UDP, l’équilibreur de charge utilise un algorithme nommé port-restricted cone NAT (ou NAT à cône restrictif sur les ports), qui consomme un port SNAT par adresse IP de destination, quel que soit le port de destination.

Vous pouvez réutiliser des ports individuels pour un nombre illimité de connexions où la réutilisation est autorisée (lorsque l’adresse IP de destination ou le port est différent).

Dans l’exemple du tableau suivant, une instance principale avec ip privée 10.0.0.1 établit des connexions TCP aux adresses IP de destination 23.53.254.142 et 26.108.254.155, tandis que l’équilibreur de charge est configuré avec l’adresse IP frontale 192.0.2.0. Comme les adresses IP de destination sont différentes, le même port SNAT peut être réutilisé pour plusieurs connexions.

Flux Tuple source Tuple source après SNAT Tuple de destination
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

Contraintes

Les contraintes suivantes s’appliquent à Azure Load Balancer SNAT. Les contraintes individuelles identifient lorsqu’elles ne s’appliquent qu’à TCP, UDP, aux règles sortantes ou aux configurations IP publiques au niveau de l’instance.

  • Lorsqu’une connexion est inactive sans nouveaux paquets envoyés, les ports sont libérés après 4 à 120 minutes.

  • Vous pouvez configurer ce seuil via des règles de trafic sortant.

  • Chaque adresse IP fournit 64 000 ports que vous pouvez utiliser pour SNAT.

  • Chaque port peut être utilisé pour les connexions TCP et UDP à une adresse IP de destination.

  • Vous avez besoin d’un port UDP SNAT si le port de destination est unique ou non. Pour chaque connexion UDP à une adresse IP de destination, un port UDP SNAT est utilisé.

  • Un port TCP SNAT peut être utilisé pour plusieurs connexions à la même adresse IP de destination tant que les ports de destination sont différents.

  • L’épuisement SNAT se produit lorsqu’une instance back-end s’épuise de ports SNAT donnés. Un équilibreur de charge peut toujours avoir des ports SNAT inutilisés. Si les ports SNAT utilisés d’une instance principale dépassent ses ports SNAT donnés, il ne peut pas établir de nouvelles connexions sortantes.

  • Le système envoie des paquets fragmentés sauf si la sortie se fait via une adresse IP publique au niveau instance sur la carte réseau de la VM.

  • Les règles de trafic sortant ne prennent pas en charge les configurations IPv4 secondaires d’une interface réseau. Pour la connectivité sortante sur des configurations IPv4 secondaires, attachez des adresses IP publiques au niveau de l’instance ou utilisez Azure NAT Gateway à la place.

Étapes suivantes