Gérer le chevauchement de destination

Cette page décrit comment les administrateurs de réseau producteur peuvent gérer le chevauchement de la destination dans un réseau cloud privé virtuel (VPC) utilisant une interface Private Service Connect.

Google Cloud garantit que les plages d'adresses IP des sous-réseaux attribuées aux interfaces réseau sur la même instance de machine virtuelle (VM) ne peuvent pas chevaucher des plages d'adresses IP. Toutefois, les sous-réseaux des réseaux VPC utilisateur et producteur peuvent se chevaucher, comme illustré à la figure 1. Lorsque vous utilisez une interface Private Service Connect avec des plages d'adresses IP de destination qui se chevauchent, une configuration supplémentaire est nécessaire pour vous assurer que le trafic atteint la bonne destination dans le réseau prévu.

Les commandes décrites sur cette page montrent comment mettre à jour temporairement le routage pour une VM qui utilise le système d'exploitation Debian. Pour mettre à jour la VM de manière permanente ou pour configurer une VM dotée d'un système d'exploitation différent, consultez la documentation publique du système d'exploitation.

Figure 1 : Subnet-a dans un réseau VPC producteur chevauche subnet-c dans un réseau VPC consommateur, car les deux sous-réseaux utilisent la même plage d'adresses IP. Une VM de producteur doit pouvoir atteindre 10.0.1.5 dans les deux réseaux.

Vous pouvez gérer le chevauchement des plages d'adresses IP de destination de différentes manières, décrites en détail sur cette page :

Les approches suivantes peuvent également être utilisées pour gérer le chevauchement des destinations, mais elles ne sont pas décrites sur cette page:

  • Utilisez une bibliothèque de sockets et bind() pour contrôler le routage.
  • Utilisez un espace d'adresses IP qui ne se chevauche pas pour le réseau producteur.
  • Si les adresses IP qui se chevauchent côté producteur ne concernent que les points de terminaison d'API propriétaires, vous pouvez configurer l'accès privé à Google pour les hôtes sur site.
  • Utilisez le routage et le transfert virtuels (VRF) pour isoler les espaces d'adresses IP qui se chevauchent. Attribuez une instance VRF à chaque interface Private Service Connect. Configurez des routes par défaut pour chaque instance VRF pour vous assurer que le trafic atteint la destination prévue.
  • Utilisez eBPF pour personnaliser les règles de routage avancées en fonction de critères autres que l'adresse IP. Cette approche est recommandée dans les cas où les options précédentes ne sont pas réalisables.

Gérer le chevauchement des adresses de destination à l'aide d'espaces de noms réseau

Vous pouvez gérer le chevauchement des adresses de destination à l'aide d'espaces de noms réseau. Cette approche fonctionne bien lorsque certaines applications d'une VM de producteur n'ont besoin d'accéder qu'aux charges de travail des consommateurs, et que d'autres applications sur la VM du producteur n'ont besoin d'accéder qu'aux charges de travail du producteur.

Pour gérer le chevauchement des adresses de destination à l'aide d'espaces de noms réseau, procédez comme suit:

  1. Connectez-vous à la VM contenant votre interface Private Service Connect.

  2. Exécutez la commande ci-dessous.

    ip address
    

    Dans la liste des interfaces réseau, recherchez et notez le nom du système d'exploitation invité de votre interface Private Service Connect, par exemple ens5. Ce nom est associé à l'adresse IP de votre interface Private Service Connect.

  3. Créez un espace de noms réseau pour le trafic lié au client :

    sudo ip netns add consumer-ns
    
  4. Déplacez l'interface Private Service Connect vers l'espace de noms du réseau utilisateur. Exécutez les commandes suivantes individuellement :

    sudo ip link set OS_INTERFACE_NAME netns consumer-ns
    
    sudo ip netns exec consumer-ns ip link set OS_INTERFACE_NAME up
    

    Remplacez OS_INTERFACE_NAME par le nom du système d'exploitation invité de votre interface Private Service Connect, que vous avez trouvé à l'étape 2, par exemple ens5.

  5. Restaurez l'adresse IP de l'interface Private Service Connect :

    sudo ip netns exec consumer-ns ip addr add INTERFACE_IP/32 dev OS_INTERFACE_NAME
    

    Remplacez INTERFACE_IP par l'adresse IP de votre interface Private Service Connect.

  6. Validez les modifications apportées à votre interface Private Service Connect :

    sudo ip netns exec consumer-ns ip a
    

    Assurez-vous que le nom du système d'exploitation invité de votre interface Private Service Connect est répertorié dans le résultat de la commande. Assurez-vous que l'interface dispose de la bonne adresse IP.

  7. Ajoutez une route à l'adresse IP de la passerelle :

    sudo ip netns exec consumer-ns ip route add GATEWAY_IP dev OS_INTERFACE_NAME scope link
    

    Remplacez GATEWAY_IP par l'adresse IP de la passerelle par défaut pour le sous-réseau de votre interface Private Service Connect.

  8. Ajoutez une route par défaut pour votre interface Private Service Connect :

    sudo ip netns exec consumer-ns ip route add default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  9. Validez la table de routage de l'espace de noms consumer-ns:

    sudo ip netns exec consumer-ns ip route
    

    Assurez-vous que la table de routage comporte une entrée au format suivant:

    default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  10. Pour vérifier que votre interface peut atteindre les VM depuis chaque partie de la plage d'adresses IP qui se chevauche, procédez comme suit:

    1. Assurez-vous que les règles de pare-feu sont configurées pour autoriser le trafic entrant ICMP vers vos VM cibles.

    2. Envoyez un ping ICMP de la VM de votre interface à une VM consommateur qui se trouve dans la plage d'adresses IP qui se chevauche. Utilisez votre espace de noms client:

      sudo ip netns exec consumer-ns ping CONSUMER_IP_ADDRESS
      

      Remplacez CONSUMER_IP_ADDRESS par l'adresse IP d'une VM cliente de la plage d'adresses IP qui se chevauche.

    3. Envoyez un ping ICMP de la VM de votre interface à une VM de producteurs qui se trouve dans la plage d'adresses IP qui se chevauche. Utilisez l'espace de noms par défaut :

      ping PRODUCER_IP_ADDRESS
      

      Remplacez PRODUCER_IP_ADDRESS par l'adresse IP d'une VM de producteur provenant de la plage d'adresses IP qui se chevauche.

Gérer le chevauchement des adresses de destination avec le routage basé sur des règles

Vous pouvez gérer le chevauchement des adresses de destination en configurant le routage basé sur des règles sur le système d'exploitation de la VM de votre interface. Cette approche fonctionne bien lorsque la même application doit accéder aux charges de travail des réseaux VPC consommateur et producteur, mais vous devez répéter la procédure pour chaque port que vous souhaitez atteindre dans le cadre du chevauchement de la plage d'adresses IP.

Lorsque vous configurez le routage basé sur des règles pour gérer le chevauchement de destination, vous choisissez les ports cibles à utiliser pour les applications utilisateur. Le trafic lié à l'un de ces ports transite par votre interface Private Service Connect vers le sous-réseau utilisateur, tandis que l'autre trafic transite par l'interface par défaut vers le sous-réseau producteur.

  1. Connectez-vous à la VM de votre interface Private Service Connect.

  2. Si la commande iproute2 n'est pas disponible, installez-la.

  3. Assurez-vous de pouvoir écrire dans le fichier suivant : /etc/iproute2/rt_tables

  4. Créez une table de routage. Ajoutez une route par défaut pour votre interface Private Service Connect:

    echo "200 pscnet" >> /etc/iproute2/rt_tables \
    sudo ip route add default dev OS_INTERFACE_NAME table pscnet
    

    Remplacez OS_INTERFACE_NAME par le nom du système d'exploitation invité de votre interface Private Service Connect, par exemple, ens5.

  5. Ajoutez une route à la plage de sous-réseau utilisateur en chevauchement via votre passerelle par défaut:

    sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME table pscnet
    

    Remplacez les éléments suivants :

    • CONSUMER_SUBNET_RANGE: plage d'adresses IP de votre sous-réseau utilisateur.
    • GATEWAY_IP: adresse IP de la passerelle par défaut pour le sous-réseau de votre interface Private Service Connect.
  6. Mettez à jour la table de routage pour que les paquets de sortie de cette VM utilisent l'adresse IP de votre interface comme adresse IP source:

    sudo ip route add GATEWAY_IP src INTERFACE_IP dev OS_INTERFACE_NAME table pscnet
    

    Remplacez INTERFACE_IP par l'adresse IP de votre interface Private Service Connect.

  7. Ajoutez une règle IP qui s'applique à tout le trafic destiné au port cible de votre application utilisateur :

    sudo ip rule add dport CONSUMER_PORT table pscnet
    

    Remplacez CONSUMER_PORT par le port que vous avez configuré pour le trafic vers votre VM utilisateur.

  8. Pour vérifier qu'un paquet est acheminé vers la VM appropriée en fonction de son port de destination, procédez comme suit:

    1. Créez des VM de test dans les réseaux producteur et utilisateur qui utilisent tous les deux la même adresse IP de la plage de chevauchement.
    2. Configurez un serveur HTTP sur chaque VM de test. Configurez la VM utilisateur de test pour écouter le port que vous avez configuré pour l'application utilisateur. Configurez la VM de test du producteur pour écouter sur un port différent de celui que vous avez configuré pour l'application utilisateur.
    3. Assurez-vous que les règles de pare-feu sont configurées pour autoriser le trafic HTTP vers vos VM de test.
    4. À l'aide du port que vous avez configuré pour votre application utilisateur, envoyez une requête GET à l'adresse IP de test, puis vérifiez que vous avez atteint l'instance appropriée:

      curl TEST_IP_ADDRESS:CONSUMER_PORT
      

      Remplacez les éléments suivants :

      • TEST_IP_ADDRESS: adresse IP de vos VM de test.
      • CONSUMER_PORT: port de votre application utilisateur.
    5. À l'aide du port que vous avez configuré pour votre VM de production test, envoyez une requête GET à l'adresse IP de test, puis vérifiez que vous avez atteint la bonne instance:

      curl IP_ADDRESS:PRODUCER_PORT
      

      Remplacez les éléments suivants :

      • IP_ADDRESS : adresse IP de vos VM de test.
      • PRODUCER_PORT : port que vous avez configuré pour votre VM de production test.