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

Dernière mise à jour : 19-01-2021

Comment 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 seconde interface réseau Elastic est destinée aux utilisateurs avancés. N'utilisez une seconde interface réseau Elastic que si vous ne pouvez pas utiliser une interface réseau unique et que vous devez attacher deux interfaces réseau appartenant au même sous-réseau à une seule instance. Pour éviter les problèmes de routage asymétrique, utilisez une interface réseau Elastic unique ou placez des interfaces réseau Elastic dupliquées dans des sous-réseaux qui ne se chevauchent pas.

L'ajout d'une interface réseau secondaire à une instance EC2 Linux non Amazon entraîne des problèmes de flux de trafic. Ces problèmes se produisent car les interfaces réseau principale et secondaire sont dans le même sous-réseau, alors qu'il y a une seule table de routage et une seule passerelle. Le trafic qui arrive dans l'interface réseau secondaire quitte l'instance en utilisant l'interface réseau principale. Cela n'est pas autorisé, car l'adresse IP secondaire n'appartient pas à l'adresse MAC de l'interface réseau principale.

Pour que l'interface secondaire fonctionne 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 stratégies de table de routage personnalisée afin que le trafic de l'interface secondaire utilise la nouvelle table de routage.

Avant de commencer, vous devez savoir que les instances Amazon EC2 se trouvent dans le Cloud AWS et que, par conséquent, tous les cas d'utilisation n'ont pas intérêt à avoir plusieurs interfaces. Voici des exemples de cas où l'utilisation d'une interface réseau secondaire n'est peut-être pas nécessaire :

  • Augmentation du débit réseau. Le débit réseau n'augmente pas, car les limites sont définies en fonction du type et de la taille de l'instance. Pour en savoir plus, consultez la section Types d’instances Amazon EC2.
  • Augmentation des adresses IP Elastic. Si vous n'avez pas suffisamment d'adresses IP Elastic par interface, il n'est peut-être pas nécessaire d'ajouter d'autres interfaces pour obtenir d'autres adresses IP Elastic. La plupart des applications fonctionnent bien avec le système de noms de domaine. Par exemple, Apache peut utiliser des hôtes virtuels basés sur un nom.

Remarque : les étapes permettant d'ajouter une interface réseau secondaire sont différentes pour chacune des versions suivantes d'Ubuntu :

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

Solution

Remarque : bien que les étapes de la solution suivante aient été testées sur les versions Linux répertoriées, de légères modifications peuvent être nécessaires en raison des paramètres personnalisés de votre configuration.

Configuration d'Ubuntu 14.04 ou 16.04

La création du fichier de configuration d'interface secondaire, la configuration de la table de routage et la définition des règles de stratégie de routage pour Ubuntu peuvent partager un fichier unique.

Toutes les procédures doivent être exécutées en utilisant des privilèges d'utilisateur racine. Devenez utilisateur racine avec sudo -i ou exécutez toutes les commandes avec sudo.

1.    Exécutez la commande suivante pour obtenir le nom de l'interface réseau principale :

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

La sortie est similaire à ce qui suit :

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écédent, les interfaces principales sont nommées eth0, eth1, et ainsi de suite. Toutefois, pour des instances qui prennent en charge la mise en réseau améliorée, comme le type de famille m4 ou m5, vous pouvez rencontrer une incohérence de nommage. Par exemple, l'interface principale peut être nommée ens3 si l'interface secondaire est nommée eth0. L'incohérence de nommage se produit lorsque l'interface secondaire est ajoutée pendant que l'instance est en cours d'exécution.

Vous pouvez éviter une incohérence de nommage en ajoutant l'interface au moment du lancement ou à la réinitialisation de l'instance. Ou bien, si l'interface est en cours d'exécution, vous pouvez modifier le nom à l'aide de la commande suivante :

ip link set eth0 name ens4 && ip link set ens4 up

2.    Créez un fichier de configuration pour l'interface secondaire. Cet exemple utilise l'interface secondaire « eth1 ». Assurez-vous de remplacer « eth1 » par le nom de l'interface secondaire obtenu lors de l'étape 1.

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

L'exemple suivant présente l'adresse IP unique 172.31.21.115 et la passerelle 172.31.16.1 sur l'interface secondaire. Assurez-vous de modifier l'adresse IP et la passerelle en fonction de votre scénario. Notez également que votre passerelle doit être la première adresse IP valide de votre sous-réseau.

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

L'exemple suivant présente plusieurs adresses IP. Dans cet exemple, les adresses IP sont 172.31.21.115 et 172.31.18.46, avec la passerelle 172.31.16.1. Assurez-vous de mettre à jour les adresses IP et la passerelle en fonction de votre scénario.

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

3.    Créez le fichier restrict-default-gw pour éviter que la passerelle par défaut ne soit remplacée dans la table principale :

vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw

4.    Ajoutez les lignes suivantes dans le fichier restrict-default-gw. Assurez-vous de remplacer « eth0 » par le nom de l'interface principale obtenu lors de l'étape 1.

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

5.    Redémarrez le réseau :

Ubuntu 14.04 :

(ifdown eth1 && ifup eth1)

Ubuntu 16.04 :

systemctl restart networking

Configuration d'Ubuntu 18.04 et 20.04

Ubuntu 18.04 et 20.04 utilisent la configuration de mise en réseau Netplan. L'exemple suivant utilise la configuration Netplan. Notez que Netplan utilise le format YAML et que le retrait est donc indispensable. L'exemple ci-dessous utilise un retrait de 2 espaces.

Remarque : exécutez toutes les commandes avec des privilèges utilisateur racine. Devenez utilisateur racine avec « sudo -i » ou exécutez toutes les commandes avec « sudo ».

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. Veillez à bien modifier l'exemple suivant pour qu'il corresponde à votre cas d'utilisation :

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

L'exemple précédent de fichier YAML configure deux adresses IP sur l'interface secondaire (eth1).

Remarque : pour trouver 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.    Sous l'onglet Mise en réseau , accédez à Interfaces réseau et 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 CIDR IPv4 répertoriée pour l'ID de sous-réseau.

4.    Appliquez la configuration réseau :

netplan --debug apply

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?