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.

Méthodes de connectivité sortante d’Azure

Les méthodes suivantes sont les méthodes Azure les plus couramment utilisées pour activer la connectivité sortante :

# Méthode Type d’allocation des ports Qualité de production ? Rating
1 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
2 Associez une passerelle NAT au sous-réseau Dynamique, explicite Oui La meilleure
3 Attribuez une adresse IP publique à la machine virtuelle Statique, explicite Oui OK
4 Accès sortant par défaut Implicite Non Pire

Diagramme des options de trafic sortant Azure.

1. Utilisez l’adresse IP frontale 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 serveur principal, il est recommandé d’allouer des ports en fonction du « nombre maximal d’instances back-end ». Si le nombre de machines virtuelles ajoutées au serveur principal est supérieur au nombre de ports SNAT restants autorisés, le scale-out des groupes de machines virtuelles identiques peut être bloqué ou les nouvelles machines virtuelles ne recevront pas suffisamment de ports SNAT.

Quand plusieurs adresses IP front-ends 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.

2. Associez une passerelle NAT au sous-réseau

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. Quand il est configuré sur un sous-réseau, toute la connectivité sortante utilise vos adresses IP publiques statiques spécifiées. Une connectivité sortante est possible sans équilibreur de charge ni adresses IP publiques directement attachées aux machines virtuelles. NAT Gateway est complètement managé et hautement résilient.

L’utilisation d’une passerelle NAT est la meilleure méthode pour la connectivité sortante. Une passerelle NAT est hautement extensible, fiable et n’a pas les mêmes préoccupations en matière d’épuisement des ports SNAT.

La passerelle NAT est prioritaire sur d’autres méthodes de connectivité sortante, notamment un équilibreur de charge, les adresses IP publiques au niveau de l’instance et le Pare-feu Azure.

Pour plus d’informations sur Azure NAT Gateway, consultez Qu’est-ce qu’Azure NAT Gateway.

3. 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’IP publique attribuée à la configuration IP de la carte d’interface 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.

4. 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 se voient attribuer 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 30 septembre 2025, l’accès sortant par défaut pour les nouveaux déploiements sera mis hors service. Pour plus d’informations, consultez l’annonce officielle. Nous vous recommandons d’utiliser une des formes de connectivité explicites, comme indiqué dans les options 1-3 ci-dessus.

Que sont les ports SNAT ?

Les ports sont utilisés pour générer des identificateurs uniques, eux-mêmes utilisés pour gérer des flux distincts. Internet utilise cinq tuples pour fournir cette distinction.

Si un port est utilisé pour des connexions entrantes, il a un écouteur pour les requêtes de connexions 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 un port à la destination, afin de communiquer et de maintenir 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 les protocoles TCP (Transmission Control Protocol) et UDP (User Datagram Protocol). Quand une adresse IP publique est ajoutée en tant qu’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.

Notes

Si vous devez vous connecter à des services PaaS Azure pris en charge tels que le Stockage Azure, Azure SQL ou Azure Cosmos DB, vous pouvez utiliser Azure Private Link pour éviter entièrement SNAT. Azure Private Link envoie le trafic de votre réseau virtuel aux services Azure 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 Private Link et de service, consultez Comparer les points de terminaison privés et les points de terminaison de service.

Comment fonctionne le SNAT par défaut ?

Quand la machine virtuelle crée un flux sortant, Azure traduit l’adresse IP source en adresse IP éphémère. Cette traduction s’effectue par le biais de la SNAT.

Si vous utilisez des ports SNAT sans règles de trafic sortant via un équilibreur de charge public, les ports SNAT sont pré-attribués, comme décrit dans le tableau d’attribution des ports SNAT par défaut suivant :

Tableau d’attribution des ports par défaut

Quand des règles d’équilibrage de charge sont sélectionnées pour utiliser l’allocation de ports par défaut ou que des règles de trafic sortant sont configurées avec « Utiliser le nombre de ports de sortie par défaut », les ports SNAT sont alloués par défaut en fonction de la taille du pool de back-ends. Les back-ends reçoivent le nombre de ports définis par le tableau, par adresse IP front-end, jusqu’à un maximum de 1 024 ports.

Par exemple, avec 100 machines virtuelles dans un pool de back-ends et une seule adresse IP front-end, chaque machine virtuelle reçoit 512 ports. Si une deuxième adresse IP front-end est ajoutée, chaque machine virtuelle reçoit 512 ports supplémentaires. Cela signifie que chaque machine virtuelle se voit allouer un total de 1 024 ports. Par conséquent, l’ajout d’une troisième IP de front-end n’augmente PAS le nombre de ports SNAT alloués au-delà de 1 024 ports.

En règle générale, le nombre de ports SNAT fournis quand l’allocation de ports par défaut est utilisée peut être calculé de la façon suivante : MIN(nombre de ports SNAT par défaut fournis en fonction de la taille du pool * nombre d’adresses IP front-end associées au pool, 1 024)

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 intermittentes de connexion sortante 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 ce guide de résolution des problèmes.

Réutilisation des ports

Pour les connexions TCP, l’équilibreur de charge utilise un seul port SNAT pour chaque adresse IP et port de destination. Pour les connexions à la même adresse IP de destination, un seul port SNAT peut être réutilisé tant que le port de destination diffère. La réutilisation n’est pas possible quand il existe déjà une connexion à la même adresse IP et au 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.

Les ports individuels peuvent être réutilisés pour un nombre illimité de connexions où la réutilisation est autorisée (quand l’adresse IP de destination ou le port est différent).

Dans l’exemple du tableau suivant, une instance back-end avec l'adresse IP privée 10.0.0.1 effectue 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 front-end 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

  • Lorsqu’une connexion est inactive et qu’aucun nouveau paquet n’est envoyé, les ports sont libérés après un délai allant de 4 à 120 minutes.

  • Ce délai peut être configuré à l’aide des règles de trafic sortant.

  • Chaque adresse IP fournit 64 000 ports qui peuvent être utilisés pour la SNAT.

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

  • Un port UDP SNAT est nécessaire 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, à condition que les ports de destination soient différents.

  • L’épuisement des ports SNAT se produit lorsqu’une instance back-end n’a pas assez de ports SNAT. Un équilibreur de charge peut toujours avoir des ports SNAT inutilisés. Si une instance principale utilise plus de ports SNAT que ceux qui lui sont alloués, elle ne peut pas établir de nouvelles connexions sortantes.

  • Les paquets fragmentés sont supprimés, sauf si le trafic sortant se fait via une adresse IP publique au niveau de l’instance sur la carte réseau de la machine virtuelle.

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

Étapes suivantes