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 utilisées pour activer la connectivité sortante dans Azure :

# 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 Utilisation de l’accès sortant par défaut Implicite Non Pire

Diagram of Azure outbound options.

1. Utilisez l’adresse IP frontale d’un équilibreur de charge pour le trafic sortant via des règles de trafic sortant

Diagram public load balancer with outbound rules.

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.

Les ports par instance doivent être calculés comme indiqué ci-dessous :

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 aux ports SNAT restants autorisés, il est possible que l’opération de scale-up du groupe de machines virtuelles identiques soit bloquée ou que les nouvelles machines virtuelles ne reçoivent pas suffisamment de ports SNAT.

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

Diagram of a NAT gateway and public load balancer.

Le NAT de Réseau virtuel simplifie la connectivité Internet uniquement sortante 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 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.

Pour plus d’informations sur le service NAT de réseau virtuel Azure, consultez Qu’est-ce que le service NAT de réseau virtuel ?

3. Attribuez une adresse IP publique à la machine virtuelle

Diagram of virtual machines with instance level public IP addresses.

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 prend le pas sur les autres.

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

Diagram of default outbound access.

Notes

Cette méthode n’est PAS recommandée pour les charges de travail de production, car elle augmente le risque d’épuisement des ports. N’hésitez pas à utiliser cette méthode pour les charges de travail de production afin d’éviter les échecs de connexion potentiels.

Toute ressource Azure qui n’a pas d’adresse IP publique associée, n’a pas d’équilibreur de charge avec des règles de trafic sortant, ne fait pas partie du mode d’orchestration flexible des groupes de machines virtuelles identiques et n’a pas de ressource de passerelle NAT associée à son sous-réseau, ne se voit allouée qu’un nombre minimal de ports pour le trafic sortant. Cet accès, connu sous le nom d’accès sortant par défaut, constitue la pire méthode de connectivité sortante pour vos applications.

Voici d’autres exemples d’accès sortant par défaut :

  • Utiliser un équilibreur de charge de référence SKU de base
  • Une machine virtuelle dans Azure (sans les associations mentionnées ci-dessus). Dans ce cas, la connectivité sortante est fournie par l’adresse IP d’accès sortant par défaut. Cette adresse IP est une adresse IP dynamique affectée par Azure que vous ne pouvez pas contrôler. Le port SNAT par défaut n’est pas recommandé pour les charges de travail en production et peut entraîner des problèmes de connectivité.
  • Une machine virtuelle dans le pool principal d’un équilibreur de charge sans règles sortantes. Par conséquent, vous utilisez l’adresse IP front-end d’un équilibreur de charge pour le trafic entrant et sortant, et êtes davantage exposé aux défaillances de connectivité résultant de l’épuisement du port SNAT.

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. Alors que toutes les IP publiques ajoutées en tant qu’adresses IP frontales peuvent être allouées, les adresses IP frontales sont consommées une par une. Par exemple, si 64 000 instances principales se voient allouer 64 000 ports chacune, avec accès à 2 adresses IP frontales, les 2 instances principales consommeront les ports de la première adresse IP frontale jusqu’à ce que les 64 000 ports soient épuisés.

Un port utilisé pour un équilibrage de charge ou une règle NAT de trafic entrant utilise huit ports des ports 64 000. Cette utilisation permet de réduire le nombre de ports éligibles pour SNAT. Si une règle NAT de trafic entrant ou d’équilibrage de charge se trouve dans la même plage de huit qu’une autre règle, elle ne consomme pas de ports supplémentaires.

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 ci-dessous.

Tableau d’attribution des ports par défaut

Le tableau suivant présente les préaffectations de ports SNAT pour les différentes tailles de pool back-end :

Taille du pool (instances de machine virtuelle) Ports de traduction d’adresses réseau sources par défaut par configuration IP
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 utilisera 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 ports de destination différents pour le trafic de retour (le port SNAT utilisé pour établir la connexion), le client n’a aucun moyen de séparer le résultat d’une requête d’un autre.

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.

Pour les connexions TCP, l’équilibreur de charge utilise un seul port SNAT pour chaque adresse IP et port de destination. Ce multiusage permet plusieurs connexions à la même adresse IP de destination avec le même port SNAT. Ce multiusage est limité si la connexion ne dirige pas vers différents ports 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.

Cela permet de réutiliser un port pour un nombre illimité de connexions. Le port est réutilisé uniquement si l’adresse IP ou le port de destination est différent.

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 back-end utilise plus de ports SNAT que ceux qui lui sont alloués, elle ne pourra pas établir de nouvelles connexions sortantes.

  • Les paquets fragmentés seront 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 IP secondaires d’une interface réseau ne fournissent pas de communication sortante (sauf si une IP publique lui est associée) via un équilibreur de charge.

Étapes suivantes