3. Lire et configurer l'état d'une interface

Couche liaison de données

Au niveau liaison de données de la modélisation, l'unité de donnée manipulée est la trame. Dans le cas de la technologie Ethernet, la trame contient les adresses MAC (media access control address) des hôtes source et destination du réseau de diffusion (LAN). À ce niveau, il est possible de configurer plusieurs fonctions. Vis-à-vis de la couche physique, on peut activer ou désactiver une interface. Vis-à-vis de la couche réseau, il existe de nombreux paramètres que l'on peut consulter et redéfinir.

Même si l'étude des paramètres définis au niveau liaison de données sort du cadre de ce document, on peut citer trois exemples significatifs.

  • Il est possible de fixer la quantité de données provenant de la couche réseau à encapsuler dans une trame. Au delà de la valeur par défaut (1500 octets), on parle de Jumbo frame.

  • On peut ajouter un jeu d'étiquettes aux trames en utilisant le standard IEEE 802.1Q de façon à définir des VLANs. Voir l'article Routage Inter-VLAN.

  • On peut sélectionner et configurer les fonctions relatives à la classification et à la gestion de mise en file d'attente des paquets issus de la couche réseau. Voir HOWTO du routage avancé et du contrôle de trafic sous Linux.

Dans cette section, le principal outil utilisé est la commande ip du paquet iproute2.

Comment visualiser l'état d'une interface réseau ?

Le simple fait de consulter l'état d'une interface fournit une grande quantité d'informations.

$ ip link ls dev eth0 | fmt -t -w80
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>1 mtu 15002 qdisc fq state UP
    mode DEFAULT group default qlen 1000 link/ether b8:ae:ed:73:06:de3 brd
    ff:ff:ff:ff:ff:ff4

1

Les indicateurs d'état désignent les fonctions actives au niveau de l'interface.

2

L'acronyme MTU signifie Maximum Transmission Unit. La valeur 1500 correspond à la quantité maximum d'octets transmis de la couche réseau à la couche liaison de données sans fragmentation.

3

L'adresse MAC de l'interface joue un rôle essentiel. C'est cette adresse qui identifie l'hôte dans le réseau local (LAN). Cette adresse unique respecte un format bien particulier : EUI-48. Voir Types d'adresses MAC.

4

L'adresse de diffusion utilisée par l'interface respecte les champs du format EUI-48 mais tous les bits des 6 octets sont à 1. Cette adresse est placée dans le champ adresse destination d'une trame d'annonce ou de requête vers tous les hôtes du réseau local (LAN).

Tableau 1. Indicateurs d'état d'une interface Ethernet

Indicateur Description
BROADCAST L'interface peut émettre du trafic à destination de tous les hôtes du réseau local.
MULTICAST L'interface peut émettre et recevoir du trafic de type multidiffusion.
UP L'interface est active et correctement configurée au niveau liaison de données.
LOWER_UP L'interface est électriquement active au niveau physique. La LED du port est allumée.
PROMISC L'interface traite tout le trafic reçu et le transmet aux couches supérieures du sous-système réseau. Ce traitement inclut les trames dont l'adresse MAC destination est différente de celle de l'interface.
ALLMULTI L'interface traite tout le trafic de multidiffusion reçu et le transmet aux couches supérieures. Ce mode est utile sur un système qui route le trafic de multidiffusion.

Comment visualiser les statistiques d'une interface réseau ?

En cas de problème de transmission, il est essentiel de connaître le nombre d'erreurs comptabilisé par le composant Ethernet ainsi que le nombre total de paquets émis ou reçus. Voici un exemple :

$ ip -s link ls dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP
   mode DEFAULT group default qlen 1000
    link/ether b8:ae:ed:73:06:de brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    21622131   216995   0       0       0       263
    TX: bytes  packets  errors  dropped carrier collsns
    422328441  358477   0       0       0       0

Dans le cas d'une interface Ethernet filaire, les compteurs d'erreurs, de trames abandonnées et de collisions doivent impérativement rester à 0. En effet, une connexion Ethernet filaire en cuivre ou en fibre optique fonctionne normalement en full duplex ; c'est à dire que l'on dispose d'un premier canal de transmission réservé pour l'émission et d'un second canal réservé pour la réception.

Comment activer/désactiver une interface réseau ?

Ces opérations peuvent s'effectuer à différents niveaux bien distincts.

  • Sur un système Debian GNU/linux ou apparenté, les scripts ifup et ifdown du paquet ifupdown utilisent les paramètres de configuration des interfaces donnés dans le fichier /etc/network/interfaces lors de l'activation ou la désactivation.

  • Dans un contexte de mobilité avec un ordinateur portable, la quasi totalité des distributions Linux proposent d'utiliser NetworkManager. Cet outil permet à un utilisateur normal de définir ses propres configurations réseau en fonction du contexte sans obtenir les droits d'administration système.

  • Les manipulations au niveau interface ne tiennent aucun compte du mode de configuration antérieur. L'exécution des outils de configuration dans l'espace utilisateur peut se poursuivre alors que l'interface associée est inactive. Une telle situation peut conduire à des problèmes de fonctionnement du système ! Il est donc important de recenser les paramètres associés à une interface avant de se lancer dans les manipulations directes.

[Avertissement] Avertissement

La désactivation d'une interface entraîne la perte des routes vers les réseaux IP qui dépendent de ce lien.

Désactivation au niveau système
# ifdown eth0
Activation au niveau système
# ifup eth0
Désactivation d'une connection avec NetworkManager

On commence par une identification de la connection filaire active avant de la désactiver.

$ nmcli connection show --active
NAME              UUID                                  TYPE      DEVICE
Wired connection  d1cbf24c-f218-492e-a0ae-d99052b9fbb2  ethernet  enp0s31f6

$ nmcli device disconnect enp0s31f6
Activation d'une connection avec NetworkManager
$ nmcli device connect enp0s31f6
Désactivation au niveau interface
# ip link set dev eth0 down

$ ip link ls dev eth0 | fmt -t -w80
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT
        group default qlen 1000 link/ether 00:26:18:27:07:54 brd ff:ff:ff:ff:ff:ff
Activation au niveau interface
# ip link set dev eth0 up

$ ip link ls dev eth0 | fmt -t -w80
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP
    mode DEFAULT group default qlen 1000 link/ether 00:26:18:27:07:b9 brd
    ff:ff:ff:ff:ff:ff

Comment changer l'adresse MAC d'une interface réseau ?

Parmi les nombreuses manipulations possibles avec la commande ip link, il est possible de changer l'adresse MAC d'une interface. Voici un exemple.

# ip link set dev eth0 down

# ip link set address de:ad:be:ef:00:01 dev eth0

# ip link ls dev eth0 | fmt -t -w80
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT
    group default qlen 1000 link/ether de:ad:be:ef:00:01 brd ff:ff:ff:ff:ff:ff

# ip link set dev eth0 up

Pour aller plus loin dans les manipulations au niveau liaison de données, la consultation des pages de manuels est un excellent point de départ : $ man ip-link.