Gentoo Linux amd64 Handbook: Network configuration
The following networking portion of the handbook describes 'advanced' network configuration for systems running the OpenRC init system utilizing netifrc as the network management system.
For systems running systemd, readers should review see the networking portion of the systemd article.
Pour commencer
Ce guide de mise en réseau présume que l'utilisateur a correctement configuré le système et a déterminé le(s) nom(s) des interfaces réseau du système. Le nom de l'interface réseau est produit en fonction de l'emplacement du bus de la carte réseau dans le système. Pour cette raison, il est possible d'avoir des noms d'interfaces variables, notamment: eno0, ens1, wlan0, enp1s0, etc. Chaque système peut avoir un nom d'interface légèrement différent. Le contenu suivant suppose que le nom de l'interface à configurer est eth0, bien que l'un des noms mentionnés ci-dessus fonctionnera.
Pour commencer à configurer la carte réseau, il faut d'abord en informer le système init de Gentoo. Cela est fait en créant un lien symbolique de net.lo vers net.eth0 (ou quel que soit le nom de l'interface réseau sur le système) dans /etc/init.d.
root #
cd /etc/init.d
root #
ln -s net.lo net.eth0
Le système init de Gentoo connaît maintenant cette interface. Il doit également savoir comment la configurer. Toutes les interfaces réseau sont configurées dans le fichier /etc/conf.d/net. Voici un exemple de configuration pour les adresses DHCP et statiques.
# Pour DHCP
config_eth0="dhcp"
# Pour une adresse IP statique en utilisant la notation CIDR
config_eth0="192.168.0.7/24"
routes_eth0="default via 192.168.0.1"
dns_servers_eth0="192.168.0.1 8.8.8.8"
# Pour une adresse IP statique en utilisant la notation avec masque de sous-réseau
config_eth0="192.168.0.7 netmask 255.255.255.0"
routes_eth0="default via 192.168.0.1"
dns_servers_eth0="192.168.0.1 8.8.8.8"
Si aucune configuration n'est mentionnée alors l'utilisation de DHCP est supposée.
CIDR signifie Classless InterDomain Routing. À l'origine, les adresses IPv4 étaient classées en A, B ou C. Le système de classification précoce ne prévoyait pas la popularité massive d'Internet et risquait de manquer de nouvelles adresses uniques. CIDR est un schéma d'adressage qui permet à une adresse IP de désigner plusieurs adresses IP. Une adresse IP CIDR ressemble à une adresse IP normale sauf qu'elle se termine par une barre oblique suivie d'un nombre; par exemple, 192.168.0.0/16. CIDR est décrit dans la RFC 1519.
Maintenant que l'interface est configurée, on peut commencer à utiliser les commandes suivantes :
root #
/etc/init.d/net.eth0 start
root #
/etc/init.d/net.eth0 stop
Pour dépanner le réseau, consulter le fichier /var/log/rc.log. A moins que la variable rc_logger ne soit définie sur
NO
dans /etc/rc.conf, les informations sur l'activité de démarrage seront stockées dans ce fichier journal.Maintenant que l'interface réseau a été arrêtée et démarrée avec succès, l'étape suivante consiste à la démarrer au démarrage de Gentoo. Voici comment faire :
root #
rc-update add net.eth0 default
root #
rc
La dernière commande rc indique à Gentoo de démarrer tous les scripts du niveau d'exécution actuel qui n'ont pas encore été démarrés.
Configuration avancée
La variable config_eth0 est le cœur de la configuration d'une interface. C'est une liste d'instructions de haut niveau pour la configuration de l'interface (eth0 dans ce cas). Chaque commande de la liste d'instructions est exécutée de manière séquentielle. L'interface est considérée comme OK si au moins une commande fonctionne.
Voici une liste d'instructions intégrées :
Valeur | Description |
---|---|
null
|
Ne fait rien. |
noop
|
Si l'interface est active et qu'il y a une adresse, abandonner la configuration avec succès. |
Une adresse IPv4 ou IPv6 | Ajouter l'adresse à l'interface. |
dhcp , adsl , ou apipa (ou une valeur personnalisée d'un module tiers)
|
Exécuter le module qui fournit la commande. Par exemple, dhcp exécutera un module qui fournit le protocole DHCP qui peut être servi par dhcpcd, dhclient, ou pump.
|
Si une commande échoue, spécifier une valeur de remplacement. Le repli doit correspondre exactement à la structure de configuration.
Il est possible d'enchaîner ces valeurs. Voici quelques exemples :
# Ajouter trois adresses IPv4
config_eth0="192.168.0.2/24
192.168.0.3/24
192.168.0.4/24"
# Ajouter une adresse IPv4 et 2 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"
# Garde l'adresse assignée par le noyau. Si l'interface
# devient inactive, assigner une adresse par DHCP.
# Si DHCP échoue, ajouter une adresse IP statique déterminée par APIPA.
config_eth0="noop
dhcp"
fallback_eth0="null
apipa"
Quand le module
ifconfig
est utilisé et que plus d'une adresse est ajoutée, des alias d'interface sont créés pour chaque adresse supplémentaire. Ainsi, en suivant les exemples précédents, l'utilisateur obtiendra les interfaces eth0, eth0:1 et eth0:2. Il est impossible d'effectuer quelque chose de spécial avec ces interfaces car le noyau et autres programmes considéreront eth0:1 et eth0:2 comme étant eth0.L'ordre de repli est important ! Si l'option
null
n'était pas spécifiée alors apipa
ne sera exécuté que si noop
a échoué.Dépendances réseau
Les scripts d'initialisation dans /etc/init.d/ peuvent dépendre d'une interface réseau spécifique ou simplement de "net". Toutes les interfaces réseau du système d'initialisation de Gentoo fournissent ce qu'on appelle "net".
Si, dans /etc/rc.conf, la variable rc_depend_strict est définie sur YES
, alors toutes les interfaces réseau fournissant "net" doivent être actives avant qu'une dépendance sur "net" soit supposée être satisfaite. En d'autres termes, si un système a un net.eth0 et un net.eth1 et un script d'initialisation dépend de "net", alors les deux doivent être activés.
D'un autre côté, si rc_depend_strict="NO"
est défini, alors la dépendance "net" est marquée comme résolue du moment qu'au moins une interface réseau est activée.
Mais que faire si net.br0 dépend de net.eth0 et net.eth1 ? net.eth1 peut être un périphérique sans fil ou PPP qui nécessite une configuration avant de pouvoir être ajouté au pont. Cela ne peut pas être fait dans /etc/init.d/net.br0 car c'est un lien symbolique vers net.lo.
La solution est de définir un paramètre rc_net_{interface}_need dans /etc/conf.d/net :
rc_net_br0_need="net.eth0 net.eth1"
Cela seul, cependant, n'est pas suffisant. Les scripts d'initialisation de mise en réseau de Gentoo utilisent une dépendance virtuelle appelée "net" pour informer le système lorsque le réseau est disponible. Clairement, dans le cas ci-dessus, la mise en réseau ne doit être marquée comme disponible que lorsque net.br0 est actif, et non lorsque les autres le sont. Nous devons donc aussi le signaler dans /etc/conf.d/net :
rc_net_eth0_provide="!net"
rc_net_eth1_provide="!net"
Pour une discussion plus détaillée sur la dépendance, consulter la section sur la rédaction des scripts d'initialisation dans le manuel Gentoo. Plus d'informations sur /etc/rc.conf sont disponibles sous forme de commentaires dans le fichier.
Noms de variables et valeurs
Les noms de variables sont dynamiques. Ils suivent normalement la structure de la 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 lorsqu'une interface se connecte à l'ESSID (Extended Service Set Identifier - "nom du réseau") appelé "essid".
Cependant, il n'y a pas de règle absolue que les noms d'interface des états doivent être ethx. En fait, de nombreuses interfaces sans fil ont des noms comme wlanx, rax ou même ethx. En outre, certaines interfaces définies par l'utilisateur, telles que les ponts, peuvent recevoir n'importe quel nom. Pour rendre la vie plus intéressante, les points d'accès sans fil peuvent avoir des noms avec des caractères non alphanumériques - c'est important car les utilisateurs peuvent configurer les paramètres réseau pour chaque ESSID.
L'inconvénient de tout cela est que Gentoo utilise des variables bash pour la mise en réseau - et bash ne peut pas utiliser quoi que ce soit en dehors de l'alphanumérique anglais. Pour contourner cette limitation, nous changeons chaque caractère qui n'est pas un alphanumérique anglais en _ (Tiret bas).
Un autre inconvénient de bash est le contenu des variables - certains caractères doivent être échappés. Cela peut être réalisé en plaçant le caractère \ (barre oblique inverse) devant le caractère qui doit être échappé. Les caractères suivants doivent être échappés de cette façon: ", ' et \.
Dans cet exemple, nous utilisons un ESSID sans fil car ils peuvent contenir le plus large éventail de caractères. Nous utiliserons l'ESSID Mon "\ RESEAU' ' :
# Cela fonctionne mais le nom de domaine est invalide
dns_domain_Mon____RESEAU="Mon \"\\ RESEAU"
L'exemple précédent définit le domaine DNS sur Mon "\ RESEAU lorsqu'une carte sans fil se connecte à un point d'accès dont l'ESSID est Mon "\ RESEAU.
Nommage de l'interface réseau
Fonctionnement
Les noms d'interface réseau ne sont pas choisis arbitrairement : le noyau Linux et le gestionnaire de périphériques (la plupart des systèmes ont udev comme gestionnaire de périphériques bien que d'autres soient également disponibles) choisissent le nom de l'interface via un ensemble de règles fixes.
Lorsqu'une carte d'interface est détectée sur un système, le noyau Linux rassemble les données nécessaires à propos de la carte. Cela inclue :
- Le nom enregistré de la carte réseau (sur l'interface elle-même), qui est ensuite visualisé via la valeur ID_NET_NAME_ONBOARD.
- L'emplacement dans lequel la carte réseau est connectée, qui est ensuite visible via la valeur ID_NET_NAME_SLOT</ var>.
- Le chemin d'accès au périphérique de la carte réseau, qui est ensuite visible via la valeur ID_NET_NAME_PATH.
- L'adresse MAC (fournie par le fabriquant) de la carte, qui est ensuite visualisée via la valeur ID_NET_NAME_MAC.
A partir de ces informations, le gestionnaire de périphériques décide comment nommer l'interface sur le système. Par défaut, il utilise le premier résultat des trois premières variables ci-dessus (ID_NET_NAME_ONBOARD, _SLOT ou _PATH). Par exemple, si ID_NET_NAME_ONBOARD est trouvé et défini sur eno1
, l'interface s'appellera eno1.
Étant donné un nom d'interface active, les valeurs des variables fournies peuvent être affichées en utilisant udevadm :
root #
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 (et le seul) résultat des trois premières variables est ID_NET_NAME_PATH, sa valeur est utilisée comme nom d'interface. Si aucune des variables ne contient de valeurs, le système revient à la dénomination fournie par le noyau (eth0, eth1, etc.)
Utiliser l'ancien système de nommage du noyau
Avant cette modification, les cartes d'interface réseau étaient nommées par le noyau Linux lui-même, en fonction de l'ordre de chargement des pilotes (entre autres, probablement pour des raison plus obscures). Ce comportement peut toujours être activé en définissant le paramètre de démarrage net.ifnames=0
dans le chargeur d'amorçage.
Utiliser des noms personnalisés
L'idée derrière le changement du système de nommage n'est pas de confondre les gens, mais de faciliter le changement de nom. Supposons qu'un système possède deux interfaces appelées eth0 et eth1. L'une est destiné à accéder au réseau via un cable, l'autre est pour un accès sans fil. Avec la prise en charge du nommage d'interface, les utilisateurs peuvent utiliser les noms lan0 (filaire) et wifi0 (sans fil - il est préférable d'éviter d'utiliser les noms précédemment connus comme eth* et wlan* car ils peuvent toujours entrer en collision avec les noms suggérés).
Trouver les paramètres des cartes, puis utiliser ces informations pour définir une règle de nommage personnalisée :
root #
udevadm test-builtin net_id /sys/class/net/eth0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76 ID_OUI_FROM_DATABASE=Quanta Computer Inc.
root #
vim /etc/udev/rules.d/70-net-name-use-custom.rules
# La première utilise les informations MAC et le nombre 70- devant le nom du fichier pour être lue avant les autres règles net SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="c8:0a:a9:42:9d:76", NAME="lan0"
root #
vim /etc/udev/rules.d/76-net-name-use-custom.rules
# La deuxième utilise l'information ID_NET_NAME_PATH et le nombre 75- # pour se situer entre les règles 75-net-*.rules et 80-net-*.rules SUBSYSTEM=="net", ACTION=="add", ENV{ID_NET_NAME_PATH}=="enp3s0", NAME="wifi0"
Comme les règles sont déclenchées avant celle par défaut (les règles sont déclenchées dans l'ordre alphanumérique, donc 70 vient avant 80), les noms fournis dans le fichier de règles seront utilisés à la place des noms par défaut. Le nombre accordé au fichier doit être compris entre 76 et 79 (les variables d'environnement sont définies par un début de règle commençant par 75 et le nommage de solution de repli est effectué dans une règle numérotée 80).
Modules réseau
Les scripts Netifrc prennent en charge les scripts modulaires de mise en réseau, ce qui signifie que la prise en charge de nouveaux types d'interface et de modules de configuration peut facilement être ajoutée tout en conservant la compatibilité avec les modules existants.
Les modules sont chargés par défaut si le paquet dont ils ont besoin est installé. Si les utilisateurs spécifient ici un module dont le paquet n'est pas installé, ils reçoivent une erreur indiquant le paquet à installer. Idéalement, le réglage des modules n'est utilisé que lorsque deux ou plusieurs paquets qui fournissent le même service sont installés et que l'un doit être préféré à l'autre.
Tous les paramètres abordés ici, sauf indication contraire, sont enregistrés dans /etc/conf.d/net.
# Préférer ifconfig à iproute2
# modules="ifconfig"
# On peut aussi spécifier d'autres modules pour une interface
# Ici nous choisissons dhclient au lieu de dhcpcd
modules_eth0="dhclient"
# Vous pouvez aussi spécifier quels modules ne pas utiliser - vous pouvez par exemple
# utiliser wpa_supplicant ou linux-wlan-ng pour contrôler le wifi mais
# vous voulez quand même configurer les paramètre du réseau pour chaque association avec un ESSID
modules="!iwconfig"
Gestionnaires d'interface
Nous fournissons deux gestionnaires d'interface : ifconfig et iproute2. L'un d'entre eux est nécessaire pour effectuer n'importe quel type de configuration réseau.
Les deux sont installés par défaut dans le cadre du profil du système. iproute2 est le package le plus puissant et le plus flexible. ifconfig et net-tools ne devraient plus être utilisés pour la configuration du réseau.
Comme ifconfig et iproute2 font des choses très similaires, nous permettons à leur configuration de base de fonctionner les unes avec les autres. Par exemple, l'extrait de code ci-dessous fonctionne quel que soit le module utilisé par l'utilisateur.
config_eth0="192.168.0.2/24"
config_eth0="192.168.0.2 netmask 255.255.255.0"
DHCP
DHCP est un moyen d'obtenir des informations réseau (adresse IP, serveurs DNS, passerelle, etc.) à partir d'un serveur DHCP. Cela signifie que s'il y a un serveur DHCP fonctionnant sur le réseau, l'utilisateur doit simplement dire à chaque client d'utiliser DHCP et cela configure le réseau automatiquement. Bien sûr, l'utilisateur devra configurer d'autres paramètres comme les paramètres sans fil, PPP ou autres si nécessaire avant de pouvoir utiliser DHCP.
DHCP peut être fourni par dhclient, dhcpcd ou pump. Chaque module DHCP a ses avantages et ses inconvénients - voici un résumé :
module DHCP | Paquet | Pours | Contres |
---|---|---|---|
dhclient | net-misc/dhcp | Développé par ISC, les mêmes personnes dérrière le logiciel DNS BIND. Très configurable | La configuration est trop complexe, le logiciel est assez lourd, ne peut pas recevoir les serveurs NTP du DHCP, n'envoie pas le nom d'hôte par défaut |
dhcpcd | net-misc/dhcpcd | Outil par défault de Gentoo de longue date, pas de dépendance aux outils externes, développé activement par Gentoo | Peut être lent parfois, ne peut pas encore se démoniser quand le bail est infini |
pump | net-misc/pump | Léger, pas de dépendance à des outils extérieurs | N'est plus maintenu en amont, peu fiable, en particulier sur les modems, ne peut pas obtenir les serveurs NIS de DHCP |
Si plus d'un client DHCP est installé, spécifier lequel utiliser - sinon dhcpcd sera utilisé par défaut si possible.
Pour envoyer des options spécifiques au module DHCP, utiliser module_eth0="..."
(remplacer module par le module DHCP utilisé, par exemple dhcpcd_eth0).
Nous essayons de rendre le protocole DHCP relativement indépendant - en tant que tel nous supportons les commandes suivantes en utilisant la variable dhcp_eth0. L'action par défaut est de n'en définir aucune :
release
- Libérer l'adresse IP pour ré-utilisation.
nodns
- Ne pas écraser /etc/resolv.conf
nontp
- Ne pas écraser /etc/ntp.conf
nonis
- Ne pas écraser /etc/yp.conf
# Nécessaire seulement si plus d'un module DHCP est installé
modules="dhcpcd"
config_eth0="dhcp"
dhcpcd_eth0="-t 10" # Timeout après 10 secondes
dhcp_eth0="release nodns nontp nonis" # Ne récupère qu'une adresse
dhcpcd et pump envoient le nom d'hôte actuel au serveur DHCP par défaut, il n'est donc plus nécessaire de le spécifier.
# Only needed if more than one DHCP module is installed
modules="dhclient"
config_eth0="dhcpv6"
# To use both DHCPv4 and DHCPv6 on a dual-stack network, remove the above line and uncomment the following lines
#config_eth0="dhcp
#dhcpv6"
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
# To pass runtime arguments to dhclient for DHCPv6
dhclientv6_eth0="-t 10" # Timeout after 10 seconds
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
# Set generic DHCPv6 options
dhcpv6_eth0="release nodns nontp nonis nogateway nosendhost"
ADSL avec PPPoE/PPPoA
D'abord installer le logiciel ADSL :
root #
emerge --ask net-dialup/ppp
Ensuite, créer le script net PPP et le script net pour l'interface Ethernet qui va être utilisée par PPP :
root #
ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0
root #
ln -s /etc/init.d/net.lo /etc/init.d/net.eth0
S'assurer de mettre rc_depend_strict à YES
dans /etc/rc.conf.
Maintenant, il faut configurer /etc/conf.d/net.
config_eth0=null (Spécifier l'interface ethernet)
config_ppp0="ppp"
link_ppp0="eth0" (Spécifier l'interface ethernet)
plugins_ppp0="pppoe"
username_ppp0='utilisateur'
password_ppp0='mot de passe'
pppd_ppp0="
noauth
defaultroute
usepeerdns
holdoff 3
child-timeout 60
lcp-echo-interval 15
lcp-echo-failure 3
noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp"
rc_need_ppp0="net.eth0"
Il est également possible de configurer le mot de passe dans /etc/ppp/pap-secrets.
# Le * est important
"utilisateur" * "mot de passe"
Si PPPoE est utilisé avec un modem USB, s'assurer d'installer br2684ctl. Lire /var/db/repos/gentoo/net-dialup/speedtouch-usb/files/README pour plus d'informations sur comment le configurer correctement.
Lire attentivement le passage sur ADSL et PPP dans /usr/share/doc/netifrc-*/net.example.bz2. Il contient énormément d'explications détaillées de tous les paramètres qu'une installation de PPP nécessite.
APIPA (Automatic Private IP Addressing)
APIPA essaie de trouver une adresse libre dans la plage 169.254.0.0-169.254.255.255 en créant une adresse aléatoire dans cette plage sur l'interface. Si aucune réponse n'est trouvée, nous attribuons cette adresse à l'interface.
This is only useful for LANs where:
- there is no DHCP server;
- the system doesn't connect directly to the Internet; and
- all other computers use APIPA.
Pour le support APIPA, installer net-misc/iputils avec l'option de la variable USE arping
ou net-analyser/arping.
# Essayer DHCP en premier - si cela échoue alors se replier sur APIPA
config_eth0="dhcp"
fallback_eth0="apipa"
# N'utiliser que APIPA
config_eth0="apipa"
Agrégation
L’agrégation (ou bonding) est utilisée pour augmenter la bande passante du réseau ou pour améliorer la résilience face aux défaillances matérielles. Si un système possède deux cartes réseau connectées au même réseau, l'administrateur peut les lier ensemble pour que les applications ne voient qu'une seule interface mais utilisent réellement les deux cartes réseau.
Il existe plusieurs moyens de configurer l'agrégation. Certains d'entre eux, tels que le mode LACP 802.3ad, nécessitent une prise en charge et une configuration supplémentaire du commutateur réseau. Pour une référence des options individuelles, se reporter à la copie locale de /usr/src/linux/Documentation/networking/bonding.txt.
Tout d'abord, effacer la configuration des interfaces utilisées :
config_eth0="null"
config_eth1="null"
config_eth2="null"
Ensuite, définir l'agrégation entre les interfaces :
slaves_bond0="eth0 eth1 eth2"
config_bond0="192.168.100.4/24"
# Choisir le mode correct est les options supplémentaires nécessaires en fonction des besoins.
mode_bond0="balance-alb"
Supprimer les services net.eth* des niveaux de fonctionnement (runlevels), créer un fichier net.bond0 et l'ajouter au bon niveau de fonctionnement.
Pontage (support 802.1d)
Le pontage est utilisé pour joindre des réseaux ensemble. Par exemple, un système peut avoir un serveur qui se connecte à Internet via un modem ADSL et une carte d'accès sans fil pour permettre à d'autres ordinateurs de se connecter à Internet via le modem ADSL. Il est possible de créer un pont pour joindre les deux interfaces.
# Configurer le pont - "man brctl" pour plus de détails
bridge_forward_delay_br0=0
bridge_hello_time_br0=200
bridge_stp_state_br0=1
# Pour ajouter des ports au pont br0
bridge_br0="eth0 eth1"
# Il est nécessaire de configurer les ports avec null de telle sorte que dhcp ne se lance pas
config_eth0="null"
config_eth1="null"
# Finalement donner une adresse au pont - il est possible d'utiliser dhcp
config_br0="192.168.0.1/24"
# Dépend de eth0 et eth1 car ils peuvent nécessiter des configurations supplémentaires
rc_net_br0_need="net.eth0 net.eth1"
Pour utiliser certaines configurations de pont, consulter la documentation sur le nom de variables.
Lors de la mise en pont avec IPv6, SLAAC requiert que STP soit défini sur
1
comme indiqué dans l'exemple ci-dessus.Adresse MAC
Il est également possible de modifier l'adresse MAC des interfaces via le fichier de configuration réseau.
# Pour fixer l'adresse MAC de l'interface
mac_eth0="00:11:22:33:44:55"
# Pour randomiser les 3 derniers octets seulement
mac_eth0="random-ending"
# Pour randomiser entre le même type physique de connexion (par exemple, fibre,
# cuivre, sans fil), de tous fournisseurs
mac_eth0="random-samekind"
# Pour randomiser entre n'importe quel type physique de connexion (par exemple fibre, cuivre,
# sans fil), tous fournisseurs
mac_eth0="random-anykind"
# Complètement aléatoire - ATTENTION: certaines adresses MAC générées de cette manière
# peuvent NE PAS agir comme prévu
mac_eth0="random-full"
Tunneling
Le tunneling ne nécessite aucun logiciel supplémentaire pour être installé car le gestionnaire d'interface peut le faire.
# Pour les tunnels GRE
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"
# Pour les tunnels IPIP
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"
# Pour configurer l'interface
config_vpn0="192.168.0.2 peer 192.168.1.1"
VLAN (support 802.1q)
Pour la prise en charge du réseau local virtuel (VLAN), s'assurer que sys-apps/iproute2 soit installé et que iproute2 est utilisé comme module de configuration plutôt que ifconfig.
Le réseau local virtuel est un groupe de périphériques réseau qui se comportent comme s'ils étaient connectés à un seul segment de réseau, même s'ils ne le sont pas. Les membres du VLAN ne peuvent voir que les membres du même VLAN même s'ils partagent le même réseau physique.
Pour configurer les VLANs, spécifier d'abord les numéros VLAN dans /etc/conf.d/net comme suit :
vlans_eth0="1 2"
Ensuite, configurer l'interface pour chaque VLAN :
config_eth0_1="172.16.3.1 netmask 255.255.254.0"
routes_eth0_1="default via 172.16.3.254"
config_eth0_2="172.16.2.1 netmask 255.255.254.0"
routes_eth0_2="default via 172.16.2.254"
Les configurations spécifiques au VLAN sont gérées par vconfig comme ceci :
vlan1_name="vlan1"
vlan1_ingress="2:6 3:5"
eth0_vlan1_egress="1:2"
Pour l'utilisation de certaines configurations de VLAN, consulter la documentation du nom de la variable.
Introduction
La mise en réseau sans fil sous Linux est généralement assez simple. Il existe trois façons de configurer le wifi : les clients graphiques, les interfaces en mode texte et les interfaces de ligne de commande.
Le plus simple est d'utiliser un client graphique une fois qu'un environnement de bureau est installé. La plupart des clients graphiques, tels que NetworkManager, sont assez explicites. Ils offrent une interface pointer-cliquer pratique qui permet aux utilisateurs de se connecter à un réseau en quelques secondes.
NetworkManager offre des utilitaires d'interface en mode texte ou en ligne de commande en plus de l'interface graphique principale. Installer le paquet net-misc/networkmanager avec l'option de la variable USE
tools
activée. L'utilitaire nmtui est particulièrement utile pour les personnes n'utilisant pas un environnement de bureau basé sur X ou Wayland, mais qui souhaitent néanmoins utiliser des outils faciles d'utilisation qui ne nécessitent pas de modification manuelle des fichiers de configuration.Le réseau sans fil peut également être configuré à partir de la ligne de commande en éditant quelques fichiers de configuration. Cela prend un peu plus de temps pour l'installation, mais cela nécessite également le moins de paquets à télécharger et à installer. Étant donné que les clients graphiques sont la plupart du temps explicites (avec des captures d'écran utiles sur leurs pages d'accueil), nous nous concentrerons sur les alternatives en ligne de commande.
Trois outils prennent en charge les configurations sans fil pilotées par ligne de commande: net-wireless/iw, net-wireless/wireless-tools, et net-wireless/wpa_supplicant. De ces trois, net-wireless/wpa_supplicant est à préférer. La chose importante à retenir est que les réseaux sans fil sont configurés sur une base globale et non par interface.
Le logiciel net-wireless/iw, successeur de net-wireless/wireless-tools, prend en charge presque toutes les cartes et pilotes, mais il ne peut pas se connecter aux points d'accès supportant uniquement WPA. Si les réseaux n'offrent que le cryptage WEP ou sont complètement ouverts, alors net-wireless/iw bat la simplicité de l'autre paquet.
Certaines cartes sans fil sont désactivées par défaut. Pour les activer, consulter la documentation du matériel. Certaines de ces cartes peuvent être débloquées en utilisant l'application rfkill. Si tel est le cas, utiliser rfkill list pour voir les cartes disponibles et rfkill unblock INDEX pour activer la fonctionnalité sans fil. Si ce n'est pas le cas, il se peut que la carte sans fil doive être déverrouillée à l'aide d'un bouton, d'un interrupteur ou d'une combinaison de touches spéciales sur l'ordinateur portable.
WPA supplicant
Le projet WPA supplicant fournit un paquet qui permet aux utilisateurs de se connecter aux points d'accès WPA.
root #
emerge --ask net-wireless/wpa_supplicant
Il est nécessaire d'avoir activé CONFIG_PACKET dans le noyau pour que wpa_supplicant fonctionne. Pour voir si l'option est activée, essayer :
root #
zgrep CONFIG_PACKET /proc/config.gz
root #
grep CONFIG_PACKET /usr/src/linux/.config
En fonction des options de la variable USE, wpa_supplicant peut installer une interface graphique écrite en Qt5, qui s'intégrera bien avec KDE. Pour l'obtenir, activer
USE="qt5"
pour le paquet net-wireless/wpa_supplicant.Ensuite, configurer /etc/conf.d/net de façon à ce que wpa_supplicant soit préféré à wireless-tools (Si les deux sont installés, wireless-tools est utilisé par défaut).
# Préfère wpa_supplicant à wireless-tools
modules="wpa_supplicant"
Lors de l'utilisation du pilote host-ap, il est nécessaire de mettre la carte en mode Managed avant de pouvoir l'utiliser correctement avec wpa_supplicant. Cela peut être réalisé en définissant
iwconfig_eth0="mode managed"
dans /etc/conf.d/net.Ensuite, configurez wpa_supplicant lui-même (ce qui est un peu plus compliqué en fonction de la sécurité des points d'accès). L'exemple ci-dessous est pris et simplifié à partir de /usr/share/doc/wpa_supplicant- <version> /wpa_supplicant.conf.gz fourni avec wpa_supplicant.
# La ligne suivante ne doit pas être modifiée sinon wpa_supplicant refuse de fonctionner
ctrl_interface=/var/run/wpa_supplicant
# Assurez-vous que seul root puisse lire la configuration WPA
ctrl_interface_group=0
# Laissez wpa_supplicant s'occuper de scanner et de sélectionner le point d'accès
ap_scan=1
# Cas Simple: WPA-PSK, PSK un mot de passe ASCII, autoriser tous les chiffrements valides
network={
ssid="simple"
psk="mot de passe secret"
# Plus la priorité est haute, plus rapide est l'association
priority=5
}
# Comme précédemment , mais requiert le scan d'un SSID précis (pour les réseaux ne diffusant pas leur SSID)
network={
ssid="second ssid"
scan_ssid=1
psk="mot de passe secret"
priority=2
}
# Seul WPA-PSK est utilisé. Tous les chiffrements valides sont autorisés
network={
ssid="example"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
priority=2
}
# Connexion en clair (pas de WPA, pas de IEEE 802.1X)
network={
ssid="plaintext-test"
key_mgmt=NONE
}
# Connexion avec clé WEP partagée (pas de WPA, pas de IEEE 802.1X)
network={
ssid="static-wep-test"
key_mgmt=NONE
# Les clés entre guillemets sont des clés ASCII
wep_key0="abcde"
# Les clés sans guillemets sont des clés hexadécimales
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
}
# Connexion avec clé WEP partagée (pas de WPA, pas de IEEE 802.1X) en utilisant une clé partagée
# authentification IEEE 802.11
network={
ssid="static-wep-test2"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
auth_alg=SHARED
}
# Réseau IBSS/ad-hoc avec WPA-None/TKIP
network={
ssid="test adhoc"
mode=1
proto=WPA
key_mgmt=WPA-NONE
pairwise=NONE
group=TKIP
psk="mot de passe secret"
}
Outils sans fil
Configuration initiale et mode géré
Le projet d'outils sans fil wireless tools fournit une façon générique de configurer les interfaces sans fil de base jusqu'au niveau de sécurité WEP. Bien que le WEP soit une méthode de sécurité faible, il est encore répandu dans le monde.
La configuration des outils sans fil est contrôlée par quelques variables principales. L'exemple de fichier de configuration ci-dessous doit décrire tout ce qui est nécessaire. Une chose à garder à l'esprit est qu'aucune configuration ne signifie « se connecter au point d'accès non crypté le plus fort » - les outils sans fil essaieront toujours de connecter le système à quelque chose.
root #
emerge --ask net-wireless/wireless-tools
Bien que net-wireless/iw soit l'outil actuel pour la gestion des réseaux sans fil, net-misc/netifrc avant la version 0.6.0 ne fonctionne pas avec les nouvelles commandes. net-wireless/wireless-tools doit être utilisé avec netifrc pour des versions antérieures. Pour plus d'informations, consultez la documentation sur les noms de variables et valeurs.
# Préférer iwconfig à wpa_supplicant
modules="iwconfig"
# Configure les clés WEP pour les points d'accès appelés ESSID1 et ESSID2
# Vous pouvez configurer jusqu'à 4 clés WEP, mais une seule peut être active à tout moment
# donc nous fournissons un index par défaut de [1] pour définir la clé [1],
# puis à nouveau après pour changer la clé active en [1].
# Nous faisons cela au cas ou vous ordonniez à d'autres ESSID d'utiliser des clés WEP aures que [1]
#
# Préfixer la clé avec s: signifie que c'est une clé ASCII, sinon une clé HEX
#
# enc open spécifie sécurité ouverte (le plus sécure)
# enc restricted spécifie sécurité restreinte (le moins sécure)
key_ESSID1="[1] s:votre_clé_ici [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"
# Ce qui suit fonctionne uniquement lorsque nous recherchons des points d'accès disponibles
# Parfois, plus d'un point d'accès est visible, nous devons donc
# définir un ordre préféré auxquels se connecter
preferred_aps="'ESSID1' 'ESSID2'"
Affiner la sélection des points d'accès
Il est possible d'ajouter des options supplémentaires pour affiner la sélection du point d'accès, mais celles-ci ne sont pas nécessaires.
L'une des façons est de configurer le système ainsi il se connecte seulement aux points d'accès favoris. Par défaut, si tout ce qui a été configuré a échoué et que les outils sans fil peuvent se connecter à un point d'accès non chiffré, alors il le fera. Cela peut être contrôlé par la variable associate_order. Voici un tableau de valeurs et comment ils contrôlent cela.
Valeur | Description |
---|---|
any | Comportement par défaut. |
preferredonly | Se connecter uniquement aux points d'accès visibles dans la liste des favoris |
forcepreferred | Se connecter de manière forcée aux points d'accès dans l'ordre de préférence s'ils ne sont pas trouvés lors d'un scan. |
forcepreferredonly | Ne scan pas les points d'accès. Essaye plutôt se connecter à chacun d'entre eux dans l'ordre. |
forceany | Même chose que forcepreferred + se connecter à tout autre AP disponible. |
Il y a aussi la sélection blacklist_aps et unique_ap. blacklist_aps fonctionne de la même manière que preferred_aps. unique_ap est une valeur oui ou non qui indique si une seconde interface sans fil peut se connecter au même point d'accès que la première interface.
# Parfois, vous ne voulez jamais vous connecter à certains points d'accès
blacklist_aps="'ESSID3' 'ESSID4'"
# Si vous avez plus d'une carte sans fil, vous pouvez dire si vous voulez
# permettre à chaque carte de s'associer au même point d'accès ou non
# Les valeurs sont "yes" (oui) et "no" (non)
# La valeur par défaut est "yes"
unique_ap="yes"
Modes Ad-hoc et master
Pour configurer le système en tant que nœud ad-hoc lorsqu'il ne parvient pas à se connecter à un point d'accès en mode géré, utilisez ceci comme solution de secours :
adhoc_essid_eth0="This Adhoc Node"
Il est également possible de se connecter à des réseaux ad-hoc, ou d'exécuter le système en mode master pour qu'il devienne lui-même un point d'accès.
# Définir le mode - peut être géré (par défaut), ad-hoc ou maître
# Tous les pilotes ne prennent pas en charge tous les modes
mode_eth0="ad-hoc"
# Définir l'ESSID de l'interface
# En mode géré, cela force l'interface à essayer de se connecter au
# ESSID spécifié et rien d'autre
essid_eth0="This Adhoc Node"
# Nous utilisons le canal 3 si aucun n'est spécifié
channel_eth0="9"
Une ressource importante à propos de la sélection des canaux est la documentation BSD wavelan trouvée dans la documentation de NetBSD. Il y a 14 canaux possibles; On nous dit que les canaux 1-11 sont autorisés pour l'Amérique du Nord, les canaux 1-13 pour la plupart de l'Europe, les canaux 10-13 pour la France, et seulement le canal 14 pour le Japon. En cas de doute, reportez-vous à la documentation fournie avec la carte ou le point d'accès. Assurez-vous que le canal sélectionné est le même que le point d'accès (ou l'autre carte dans un réseau ad-hoc). Le défaut pour les cartes vendues en Amérique du Nord et dans la majeure partie de l'Europe est de 3; la valeur par défaut pour les cartes vendues en France est de 11, et celle par défaut pour les cartes vendues au Japon est de 14.
Outils de diagnostic des réseaux sans fil
Il y a d'autres variables qui peuvent aider à faire fonctionner le réseau sans fil en cas de problèmes de pilote ou d'environnement. Voici un tableau de choses qui peuvent être essayées.
Nom de la variable | Valeur par défaut | Description |
---|---|---|
iwconfig_eth0 | Consultez la page de manuel iwconfig pour plus de détails sur les paramètres à utiliser avec iwconfig. | |
iwpriv_eth0 | Consultez la page de manuel iwpriv pour plus de détails sur les paramètres à utiliser avec iwpriv. | |
sleep_scan_eth0 | 0 | Le nombre de secondes à attendre avant d'essayer de numériser. Ceci est nécessaire lorsque le pilote/le micrologiciel a besoin de plus de temps pour être actif avant de pouvoir être utilisé. |
sleep_associate_eth0 | 5 | Le nombre de secondes à attendre que l'interface s'associe au point d'accès avant de passer au suivant. |
associate_test_eth0 | MAC | Certains pilotes ne réinitialisent pas l'adresse MAC associée à une adresse MAC invalide lorsqu'ils perdent ou tentent une association. Certains pilotes ne réinitialisent pas le niveau de qualité lorsqu'ils perdent ou tentent de s'associer. Les paramètres valides sont MAC, quality et all. |
scan_mode_eth0 | Certains pilotes doivent scanner en mode ad-hoc, donc si le scan échoue, essayez le réglage ad-hoc ici. | |
iwpriv_scan_pre_eth0 | Envoie quelques commandes iwpriv à l'interface avant le scan. Voir la page de manuel d'iwpriv pour plus de détails. | |
iwpriv_scan_post_eth0 | Envoie des commandes iwpriv à l'interface après le scan. Voir la page de manuel d'iwpriv pour plus de détails. |
Définir une configuration réseau par ESSID
Dans cette section, nous montrons comment configurer les paramètres réseau en fonction de l'ESSID. Par exemple, avec le réseau sans fil avec l'ESSID ESSID1, configurez une adresse IP statique tandis que l'ESSID ESSID2 utilise DHCP.
Cela fonctionne aussi bien avec wpa_supplicant que wireless-tools
Veuillez consulter la documentation du nom de la variable.
config_ESSID1="192.168.0.3/24 brd 192.168.0.255"
routes_ESSID1="default via 192.168.0.1"
config_ESSID2="dhcp"
fallback_ESSID2="192.168.3.4/24"
fallback_route_ESSID2="default via 192.168.3.1"
# Nous pouvons définir des serveurs de noms et d'autres choses aussi
# REMARQUE : DHCP les remplacera sauf si on lui dit de ne pas le faire
dns_servers_ESSID1="192.168.0.1 192.168.0.2"
dns_domain_ESSID1="some.domain"
dns_search_domains_ESSID1="search.this.domain search.that.domain"
# Vous remplacez en fonction de l'adresse MAC du point d'accès
# C'est pratique si vous allez à différents endroits qui ont le même ESSID
config_001122334455="dhcp"
dhcpcd_001122334455="-t 10"
dns_servers_001122334455="192.168.0.1 192.168.0.2"
Crochets de fonctions de base
Four functions can be defined in /etc/conf.d/net:
preup()
, called before an interface is brought up;predown()
, called before an interface is brought down;postup()
, called after an interface is brought up; andpostdown()
, called after an interface is brought down.
Each of these these functions is called with the interface name, available within each function via the IFACE variable, so that one function can control multiple interfaces.
The return values for the preup()
and predown()
functions should be:
- 0 to indicate success, and that configuration or de-configuration of the interface can continue.
- A non-zero value otherwise.
If preup()
returns a non-zero value, interface configuration will be aborted. If predown()
returns a non-zero value, the interface will not be allowed to continue de-configuration.
Return values for the postup()
and postdown()
functions are ignored since there's nothing to do if they indicate failure.
${IFACE} définit l'interface en cours d'activation/désactivation. ${IFVAR} est ${IFACE} convertie en nom de variable utilisable par bash.
preup() {
# Test le lien sur l'interface avant de l'activer.
# Cela ne fonctionne que sur certaines cartes réseau et nécessite
# d'avoir installé le paquet ethtool
if ethtool ${IFACE} | grep -q 'Link detected: no'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
# Ne pas oublier de retourner 0 en cas de succès
return 0
}
predown() {
# L'action par défaut est de tester la racine NFS et d'interdire
# la désactivation des interfaces. Noter que si vous spécifiez une
# fonction predown() vous outrepasserez cette logique.
if is_net_fs /; then
eerror "root filesystem is network mounted -- can't stop ${IFACE}"
return 1
fi
# Ne pas oublier de retourner 0 en cas de succès
return 0
}
postup() {
# Cette fonction peut être utilisée par exemple,
# pour s'enregistrer au près d'un service DNS dynamique.
# Une autre possiblité pourrait d 'envoyer/recevoir un mail quand
# l'interface est activée
return 0
}
postdown() {
return 0
}
Pour plus d'informations sur l'écriture de fonctions, lire /usr/share/doc/netifrc-*/net.example.bz2.
Crochets de fonctions d'outils sans fil
Ceci ne fonctionnera pas avec WPA Supplicant - mais les variables ${ESSID} et ${ESSIDVAR} sont disponibles dans la fonction
postup()
.Two functions can be defined in /etc/conf.d/net:
preassociate()
, called before association.postassociate()
, called after association.
Each of these these functions is called with the interface name, available within each function via the IFACE variable, so that one function can control multiple interfaces.
The return values for the preassociate() function should be:
- 0 to indicate success, and to continue configuration.
- A non-zero value otherwise.
If preassociate()
returns a non-zero value, interface configuration will be aborted.
La valeur de retour dela fonction postassociate()
est ignorée car il n'y a rien à faire si elle indique un échec.
${ESSID} est définie sur l'ESSID exact du point d'accès auquel le système se connecte. ${ESSIDVAR} est la variable ${ESSID} convertie en un nom de variable que bash peut utiliser.
preassociate() {
# Ici nous ajoutons les deux variable de configuration leap_user_ESSID et leap_pass_ESSID.
# Quand elles sont toutes deux configurées pour le ESSID auquel le système est connecté,
# nous éxecutons le script CISCO LEAP.
local user pass
eval user=\"\$\{leap_user_${ESSIDVAR}\}\"
eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\"
if [[ -n ${user} && -n ${pass} ]]; then
if [[ ! -x /opt/cisco/bin/leapscript ]]; then
eend "For LEAP support, please emerge net-misc/cisco-aironet-client-utils"
return 1
fi
einfo "Waiting for LEAP Authentication on \"${ESSID//\\\\//}\""
if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then
ewarn "Login Failed for ${user}"
return 1
fi
fi
return 0
}
postassociate() {
return 0
}
${ESSID} et ${ESSIDVAR} sont indisponibles dans les fonctions
predown()
et postdown()
.Pour plus d'informations sur l'écriture de fonctions personnalisées, lire /usr/share/doc/netifrc-*/net.example.bz2.
Gestion du réseau
Avec les ordinateurs portables, les systèmes peuvent être en mouvement constant. Par conséquence, le système peut ne pas avoir de câble Ethernet branché ou de point d'accès disponible. Aussi, l'utilisateur peut vouloir que le réseau fonctionne automatiquement lorsqu'un câble Ethernet est branché ou qu'un point d'accès est trouvé.
Ce chapitre explique comment résoudre ce problème.
Ce document ne traite que d'ifplugd, mais il y a d'autres alternatives comme netplug. netplug est une alternative plus légère à ifplugd, mais il dépend d'un fonctionnement correct des pilotes réseaux du noyau, et beaucoup ne le sont pas.
ifplugd
ifplugd est un démon qui démarre et arrête les interfaces quand un cable Ethernet est inséré ou retiré. Il peut également gérer la détection de l'association aux points d'accès ou lorsque de nouveaux sont à portée.
root #
emerge --ask sys-apps/ifplugd
La configuration pour ifplugd est simple. Elle est située dans /etc/conf.d/net. Exécuter man ifplugd pour plus de détails sur les variables disponibles. Aussi, se référer à /usr/share/doc/netifrc-*/net.example.bz2 pour plus d'exemples.
# Remplace eth0 par l'interface à surveiller
ifplugd_eth0="..."
# Pour surveiller une interface sans fil
ifplugd_eth0="--api-mode=wlan"
En plus de gérer de multiples connections réseau, les utilisateurs peuvent vouloir un outil permettant de travailler avec plusieurs serveurs DNS et configurations. C'est très pratique quand le système reçoit son adresse IP via DHCP.
root #
emerge --ask net-dns/openresolv
Voir man resolvconf pour en apprendre plus sur ses fonctionnalités.
Warning: Display title "Gentoo Linux amd64 Handbook: Network configuration" overrides earlier display title "Handbook:AMD64/Full/Networking/fr".