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

Lecture de 7 minute(s)
0

Je veux 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. Ne procédez ainsi que si vous ne pouvez pas utiliser une interface réseau unique et que vous devez attacher deux interfaces réseau du même sous-réseau à une 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 non-Amazon Linux 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, notez que les instances Amazon EC2 se trouvent dans le cloud AWS. Cela signifie que tous les cas d'utilisation ne bénéficient pas de plusieurs interfaces. Les exemples suivants représentent des cas où l'utilisation d'une interface réseau secondaire n'est peut-être pas nécessaire :

  • Augmentation du débit 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 en savoir plus, consultez la section Types d’instances Amazon EC2.
  • Augmentation le nombre d'adresses IP : si vous avez quelques adresses IP Elastic par interface, il n'est peut-être pas nécessaire d'ajouter d'autres interfaces pour obtenir davantage d'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 (sur le site Web d'Apache).

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

Résolution

Remarque : bien que les étapes de la solution suivante ont été testées sur les versions Linux répertoriées, vous devrez voir de légères modifications pour les paramètres personnalisés de votre configuration.

Configuration d'Ubuntu 14.04 ou 16.04

Vous pouvez créer le fichier de configuration d'interface secondaire, configurer la table de routage et définir la définition des règles de stratégie de routage pour Ubuntu à l'aide d'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.     Pour obtenir le nom de l'interface réseau principale, exécutez la commande suivante :

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

Vous recevez un résultat similaire au message suivant :

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 cet exemple, 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 vous ajoutez l'interface secondaire pendant que l'instance est en cours d'exécution.

Pour éviter une incohérence de nommage, ajoutez l'interface au moment du lancement ou redémarrez 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. 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

La commande suivante présente l'adresse IP unique 172.31.21.115 et la passerelle 172.31.16.1 sur l'interface secondaire. Remplacez l'adresse IP et la passerelle d'exemple par les vôtres. 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

La commande suivante présente plusieurs adresses IP. Dans cet exemple, les adresses IP sont 172.31.21.115 et 172.31.18.46, et la passerelle est 172.31.16.1. Remplacez les adresses IP et la passerelle d'exemple par les vôtres :

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.

Consultez la commande suivante for Ubuntu 14.04 :

(ifdown eth1 && ifup eth1)

Consultez la commande suivante for 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. Notez que Netplan utilise le format YAML. Cela signifie que l'indentation est cruciale. L'exemple Netplan suivant utilise une indentation à deux espaces.

Remarque : exécutez toutes les commandes avec des privilèges de l'utilisateur root. 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

Cet exemple 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.    Dans l'onglet Networking (Mise en réseau), accédez à Network interfaces (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 Subnets (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

Informations connexes

Configuration des tables de routage

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an