Présentation des adresses et des ports Cloud NAT

Cette page décrit comment les passerelles Cloud NAT utilisent des adresses IP externes et comment elles allouent des ports sources aux instances de machines virtuelles (VM) Compute Engine et aux nœuds Google Kubernetes Engine (GKE) qui les utilisent.

Avant d'examiner ces informations, consultez la page Présentation de Cloud NAT.

Adresses IP NAT

Une adresse IP NAT est une adresse IP externe régionale, pouvant être routée sur Internet. Une VM sans adresse IP externe, dans un sous-réseau desservi par une passerelle Cloud NAT, utilise une adresse IP NAT lorsqu'elle envoie des paquets à une destination sur Internet.

Pour attribuer des adresses IP NAT à une passerelle Cloud NAT, utilisez l'une des méthodes suivantes :

  • Allocation automatique d'adresses IP NAT Lorsque vous sélectionnez cette option ou sélectionnez les valeurs par défaut de Google Cloud, Cloud NAT ajoute automatiquement à votre passerelle des adresses IP externes régionales en fonction du nombre de VM utilisant la passerelle et du nombre de ports réservés pour chaque VM. Une adresse IP NAT est également automatiquement supprimée lorsqu'elle n'a plus besoin de ports sources.

    • Lorsqu'une passerelle Cloud NAT ajoute une adresse IP NAT, elle crée une adresse IP externe régionale statique (réservée). Ces adresses sont prises en compte dans les quotas par projet.
    • Avec l'allocation automatique, vous ne pouvez pas prédire l'adresse IP suivante qui sera allouée. Si vous avez besoin de connaître l'ensemble des adresses IP NAT possibles à l'avance (par exemple, pour créer une liste d'autorisation), vous devez utiliser l'attribution manuelle d'adresses IP NAT.
    • Si vous passez ultérieurement à l'attribution manuelle d'adresses IP NAT, les adresses IP externes régionales automatiquement réservées sont supprimées. Pour en savoir plus, consultez la section Changer de méthode d'attribution.
  • Attribution manuelle des adresses IP NAT Lorsque vous sélectionnez cette option, vous créez et attribuez manuellement des adresses IP externes régionales statiques (réservées) à votre passerelle Cloud NAT. Vous pouvez augmenter ou diminuer le nombre d'adresses IP NAT attribuées manuellement en modifiant la passerelle Cloud NAT.

    • Lorsque vous utilisez l'attribution manuelle d'adresses IP NAT, vous devez calculer le nombre d'adresses IP externes régionales dont vous avez besoin pour la passerelle Cloud NAT. Si votre passerelle ne dispose plus d'adresses IP NAT, Cloud NAT supprime les paquets. Les paquets supprimés sont consignés lorsque vous utilisez la journalisation Cloud NAT pour activer la journalisation des erreurs.
    • Pour obtenir des exemples de calculs, consultez l'exemple de réservation de port.

Pour connaître le nombre maximal d'adresses IP NAT allouées automatiquement ou attribuées manuellement, consultez la section Limites de Cloud NAT.

Changer de méthode d'attribution

Vous pouvez passer de l'allocation automatique d'adresses IP NAT à l'attribution manuelle d'adresse IP NAT pour votre passerelle Cloud NAT. Toutefois, les adresses IP NAT ne peuvent pas être conservées. Même si les adresses IP NAT allouées automatiquement sont statiques, elles ne peuvent pas être déplacées vers une attribution manuelle d'adresses IP NAT. Par exemple, vous ne pouvez pas commencer à utiliser une passerelle Cloud NAT avec des adresses IP NAT allouées automatiquement, puis utiliser ensuite ces mêmes adresses si vous passez à l'attribution manuelle d'adresses IP NAT pour votre passerelle Cloud NAT.

L'ensemble d'adresses IP externes régionales utilisées par Cloud NAT pour l'allocation automatique d'adresses IP NAT est différent de l'ensemble d'adresses IP externes régionales que vous pouvez sélectionner manuellement.

Drainer les adresses IP NAT

Lorsque vous configurez une passerelle Cloud NAT avec l'attribution manuelle d'adresses IP NAT, vous pouvez choisir ce qui se passe lorsque vous devez réduire le nombre d'adresses IP NAT utilisées par la passerelle :

  • Si vous supprimez une adresse IP NAT attribuée manuellement, les connexions NAT établies sont immédiatement interrompues.

  • Vous pouvez choisir de drainer une adresse IP NAT attribuée manuellement. Le drainage indique à la passerelle Cloud NAT de cesser d'utiliser l'adresse IP NAT pour les nouvelles connexions, mais de continuer à l'utiliser pour les connexions établies. Les connexions établies sont autorisées à se fermer normalement au lieu d'être immédiatement supprimées. Pour obtenir des instructions, consultez la section Drainer des adresses IP externes associées à la NAT.

Ports

Chaque adresse IP NAT sur une passerelle Cloud NAT dispose de 64 512 ports sources TCP et de 64 512 ports sources UDP. TCP et UDP acceptent chacun 65 536 ports par adresse IP, et Cloud NAT n'utilise pas les 1 024 premiers ports connus (privilégiés).

Lorsque vous créez une passerelle Cloud NAT, vous spécifiez un nombre minimal de ports par instance de VM. Lorsqu'une passerelle Cloud NAT effectue une traduction d'adresse réseau source (SNAT) sur un paquet envoyé par une VM, elle modifie l'adresse IP NAT et le port source du paquet.

Procédure de réservation de port

Cloud NAT utilise cette procédure pour provisionner les tuples d'adresses IP sources et de ports sources pour chaque VM desservie par la passerelle Cloud NAT. Lorsque vous utilisez une passerelle Cloud NAT pour fournir des services NAT pour un cluster Google Kubernetes Engine privé, le nombre de tuples d'adresse IP source et de port source est attribué à l'ensemble de la VM de nœud, partagée par tous les pods du nœud.

  1. Déterminez les adresses IP internes de VM pour lesquelles la NAT doit être effectuée. Les adresses IP internes de VM pour lesquelles une passerelle Cloud NAT doit effectuer la NAT sont déterminées par les plages d'adresses IP de sous-réseau que la passerelle a été configurée pour utiliser.

    • Si la passerelle Cloud NAT est configurée pour effectuer la NAT pour la plage d'adresses IP principale du sous-réseau utilisé par l'interface réseau de la VM, elle effectue la NAT pour l'adresse IP interne principale de la VM et n'importe quelle plage d'adresses IP d'alias de la VM appartenant à la plage d'adresses IP principale du sous-réseau.

    • Si la passerelle Cloud NAT est configurée pour exécuter la NAT pour une plage d'adresses IP secondaire du sous-réseau utilisé par l'interface réseau de la VM, elle effectue la NAT pour n'importe quelle plage d'adresses IP d'alias appartenant à la plage d'adresses IP secondaire du sous-réseau.

  2. Calculez le nombre de ports sources à attribuer à la VM.

    1. Si la passerelle Cloud NAT doit exécuter la NAT pour une ou plusieurs des plages d'adresses IP d'alias de la VM dont les masques de réseau sont plus courts que /32, c'est-à-dire, si la passerelle doit exécuter la NAT pour au moins l'une des plages d'adresses IP d'alias de la VM constituées de plus d'une adresse IP unique, Cloud NAT prend le maximum des deux nombres suivants et passe à l'étape suivante en utilisant ce maximum comme entrée :

      • Nombre minimal de ports par instance de VM que vous avez spécifié
      • Le nombre 1 024

      Sinon, la passerelle Cloud NAT passe à l'étape suivante en n'utilisant que le nombre minimal de ports par instance de VM comme entrée.

    2. La passerelle Cloud NAT utilise cette entrée pour déterminer le nombre de ports sources qu'elle doit attribuer à la VM.

  1. Réservez les tuples d'adresse IP source et de port source pour la VM. Le nombre de tuples d'adresse IP source NAT et de port source correspond au nombre de ports sources à attribuer à la VM par la passerelle Cloud NAT.

    Il est possible que les tuples d'adresse IP source et de port source couvrent plusieurs adresses IP NAT si la passerelle Cloud NAT utilise deux adresses IP NAT ou plus. Une adresse IP NAT unique peut ne pas avoir suffisamment de ports sources non réservés pour prendre en charge le nombre de tuples d'adresse IP source et de port source nécessaire à la VM.

Réduire les ports

Vous pouvez réduire le nombre de ports minimum par VM sur les ressources Cloud NAT déjà configurées. Toutefois, aucun drainage de connexion ne se produit. Lorsque vous réduisez le nombre de ports par VM, les connexions NAT établies sont immédiatement interrompues.

Ports et connexions

Le nombre de tuples d'adresse IP source et de port source qu'une passerelle Cloud NAT réserve à une VM limite le nombre de connexions que la VM peut établir vers une destination unique :

  • Une destination unique correspond à un 3-tuple unique composé d'une adresse IP de destination, d'un port de destination et d'un protocole IP (tel que TCP ou UDP).

  • Une connexion correspond à un 5-tuple unique composé du tuple d'adresse IP source et de port source, associé à un 3-tuple de destination unique. Le protocole UDP étant sans connexion, le concept de connexion est réduit à un 5-tuple associé à un datagramme UDP unique.

Supposons qu'une passerelle Cloud NAT évalue à 1 024 le nombre fixe de ports pour une VM en suivant la procédure de réservation de port. La passerelle Cloud NAT réserve 1 024 combinaisons uniques de tuples d'adresse IP source et de port source pour la VM. La passerelle Cloud NAT peut traiter 1 024 connexions simultanées vers chaque 3-tuple de destination unique. Cependant, Cloud NAT considère que les connexions fermées sont inutilisables pendant 120 secondes après la fermeture de la connexion, ce qui peut affecter le nombre de connexions utilisées à la fois.

Par exemple :

  • La passerelle accepte 1 024 connexions simultanées vers l'adresse IP de destination 203.0.113.99 sur le port 80, en utilisant le protocole TCP.

  • La passerelle accepte 1 024 connexions simultanées supplémentaires vers cette même adresse IP de destination sur le port 443, en utilisant également le protocole TCP.

  • La passerelle accepte 1 024 connexions simultanées supplémentaires vers une adresse IP de destination différente sur le port 80, en utilisant également le protocole TCP.

Réutilisation simultanée de ports et mappage indépendant des points de terminaison

Tant qu'au moins une information sur le 3-tuple de destination change (l'adresse IP de destination, le port de destination, le protocole), le même tuple d'adresse IP source et de port source NAT peut être utilisé simultanément pour de nombreuses connexions différentes.

Étant donné que Cloud NAT utilise le mappage indépendant des points de terminaison, comme défini dans la section 2.3 du document RFC 5128, le nombre de connexions simultanées qu'une VM cliente peut établir vers un 3-tuple de destination unique peut être réduit si Cloud NAT attribue le même tuple d'adresse IP source et de port source NAT à plusieurs adresses IP internes et ports sources éphémères d'une VM cliente. Les risques augmentent si la VM cliente possède un grand nombre d'adresses IP sources internes et établit un grand nombre de connexions au même 3-tuple de destination. La première fois qu'une VM cliente envoie un paquet à partir d'une adresse IP interne et d'un port source éphémère, Cloud NAT crée un mappage de type plusieurs à un, indépendant des points de terminaison, entre les éléments suivants :

  • Le tuple d'adresse IP interne et de port source éphémère
  • Un tuple d'adresse IP source unique et de port source

Par exemple, lorsqu'une VM cliente envoie un paquet à partir de son adresse IP interne 10.0.0.2 via le port source éphémère 10001, Cloud NAT attribue à 10.0.0.2:10001 un tuple d'adresse IP source et de port source NAT à utiliser pour toutes les connexions suivantes de 10.0.0.2:10001 à n'importe quel 3-tuple de destination.

Si la même VM utilise un port source éphémère différent pour envoyer un paquet, par exemple 10.0.0.2:20002, Cloud NAT attribue également une adresse IP source NAT et un tuple de port source pour toutes les connexions suivantes de 10.0.0.2:20002 à n'importe quel 3-tuple de destination. Il est possible que Cloud NAT attribue le même tuple d'adresse IP NAT source et de port source à la fois pour ces tuples d'adresses IP internes et de port source éphémère. Dans certaines situations, cela provoque un conflit indépendant de points de terminaison.

Pour obtenir un exemple plus détaillé, consultez l'exemple de conflit de mappage indépendant du point de terminaison.

Réduire les conflits indépendants des points de terminaison

Vous pouvez réduire les risques de conflits indépendants des points de terminaison à l'aide des techniques suivantes :

  • Désactivez le mappage indépendant du point de terminaison.

  • Augmentez le nombre minimal de ports par instance de VM afin que la procédure de réservation de port puisse attribuer plus de tuples d'adresse IP source et de port source à chaque VM cliente. Cela réduit la probabilité qu'au moins deux tuples d'adresse IP cliente et de port source éphémères soient attribués au même tuple d'adresse IP source et de port source NAT à la fois.

  • Configurez vos instances de VM pour qu'elles utilisent davantage de ports sources éphémères :

    • Sur les VM Linux, vous pouvez définir ip_local_port_range sur le nombre maximal de ports sources éphémères (64 512) à l'aide de la commande suivante :

      echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
      
    • Sur les VM Windows, vous pouvez définir le nombre maximal de ports TCP et UDP sources (64 512) à l'aide des commandes suivantes :

      netsh int ipv4 set dynamicport tcp start=1024 num=64512
      netsh int ipv4 set dynamicport udp start=1024 num=64512
    • Sur les nœuds GKE, vous pouvez automatiser cette configuration en utilisant un DaemonSet privilégié.

  • Pour les clusters GKE, désactivez la NAT source mise en place sur chaque nœud pour les paquets envoyés vers les destinations d'intérêt. Pour effectuer cette opération, procédez de l'une des manières suivantes :

Délai avant réutilisation des ports sources TCP

Lorsqu'une passerelle Cloud NAT ferme une connexion TCP, Google Cloud laisse s'écouler un délai de deux minutes avant que la passerelle ne puisse réutiliser le même tuple d'adresse IP source et de port source NAT vers la même destination (adresse IP de destination, port de destination et protocole).

Vous ne pouvez pas réduire ce délai. Toutefois, vous pouvez effectuer l'une des actions suivantes :

  • Augmentez le nombre minimal de ports par instance de VM afin que la procédure de réservation de port attribue à la VM davantage de tuples d'adresse IP source et de port source NAT.

  • Si une VM doit rapidement ouvrir et fermer des connexions TCP vers la même adresse IP de destination et le même port de destination à l'aide du même protocole, vous devez attribuer une adresse IP externe à la VM et utiliser des règles de pare-feu pour limiter les connexions d'entrée non sollicitées, au lieu d'utiliser Cloud NAT.

Ports source et sécurité

Si vous dépendez de la randomisation du port source comme mesure de sécurité, vous devez prendre en compte ce qui suit :

Exemples

Les exemples suivants montrent comment Cloud NAT réserve les adresses IP sources et les ports sources d'une VM, et la façon dont la NAT s'applique aux paquets envoyés à Internet.

Réservation de port

Les exemples suivants illustrent les applications de la procédure de réservation de port :

Supposons que vous configurez une passerelle Cloud NAT pour fournir une NAT à la plage d'adresses IP principale d'un sous-réseau, et que les VM utilisant ce sous-réseau ne disposent d'aucune plage d'adresses IP d'alias appartenant à la plage d'adresses IP principale du sous-réseau. Arrondissez le résultat de n'importe quelle opération de division à l'entier inférieur le plus proche. ⌊⌋ est la fonction floor (plus grand entier), ce qui signifie que tout résultat fractionnaire de division est ignoré.

  • Si vous configurez la passerelle Cloud NAT avec une adresse IP NAT unique à l'aide de l'attribution manuelle, et que vous définissez le nombre minimal de ports par instance de VM sur 64, la passerelle peut fournir des services NAT pour 1 008 VM maximum :

    ⌊(1 adresse IP NAT) × (64 512 ports par adresse) / (64 ports par VM)⌋ = 1 008 VM

  • Si vous devez prendre en charge plus de 1 008 VM, vous pouvez attribuer une deuxième adresse IP NAT à la passerelle Cloud NAT. Avec deux adresses IP NAT, en conservant le nombre minimal de ports par VM de 64, vous pouvez prendre en charge 2 016 VM :

    ⌊(2 adresses IP NAT) × (64 512 ports par adresse) / (64 ports par VM)⌋ = 2 016 VM

  • Si vous définissez le nombre minimal de ports par VM sur 4 096, chaque adresse IP NAT peut prendre en charge 15 VM. Ce calcul est arrondi à l'entier inférieur le plus proche :

    ⌊(1 adresse IP NAT) × (64 512 ports par adresse) / (4 096 ports par VM)⌋ = 15 VM

Conflit de mappage indépendant du point de terminaison

L'exemple suivant montre comment le mappage indépendant des points de terminaison peut réduire le nombre de connexions simultanées d'une VM cliente au même 3-tuple de destination, même s'il y a suffisamment de tuples d'adresse IP source et de port source gratuits pour la VM cliente.

Supposons que vous ayez configuré une passerelle Cloud NAT pour fournir la NAT à la plage d'adresses IP principale d'un sous-réseau. Vous avez créé une VM cliente avec une interface réseau dont l'adresse IP interne principale est 10.0.0.2 dans ce sous-réseau. Aucune adresse IP externe n'est attribuée à l'interface de l'exemple de VM.

  1. La VM ouvre une connexion avec les caractéristiques suivantes :

    • Adresse IP interne et port sources : 10.0.0.2:10001
    • Trois-tuple de destination : 203.0.113.1:80 via TCP
    • Cloud NAT utilise le tuple d'adresse IP source et de port source NAT suivant : 192.0.2.10:30009
  2. La VM ouvre une deuxième connexion avec les caractéristiques suivantes :

    • Adresse IP interne et port sources : 10.0.0.2:10002
    • Trois-tuple de destination : 203.0.113.2:80 via TCP
    • Cloud NAT peut également utiliser le même tuple d'adresse IP source et de port source, 192.0.2.10:30009, pour cette connexion. Il est possible d'utiliser le même tuple d'adresse IP source et de port source pour une adresse IP cliente différente et un port source éphémère.
  3. Tant que les première et deuxième connexions sont actives, Cloud NAT ne peut pas ouvrir une troisième connexion TCP avec les caractéristiques suivantes :

    • Adresse IP interne et port sources identiques à ceux de la première connexion : 10.0.0.2:10001
    • Trois-tuple de destination identique à celui de la deuxième connexion : 203.0.113.2:80 via TCP

    Cette troisième tentative de connexion est abandonnée pour cause d'erreur de conflit indépendante du point de terminaison, car le mappage indépendant du point de terminaison établi par la première connexion exige que toutes les connexions provenant de 10.0.0.2:10001 utilisent le même tuple d'adresse IP source et de port source NAT, 192.0.2.10:30009, mais 192.0.2.10:30009 est déjà utilisé par la deuxième connexion TCP à 203.0.113.2:80.

  4. Pour clarifier l'ambiguïté, une tentative de connexion ultérieure dans cet exemple aboutit tant que l'une des conditions suivantes est remplie :

    • La première connexion TCP a été fermée. Le mappage indépendant du point de terminaison entre 10.0.0.2:10001 et 192.0.2.10:30009 est alors supprimé, de sorte que la troisième connexion peut être mappée avec une adresse IP NAT différente et un tuple de port source pour communiquer avec 203.0.113.2:80 via TCP.
    • La deuxième connexion TCP a été fermée. Cela libère 10.0.0.2:10001 pour utiliser l'adresse IP source et le port source 192.0.2.10:30009 NAT pour communiquer avec 203.0.113.2:80 via TCP.
    • La troisième tentative de connexion sélectionne un autre port source éphémère (interne). Dans cet exemple, un mappage indépendant du point de terminaison a établi un mappage de type plusieurs à un pour les adresses IP sources et les ports sources NAT internes 10.0.0.2:10001 et 10.0.0.2:10002, afin d'utiliser 192.0.2.10:30009 en communication avec 203.0.113.2:80 via TCP. Si la troisième tentative de connexion utilise un port source éphémère différent de 10001 et 10002, il est possible d'utiliser une adresse IP source et un port source différents pour communiquer avec 203.0.113.2:80 via TCP.

Pour connaître les techniques que vous pouvez utiliser pour éviter les conflits, consultez la section Réduire les conflits indépendants des points de terminaison.

Flux NAT

Dans cet exemple, une VM avec une adresse IP interne principale 10.240.0.4, sans adresse IP externe, doit télécharger une mise à jour à partir de l'adresse IP externe 203.0.113.1. Vous avez configuré la passerelle nat-gw-us-east comme suit :

  • Nombre minimal de ports par instance : 64
  • Deux adresses IP NAT attribuées manuellement : 192.0.2.50 et 192.0.2.60.
  • NAT fourni pour la plage d'adresses IP principale de subnet-1.
Exemple de traduction Cloud NAT (cliquer pour agrandir).
Exemple de traduction Cloud NAT (cliquer pour agrandir)

Cloud NAT suit la procédure de réservation de port pour réserver les tuples d'adresse IP source et de port source suivants pour chacune des VM du réseau. Par exemple, la passerelle Cloud NAT réserve 64 ports sources pour la VM avec l'adresse IP interne 10.240.0.4. L'adresse IP NAT 192.0.2.50 détient 64 ports non réservés. Par conséquent, la passerelle réserve l'ensemble suivant de 64 tuples d'adresse IP et de port source NAT pour cette VM :

  • 192.0.2.50:34000 jusqu'à 192.0.2.50:34063

Lorsque la VM envoie un paquet au serveur de mise à jour 203.0.113.1 sur le port de destination 80 via le protocole TCP, voici ce qui se produit :

  • La VM envoie un paquet de requête avec les attributs suivants :

    • Adresse IP source NAT : 10.240.0.4, l'adresse IP interne principale de la VM
    • Port source : 24000, le port source éphémère choisi par le système d'exploitation de la VM
    • Adresse de destination : 203.0.113.1, l'adresse IP externe du serveur de mise à jour
    • Port de destination : 80, le port de destination pour le trafic HTTP vers le serveur de mise à jour
    • Protocole : TCP
  • La passerelle nat-gw-us-east effectue la SNAT en sortie, en réécrivant l'adresse IP source et le port source du paquet de requête. Le paquet modifié est envoyé à Internet si le réseau VPC a une route pour la destination 203.0.113.1 dont le saut suivant correspond à la passerelle Internet par défaut. Une route par défaut répond généralement à cette exigence.

    • Adresse IP source NAT : 192.0.2.50, provenant de l'un des tuples d'adresse IP source et de port source NAT
    • Port source : 34022, un port source inutilisé de l'un des tuples de port source réservés de la VM
    • Adresse de destination : 203.0.113.1, inchangée
    • Port de destination : 80, inchangé
    • Protocole : TCP, inchangé
  • Lorsque le serveur de mise à jour envoie un paquet de réponse, ce paquet arrive sur la passerelle nat-gw-us-east avec les attributs suivants :

    • Adresse IP source NAT : 203.0.113.1, l'adresse IP externe du serveur de mise à jour
    • Port source : 80, la réponse HTTP du serveur de mise à jour
    • Adresse de destination : 192.0.2.50, correspondant à l'adresse IP source NAT d'origine du paquet de requête
    • Port de destination : 34022, correspondant au port source du paquet de requête
    • Protocole : TCP, inchangé
  • La passerelle nat-gw-us-east effectue la traduction d'adresse réseau de destination (DNAT) sur le paquet de réponse, en réécrivant l'adresse et le port de destination du paquet de réponse pour que celui-ci soit transmis à la VM :

    • Adresse IP source NAT : 203.0.113.1, inchangée
    • Port source : 80, inchangé
    • Adresse de destination : 10.240.0.4, l'adresse IP interne principale de la VM
    • Port de destination : 24000, correspondant au port source éphémère d'origine du paquet de requête
    • Protocole : TCP, inchangé

Étape suivante