This is an old revision of the document!
Table of Contents
Le réseau sous Linux
IP secondaire
Soit l'interface réseau (physique ou non = marche aussi avec les bridges par exemple) eth0, je veux ajouter une IP secondaire dessus :
ifconfig eth0 add 10.0.0.1 netmask 255.255.255.0 up # PI : pour le supprimer.. ifconfig eth0:0 del 10.0.0.1
L'adresse MAC est la même que eth0, mais on peut utiliser ainsi plusieurs adressages logiques sur le même LAN. On peut vérifier que l'interface a bien été créé sous le nom eth0:0 : ifconfig eth0:0
(la notation <itf:nombre> indique qu'il s'agit d'une interface virtuelle = un alias).
Ceci est différent de la notion de VLANs, qui utilisent la notation <itf>.<vlan> (par ex : eth0.13). Dans les 2 cas, le réseau physique est partagé entre les 2 réseaux, mais la différence fondamentale est que dans le cas des alias, le niveau 2 (liaison de données, Ethernet dans notre cas) est partagé entre tous les réseaux, alors qu'avec les VLANs il y a segmentation (domaines de broadcast différents = moins de bruit sur le réseau = plus performant et plus sécurisé).
Ainsi il vaut bien mieux utiliser différents VLANs que différents alias, lorsqu'on en a la possibilité (le fin du fin étant bien sûr d'utiliser des interfaces physiques différentes).
Pour pérenniser cette config et la charger au prochain démarrage, on doit la rajouter dans les fichiers de configuration réseau, qui dépendent de la distribution Linux :
- Sur Debian-like : éditer le fichier
/etc/network/interfaces
et ajouter les lignes suivantes :
auto eth0:0 iface eth0:0 inet static address 10.0.0.1 netmask 255.255.255.0 network 10.0.0.0 broadcast 10.0.0.255
- Sur Redhat-like :
La plupart du temps cette distrib utilise plusieurs fichiers pour gérer les interfaces réseau ; le plus simple est de créer l'interface virtuelle avec l'assistant system-config-network : aller dans “Configuration du périphérique”, puis “<Nouveau périphérique>”, “Ethernet” et préciser les informations suivantes :
Nom reseau_10.0.0 Périphérique eth0:0 IP statique 10.0.0.1 Masque de sous-réseau 255.255.255.0 [..] On boot X # pour activer l'interface après un reboot de la machine
L'assistant consigne ces infos dans le fichier de configuration suivant : /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0 BOOTPROTO=none NETMASK=255.255.255.0 TYPE=Ethernet IPADDR=10.0.0.1 ONBOOT=yes NAME=reseau_10.0.0
Bonding (agrégat)
Le bonding sous Linux est l'agrégat de ports, c'est-à-dire l'association de plusieurs interfaces réseau physiques pour en créer une logique, plus rapide et/ou plus fiable. C'est l'équivalent de l'etherchannel en terminologie Cisco ou du sharing chez Extreme Networks.
Théorie
Il existe plusieurs modes de gestion de l'agrégat ; en bref les mode 0 (balance-rr), 1 (active-backup), 2 (balance-xor), 3 (broadcast), 4 (802.3ad / LACP), 5 (balance-tlb), et 6 (balance-alb).
Dans la mesure du possible (si le commutateur d'en face le gère et est configuré pour), il est recommandé d'utiliser le LACP pour grouper ces interfaces entre elles et dialoguer avec l'équipement d'en face. Cela permet de créer un agrégat dynamique auquel on peut ajouter/retirer des interfaces à chaud par ex.
Avec le LACP (comme le balance-xor) on peut alors configurer la méthode de répartition de charge entre les interfaces avec le paramètre xmit_hash_policy, qui peut prendre la valeur :
- layer2 : répartition par défaut (XOR des adresses MAC src/dst et packet type ID)
- layer2+3 (XOR des adresses MAC/IP src/dst)
- layer3+4 (XOR des ports src/dst (TCP-UDP) et des adresses IPs src/dst ; NB : ce mode n'est pas totalement respectueux de la norme 802.3ad et peux causer des dé-séquencements avec des paquets fragmentés))
Il existe les modes encap2+3 et encap3+4, identiques à layer2+3 et layer3+4, mais en utilisant les informations des protocoles encapsulés lorsque détection de tunnels)
Configuration sous centOS
Fichiers de configuration :
- interfaces physiques :
/etc/sysconfig/network/ifcfg-ethX
- agrégat :
/etc/sysconfig/network/ifcfg-bond0
- driver bonding :
/etc/modprobe.d/bonding.conf
Pour fonctionner, on doit disposer d'une ou plusieurs interfaces physiques similaires en terme de type et de débit. Par exemple eth2 et eth3 :
# eth2 DEVICE=eth2 BOOTPROTO=none ONBOOT=yes HWADDR=00:e0:ed:xx:xx:x2 MASTER=bond0 SLAVE=yes TYPE=Ethernet USERCTL=no # eth3 DEVICE=eth3 BOOTPROTO=none ONBOOT=yes HWADDR=00:e0:ed:xx:xx:x3 MASTER=bond0 SLAVE=yes TYPE=Ethernet USERCTL=no
Il faut installer le module de bonding :
cat /etc/modprobe.d/bonding.conf alias bond0 bonding options bond0 mode=4 xmit_hash_policy=layer2+3 miimon=100 downdelay=200 updelay=200
Exemple de configuration :
cat /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE='bond0' BONDING_MASTER='yes' BONDING_MODULE_OPTS='mode=802.3ad xmit_hash_policy=layer2+3 miimon=100' BONDING_SLAVE0='eth2' BONDING_SLAVE1='eth3' BOOTPROTO='static' BROADCAST='' ETHTOOL_OPTIONS='' IPADDR='10.1.8.200/24' MTU='1500' NAME='82599EB 10-Gigabit Network Connection' NETWORK='' REMOTE_IPADDR='' STARTMODE='auto' USERCONTROL='no'
Diagnostique
cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008) Bonding Mode: IEEE 802.3ad Dynamic link aggregation Transmit Hash Policy: layer2 (0) MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 802.3ad info LACP rate: slow Aggregator selection policy (ad_select): stable Active Aggregator Info: Aggregator ID: 1 Number of ports: 2 Actor Key: 33 Partner Key: 101 Partner Mac Address: 74:8e:f8:xx:xx:x1 Slave Interface: eth2 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:e0:ed:xx:xx:x2 Aggregator ID: 1 Slave Interface: eth3 MII Status: up Link Failure Count: 1 Permanent HW addr: 00:e0:ed:xx:xx:x3 Aggregator ID: 1
Références
- Linux Ethernet Bonding Driver HOWTO sur kernel.org