Gentoo Logo

[ << ] [ < ] [ Sommaire ] [ > ] [ >> ]


2. Configuration avancée

Table des matières :

2.a. Configuration avancée

La variable config_eth0 est le cœur de la configuration d'une interface. Sa valeur est une liste d'instructions de haut niveau pour configurer une interface (eth0 dans notre cas). Chaque commande de la liste d'instructions est exécutée séquentiellement. L'interface est considérée active si au moins une commande marche.

Voici une liste des instructions intégrées :

Commande Description
null Ne fait rien.
noop Si l'interface est active et possède une adresse, alors annule sa configuration en renvoyant un code de succès.
Une adresse IPv4 ou IPv6 Ajoute l'adresse à l'interface.
dhcp, adsl ou apipa
(ou bien une commande personnalisée venant d'un module tiers)
Exécute le module qui fournit la commande. Par exemple, dhcp exécutera un module qui fournit le DHCP, ce qui peut être dhcpcd, dhclient ou pump.

Si une commande échoue, vous pouvez spécifier une commande de secours. Celle-ci doit correspondre exactement à la structure de configuration.

Vous pouvez enchainer ces commandes ensemble. Voici quelques vrais exemples :

Exemple de code 1.1 : exemples de configuration

# Ajout de trois adresses IPv4 :
config_eth0="192.168.0.2/24
192.168.0.3/24
192.168.0.4/24"

# Ajout d'une adresse IPv4 et deux adresses IPv6
config_eth0="192.168.0.2/24
4321:0:1:2:3:4:567:89ab
4321:0:1:2:3:4:567:89ac"

# On garde l'adresse déjà assignée par le noyau, sauf si l'interface
# tombe. Dans ce cas, on en assigne une autre grâce à DHCP. Si DHCP ne marche
# pas, alors on ajoute une adresse statique déterminée par APIPA.
config_eth0="noop
dhcp"
fallback_eth0="null
apipa"

Note : lorsque vous utilisez le module ifconfig pour ajouter plusieurs adresses, un alias d'interface est alors créé pour chaque adresse supplémentaire. Donc, avec les deux exemples précédents, vous obtiendrez eth0, eth0:1 et eth0:2. Vous ne pouvez rien faire de particulier avec ces interfaces car le noyau et les applications considèreront eth0:1 et eth0:2 comme n'étant juste qu'eth0.

Important : l'ordre des commandes de secours est très important ! En effet, si nous n'avions pas spécifié la commande null, alors la commande apipa n'aurait seulement été lancée qu'en cas d'échec de la commande noop.

Note : APIPA et DHCP seront expliqués plus tard.

2.b. Dépendance du réseau

Les scripts de démarrage du répertoire /etc/init.d/ peuvent dépendre d'une interface réseau particulière ou simplement de net. Toutes les interfaces réseau dans le système d'initialisation de Gentoo fournissent ce qui est appelé net.

Si rc_depend_strict="YES" est renseigné dans /etc/rc.conf, alors toutes les interfaces réseau qui fournissent net doivent être actives avant qu'une dépendance sur "net" soit satisfaite. Autrement dit, si vous avez net.eth0 et net.eth1 et un script d'initialisation qui dépend de "net", alors les deux doivent être actives.

À l'inverse, si rc_depend_strict="NO" est renseigné, alors la dépendance sur "net" est résolue dès lors qu'une interface réseau est activée.

Mais comment fait-on si net.br0 dépend de net.eth0 et de net.eth1 ? net.eth1 peut être une interface wifi ou bien une connexion ppp qui nécessite une configuration avant de pouvoir être ajouté au pont réseau. Nous ne pouvons régler ce problème dans /etc/init.d/net.br0 puisque c'est un lien symbolique vers net.lo.

La solution est de définir un paramètre rc_need_ dans /etc/conf.d/net.

Exemple de code 2.1 : les dépendances de net.br0 dans /etc/conf.d/net

rc_need_br0="net.eth0 net.eth1"

Ce paramètre seul n'est pas suffisant. Les scripts d'initialisation réseau de Gentoo utilisent une dépendance virtuelle nommée net pour informer le système que le réseau est disponible. Dans le cas présent, il est évident que le réseau doit être marqué disponible quand net.br0 est actif et non pas quand les autres le sont. Nous allons également renseigner cela dans le fichier /etc/conf.d/net :

Exemple de code 2.2 : mise à jour des dépendances virtuelles pour le réseau

rc_net_lo_provide="!net"
rc_net_eth0_provide="!net"
rc_net_eth1_provide="!net"

Pour une explication plus détaillée des dépendances, veuillez consulter la section Écrire un script d'initialisation du Manuel Gentoo. Plus d'informations sur /etc/rc.conf sont disponibles sous forme de commentaires à l'intérieur du fichier.

2.c. Noms et valeurs des variables

Le nom des variables est dynamique. En principe, il suit le schéma variable_${interface|mac|essid|apmac}. Par exemple, la variable dhcpcd_eth0 contient la valeur des options dhcpcd pour eth0 et dhcpcd_essid contient la valeur des options dhcpcd pour quand une interface se connecte à l'ESSID essid.

Cependant, il n'y a pas de règle pure et simple stipulant que les noms d'interface doivent être de la forme ethX. En fait, de nombreuses interfaces sans fil ont des noms tels que wlanX, raX ou encore ethX. Aussi, les interfaces définies par l'utilisateur, telles que les ponts réseaux, peuvent avoir n'importe quel nom, foo par exemple. Pour rendre la vie encore plus intéressante, les bornes d'accès wifi peuvent avoir des noms qui contiennent des caractères non alphanumériques (c'est important car vous pouvez configurer les paramètres réseau en fonction de l'ESSID)...

Le problème, dans tout ceci, c'est que Gentoo utilise des variables Bash pour gérer le réseau... et Bash ne peut rien utiliser d'autre que les caractères alphanumériques de l'anglais. Pour contourner cette limitation, nous transformons tout caractère qui n'est pas un caractère alphanumérique de l'anglais en un _.

Un autre problème de Bash est le contenu des variables : certains caractères doivent être échappés. Ceci se fait en ajoutant un antislash \ devant chacun de ces caractères. Les caractères qui doivent être échappés sont ", ' et \.

Dans cet exemple, nous utilisons un ESSID wifi car il peut contenir un ensemble plus large de caractères. Disons que nous devons utiliser l'ESSID Mon "\ rézo :

Exemple de code 3.1 : exemple de nom de variable

# Cela marche, mais le domaine est invalide.
dns_domain_Mon____r_zo="Mon \"\\ rézo"

# La ligne ci-dessus configure le domaine DNS à « Mon "\ rézo »
# lorsqu'une carte sans fil se connecte à un point d'accès
# dont l'ESSID est « Mon "\ rézo ».

2.d. Nommage des interfaces réseau

Comment ça marche ?

Les noms des interfaces réseau ne sont pas choisis arbitrairement : le noyau Linux et le gestionnaire de périphériques (la plupart des système utilisent udev comme gestionnaire de périphériques bien que d'autres existent) choisissent le nom de l'interface en fonction de règles bien définies.

Quand une interface est détectée sur un système, le noyau Linux rassemble les données nécessaires sur cette carte. Ceci inclut :

  1. le nom enregistré (sur l'interface elle-même) de la carte, qui sera par la suite noté comme étant le paramètre ID_NET_NAME_ONBARD  ;
  2. le connecteur sur lequel la carte est enfichée qui sera par la suite noté comme étant le paramètre ID_NET_NAME_SLOT ;
  3. le chemin via lequel la carte est accessible, qui sera par la suite noté comme étant le paramètre ID_NET_NAME_PATH  ;
  4. l'adresse MAC (fournie par le fabricant) de la carte, qui sera par la suite notée comme étant le paramètre the ID_NET_NAME_MAC  ;

Sur la base de ces informations, le gestionnaire de périphériques décide du nom à attribuer à l'interface sur le système. Par défaut, il utilise le premier des paramètres cités ci-dessus qu'il rencontre (ID_NET_NAME_ONBOARD, _SLOT ou _PATH). Par exemple, s'il rencontre ID_NET_NAME_ONBOARD et que ce dernier vaut eno1, alors l'interface sera appelée eno1.

Si vous connaissez le nom de votre interface, vous pouvez lire les paramètres associés avec la commande udevadm:

Exemple de code 4.1 : lire les informations de la carte interface

# udevadm test-builtin net_id /sys/class/net/enp3s0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76
ID_OUI_FROM_DATABASE=Quanta Computer Inc.
ID_NET_NAME_PATH=enp3s0

Comme le premier paramètre rencontrés des trois paramètres est ID_NET_NAME_PATH , c'est cette valeur qui est utilisée comme nom de l'interface. Si aucun paramètre n'est trouvé, le système en revient aux noms fournis par le noyau (eth0, eth1, etc.)

Utilisation du nommage traditionnel du noyau

Avant ce changement, les cartes interfaces réseau étaient nommées par le noyau Linux lui-même, selon l'ordre de chargement des pilotes (parmi d'autres, vraisemblablement plus obscures, raisons). Ce comportement peut toujours être activé en positionnant l'option de démarrage net.ifnames=0 dans le chargeur de démarrage.

Utilisation de vos propres noms

L'idée maîtresse à la base du changement du système de nommage n'est pas de semer la confusion dans l'esprit de l'utilisateur, mais de rendre les changements plus faciles. Supposons que vous ayez deux cartes d'interface appelées eth0 et eth1. L'une est prévue pour l'accès au réseau par câble, tandis que l'autre est prévue pour un accès sans fil. Avec la prise en charge du nommage des interfaces, vous pouvez les appeler lan0 (câblée) et wifi0 (sans fil) - c'est mieux de ne pas utiliser les noms habituels tels que eth* et wlan* car ceux-ci peuvent encore entrer en conflit avec les noms que vous proposerez.

Tout ce que vous devez faire, c'est trouver les paramètres des cartes et utiliser cette information pour définir votre propre règle de nommage :

Exemple de code 4.2 : définir le nom lan0 pour l'interface courante eth0

# udevadm test-builtin net_id /sys/class/net/eth0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76
ID_OUI_FROM_DATABASE=Quanta Computer Inc.

# vim /etc/udev/rules.d/70-net-name-use-custom.rules
# La première utilise l'information MAC, et le nombre 70- number pour être placée avant les autres régles réseau 
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="c8:0a:a9:42:9d:76", NAME="lan0"

# vim /etc/udev/rules.d/76-net-name-use-custom.rules
# La deuxième utilise l'information ID_NET_NAME_PATH , et le nombre  76- pour être placée entre.
#   75-net-*.rules et  80-net-*.rules
SUBSYSTEM=="net", ACTION=="add", ENV{ID_NET_NAME_PATH}=="enp3s0", NAME="wifi0"

Comme les règles sont appelées avant la règle par défaut (elles sont en fait appelées dans l'ordre alphabétique, ainsi 70 est appelée avant 80) les noms fournis par le fichier de règles seront utilisés à la place des noms fournis par défaut. Le numéro alloué à un fichier devrait être entre 76 et 79 (les variables d'environnement sont définies par un début de règle et commencent par 75 alors que la solution de repli du nommage est définie par une règle numérotée 80).


[ << ] [ < ] [ Sommaire ] [ > ] [ >> ]


Imprimer

Voir tout

Dernière mise à jour le 17 août 2014

Résumé : Nous apprendrons ici comment fonctionne la configuration du réseau. Vous devrez comprendre cette partie avant que nous attaquions les modules réseaux.

Sven Vermeulen
Auteur

Grant Goodyear
Auteur

Roy Marples
Auteur

Daniel Robbins
Auteur

Chris Houser
Auteur

Jerry Alexandratos
Auteur

Seemant Kulleen
Développeur Gentoo x86

Tavis Ormandy
Développeur Gentoo Alpha

Jason Huebel
Développeur Gentoo AMD64

Guy Martin
Développeur Gentoo HPPA

Pieter Van den Abeele
Développeur Gentoo PPC

Joe Kallar
Développeur Gentoo SPARC

John P. Davis
Correcteur

Pierre-Henri Jondot
Correcteur

Eric Stockbridge
Correcteur

Rajiv Manglani
Correcteur

Jungmin Seo
Correcteur

Stoyan Zhekov
Correcteur

Jared Hudson
Correcteur

Colin Morey
Correcteur

Jorge Paulo
Correcteur

Carl Anderson
Correcteur

Jon Portnoy
Correcteur

Zack Gilburd
Correcteur

Jack Morgan
Correcteur

Benny Chuang
Correcteur

Erwin
Correcteur

Joshua Kinard
Correcteur

Tobias Scherbaum
Correcteur

Gerald J. Normandin Jr.
Relecteur

Donnie Berkholz
Relecteur

Ken Nowack
Relecteur

Joshua Saddler
Relecteur

Lars Weiler
Contributeur

Xavier Neys
Correcteur, traducteur

Camille Huot
Traducteur

Benjamin Girault
Traducteur

Olivier Fisette
Traducteur

Olivier Roomans
Traducteur

Vincent Strubel
Traducteur

José Fournier
Traducteur

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.