Comment puis-je faire fonctionner mon interface réseau secondaire dans mon instance EC2 Ubuntu ?

Lecture de 7 minute(s)
0

Je souhaite faire fonctionner mon interface réseau secondaire dans mon instance Amazon Elastic Compute Cloud (Amazon EC2) Ubuntu.

Brève description

Avertissement : l'utilisation d'une deuxième interface réseau Elastic est destinée aux utilisateurs aguerris. Utilisez cette solution uniquement dans le cas d'utilisation suivant : Vous ne pouvez pas utiliser une seule interface réseau. Vous devez attacher deux interfaces réseau du même sous-réseau à une instance. Pour éviter tout problème de routage asymétrique, utilisez une seule interface réseau Elastic ou placez des interfaces réseau Elastic dupliquées dans des sous-réseaux qui ne se chevauchent pas. Vous pouvez également utiliser Ubuntu 24.04 LTS ou une version ultérieure.

L'ajout d'une interface réseau secondaire à une instance EC2 n'appartenant pas à Amazon Linux entraîne des problèmes de flux de trafic. Ces problèmes se produisent parce que les interfaces réseau primaires et secondaire se trouvent dans le même sous-réseau et qu'il existe une seule table de routage avec une seule passerelle. Le trafic entrant dans l'interface réseau secondaire utilise l'interface réseau primaire pour quitter l'instance. Comme l'adresse IP secondaire n'appartient pas à l'adresse MAC de l'interface réseau primaire, l'interface secondaire ne fonctionne pas.

Remarque : les étapes suivantes ne sont pas nécessaires pour Ubuntu 24.04. Ubuntu 24.04 gère automatiquement cette configuration avancée.

Pour assurer le fonctionnement de l'interface secondaire après sa création, procédez comme suit :

  1. Configurez la table de routage.
  2. Définissez des règles dans la base de données de la politique de table de routage personnalisée afin que le trafic de l'interface secondaire utilise la nouvelle table de routage.

Avant de commencer, il convient de noter que les instances Amazon EC2 se trouvent dans le Cloud AWS. Tous les cas d'utilisation ne bénéficient donc pas de la présence de plusieurs interfaces. Les exemples suivants illustrent les cas dans lesquels une interface réseau secondaire n’est pas nécessaire :

  • Pour augmenter le débit du réseau : Les limites étant définies en fonction du type et de la taille de l'instance, le débit réseau n'augmente pas. Pour plus d’informations, consultez la section Types d'instances EC2 d'Amazon.
  • Pour augmenter le nombre d'adresses IP Elastic : Il n'est pas nécessaire d'ajouter des adresses IP Elastic à votre instance car la plupart des applications fonctionnent correctement avec le DNS. Par exemple, Apache peut utiliser des hôtes virtuels basés sur des noms. Pour plus d’informations, consultez la page Prise en charge des hôtes virtuels basés sur des noms sur le site Web d'Apache.

Remarque : les étapes d’ajout d’une interface réseau secondaire diffèrent pour chacune des versions d'Ubuntu suivantes :

  • Ubuntu 14.04
  • Ubuntu 16.04
  • Ubuntu 18.04
  • Ubuntu 20.04
  • Ubuntu 22.04

Résolution

Remarque : Bien que les étapes de la résolution suivante soient testées pour les versions Linux répertoriées, il peut être nécessaire de modifier les paramètres personnalisés de votre configuration. Toutes les procédures doivent être exécutées avec des autorisations d'utilisateur racine. Vous pouvez devenir l'utilisateur racine avec sudo -i ou exécuter toutes les commandes avec sudo.

Configuration d’Ubuntu 14.04 ou 16.04

Vous pouvez utiliser un fichier unique pour créer le fichier de configuration de l'interface secondaire, configurer la table de routage, puis définir les règles de politique de routage pour Ubuntu.

Pour configurer Ubuntu 14.04 ou 16.04, procédez comme suit :

  1. Pour obtenir le nom de l'interface réseau primaire, exécutez la commande suivante :

    ip a | grep ^[[:digit:]]

    Exemple de sortie :

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
    3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000

    Important : dans l'exemple présenté ci-dessus, les interfaces primaires sont nommées eth0, eth1, etc. Cependant, il est possible d’observer des incohérences au niveau de la dénomination pour les instances qui prennent en charge le réseau amélioré, telles que les types de famille m4 et m5. Par exemple, l’interface primaire peut être nommée ens3 si l’interface secondaire est nommée eth0. Cette incohérence de dénomination se produit lorsque vous ajoutez l'interface secondaire pendant que l'instance est en cours d'exécution. Pour éviter toute incohérence de dénomination, veillez à ajouter l'interface au moment du lancement ou à redémarrer l'instance. Ou, si l'interface est en cours d'exécution, utilisez la commande suivante pour modifier son nom :

    ip link set eth0 name ens4
    ip link set ens4 up
    ip link show ens4 --->verify
  2. Créez un fichier de configuration pour l'interface secondaire :

    vi /etc/network/interfaces.d/51-eth1.cfg

    Remarque : Remplacez eth1 par le nom de votre interface secondaire.

    La commande suivante est un exemple avec une adresse IP unique 172.31.21.115 et une passerelle 172.31.16.1 sur l'interface secondaire :

    auto eth1  
    iface eth1 inet static address 172.31.21.115  
    netmask 255.255.240.0
    
    # Gateway configuration
    up ip route add default via 172.31.16.1 dev eth1 table 1000
    
    # Routes and rules
    up ip route add 172.31.21.115 dev eth1 table 1000
    up ip rule add from 172.31.21.115 lookup 1000

    Remarque : remplacez l'adresse IP et la passerelle données dans l'exemple par vos propres valeurs. Votre passerelle doit être la première adresse IP valide de votre sous-réseau.

    La commande suivante est un exemple qui contient plusieurs adresses IP. Dans cet exemple, les adresses IP sont 172.31.21.115 et172.31.18.46, tandis que la passerelle est 172.31.16.1 :

    auto eth1
    # Enter one or more IP settings
    iface eth1 inet static
    address 172.31.21.115
    netmask 255.255.240.0
    
    iface eth1 inet static
    address 172.31.18.46
    netmask 255.255.240.0
    
    # Default gateway for eth1
    up ip route add default via 172.31.16.1 dev eth1 table 1000
    
    # A route for every IP
    up ip route add 172.31.21.115 dev eth1 table 1000
    up ip route add 172.31.18.46 dev eth1 table 1000
    
    # A policy rule for every IP
    up ip rule add from 172.31.21.115 lookup 1000
    up ip rule add from 172.31.18.46 lookup 1000

    Remarque : remplacez les adresses IP et la passerelle données dans l'exemple par vos propres valeurs.

  3. Créez le fichier restrict-default-gw pour empêcher le remplacement de la passerelle par défaut dans la table primaire :

    vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw
  4. Ajoutez les lignes suivantes au fichier restrict-default-gw :

    case ${interface} in  eth0)    ;;  *)
        unset new_routers
        ;;
    esac

    Remarque : remplacez eth0 par le nom de votre interface primaire.

  5. Redémarrez le réseau.

    Pour Ubuntu 14.04, exécutez la commande suivante :

    (ifdown eth1 && ifup eth1)

    Pour Ubuntu 16.04, exécutez la commande suivante :

    systemctl restart networking

Configuration d’Ubuntu 18.04, 20.04 et 22.04

Ubuntu 18.04, 20.04 et 22.04 utilisent la configuration réseau Netplan. Notez que Netplan utilise le format YAML. Ce format YAML signifie que l'indentation est essentielle. L'exemple Netplan suivant utilise une indentation à deux espaces.

Pour configurer Ubuntu 18.04, 20.04 et 22.04, procédez comme suit :

  1. Créez un fichier de configuration pour l'interface secondaire :

    vi /etc/netplan/51-eth1.yaml
  2. Ajoutez les lignes suivantes au fichier 51-eth1.yaml :

    network:  version: 2  renderer: networkd    
     ethernets:
        eth1:
          addresses:
           - 172.31.24.153/20
           - 172.31.28.195/20
          dhcp4: no
          routes:
           - to: 0.0.0.0/0
             via: 172.31.16.1 # Default gateway
             table: 1000
           - to: 172.31.24.153
             via: 0.0.0.0
             scope: link
             table: 1000
           - to: 172.31.28.195
             via: 0.0.0.0
             scope: link
             table: 1000
          routing-policy:
            - from: 172.31.24.153
              table: 1000
            - from: 172.31.28.195
              table: 1000

    Remarque : remplacez les informations données dans l’exemple ci-dessus par des informations spécifiques à votre cas d'utilisation. L'exemple de fichier YAML précédent configure deux adresses IP sur eth1, l'interface secondaire.

Pour identifier la plage CIDR à utiliser dans le fichier YAML, procédez comme suit :

  1. Ouvrez la console Amazon EC2, sélectionnez Instances, puis sélectionnez l'instance.
  2. Dans l'onglet Mise en réseau, accédez à Interfaces réseau, puis notez l'ID de sous-réseau de votre interface réseau secondaire.
  3. Ouvrez la console Amazon Virtual Private Cloud (Amazon VPC), sélectionnez Sous-réseaux, puis notez la plage d'adresses CIDR IPv4 répertoriée pour l'ID de sous-réseau.
  4. Pour appliquer la configuration réseau, exécutez la commande suivante :
    netplan --debug apply

Informations connexes

Configuration des tables de routage

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 4 mois