la caverne d'Ali baba informatique.
la caverne d'Ali baba informatique.

Configuration du reseau sous Linux

Préalables pour le lecteur : pour tirer le maximum de profit de la lecture de cet article, il est conseillé d’avoir acquis au préalable les concepts suivants : les outils basiques de ligne de commande unix, les éditeurs de texte, DNS, TCP/IP, DHCP, masque de réseau (netmask), passerelle (gateway).

Sommaire

  1. 3 façons pour configurer le réseau
  2. Configurer une interface Ethernet
    1. Démarrer et stopper des interfaces
    2. Réinitialiser une nouvelle configuration de réseau
    3. Noms d’interface réseau
    4. Utiliser DHCP pour configurer automatiquement une interface réseau
    5. Configurer une interface réseau manuellement
    6. Configurer la vitesse et le duplex
    7. Activer une interface réseau sans adresse IP
  3. Définir les serveurs de noms de domaine (DNS)
    1. Le fichier de configuration resolv.conf
    2. Le programme resolvconf
    3. Configuration de DNS pour network-manager
    4. Configuration du client DHCP
  4. Relais
    1. Relais sans switch
  5. Comment utiliser un réseau local virtuel – vlan (dot1q, 802.1q, trunk) avec Etch et Lenny
    1. Configuration manuelle
    2. Configuration de réseau avec script init
    3. Relais et VLAN
    4. Avertissement sur l’utilisation d’un relais (bridging) et d’un réseau local virtuel (vlan)
  6. Comment créer une connexion tolérante aux pannes avec un vlan (dans Etch jusqu’à Stretch)
    1. Configuration de réseau
    2. Connexion avec backup actif
    3. /etc/network/interfaces
    4. Comment configurer la valeur de MTU (Max Transfer unit / taille de paquet) avec un VLAN sur une interface avec bonding
  7. Adresses IP multiples pour une interface
    1. Ancienne méthode
    2. Méthode iproute2

3 façons pour configurer le réseau

  • Le fichier de configuration des interfaces à cet emplacement /etc/network/interfaces (cette page) : pour des configurations de base ou simples (par exemple un station de travail)
  • NetworkManager : C’est la façon par défaut pour la configuration d’un ordinateur portable
  • Systemd : Chapitre 5 du Guide de référence Debian

Configurer une interface Ethernet

L’essentiel de la configuration d’un réseau peut être fait en passant par le fichier de configuration interfaces du répertoire /etc/network/interfaces. Là, vous pourrez donner à votre carte de réseau une adresse IP (ou utiliser dhcp), configurer les informations de routage ou le masquage d’IP, le routage par défaut et bien d’autres choses.

N’oubliez pas d’ajouter à la ligne ‘auto’ les interfaces que vous souhaitez lancer au démarrage de l’ordinateur.

Pour plus d’informations, voir man interfaces.

Démarrer et stopper des interfaces

Les interfaces configurées avec /etc/network/interfaces peuvent être activées et désactivées avec les commandes ifup et ifdown.

Quelques guides surannés enseignent de redémarrer le service réseau pour appliquer les changements à /etc/network/interfaces. Cependant, cela est en effet obsolète car il est possible que toutes les interfaces ne soient pas redémarrées. Utilisez plutôt ifup et ifdown pour appliquer les changements pour chaque interface. Par exemple, avec une interface nommée enp7s0 :

# ifdown enp7s0
# ifup enp7s0

Réinitialiser une nouvelle configuration de réseau

Si vous faites des modifications de réseau plus profondes, par exemple en ajoutant de nouvelles interfaces virtuelles (par exemple un pont) dans /etc/network/interfaces, vous pouvez réinitialiser la configuration du réseau en redémarrant le démon networking :

# systemctl status networking
# systemctl restart networking

Noms d’interface réseau

Voir NetworkInterfaceNames. Depuis Stretch, les nouveaux systèmes n’utilisent par défaut désormais plus les anciens noms d’interface tels que eth0, eth1, wlan0, wlan1. Le nouveau système utilise des noms basés sur les emplacements du matériel tels que no0, enp0s31f6, wlp1s7 (ou dans le cas des dongles USB, l’adresse MAC : enx2c56ac39ec0d).

Vous pouvez lister les interfaces avec : ls /sys/class/net.

Divers exemples plus bas continuent d’utiliser « eth0 » comme nom d’interface par défaut, même s’il est peu probable que cela existe sur un système moderne.

Mise à niveau et noms d’interface réseau

Stretch et Buster conservent toujours une prise en charge pour l’ancien système de nommage tant que le fichier /etc/udev/rules.d/70-local-persistent-net.rules est encore en place, mais il est conseillé aux utilisateurs de basculer vers le nouveau le système de nommage avec Bullseye.

Utiliser DHCP pour configurer automatiquement une interface réseau

Si vous utilisez juste DHCP, vous n’avez qu’à entrer quelque chose comme ça :

    auto eth0
    allow-hotplug eth0
    iface eth0 inet dhcp

Pour DHCPv6 (utilsé par IPv6), ajoutez la section iface suivante

    iface eth0 inet6 dhcp

Autrement, IPv6 peut être configuré automatiquement en utilisant l’autoconfiguration sans état (stateless address autoconfiguration ou SLAAC) qui est spécifiée en utilisant auto à la place de dhcp dans la section inet6 :

    iface eth0 inet6 auto

Voir aussi IPv6PrefixDelegation.

Configurer une interface réseau manuellement

Si vous configurez l’interface réseau manuellement, quelque chose comme ce qui suit paramètrera la passerelle par défaut (réseau, broadcast – adresse de diffusion et passerelle – gateway sont optionnels) :

    auto eth0
    iface eth0 inet static
        address 192.0.2.7/24
        gateway 192.0.2.254

Si vous voulez ajouter une adresse IPv6, ajoutez quelque chose comme cela :

    iface eth0 inet6 static
        address 2001:db8::c0ca:1eaf/64
        gateway 2001:db8::1ead:ed:beef

Pour plus d’options, voir man interfaces.

Assurez-vous de désactiver tous les services DHCP, par exemple dhcpcd.

Mixer la configuration manuelle et automatique est également possible, par exemple, utiliser IPv6 SLAAC pour la connectivité internet et des adresses statiques à l’intérieur du réseau :

# manual unique local address
iface eth0 inet6 static
 address fdc3:cafe::3/64
 # use SLAAC to get global IPv6 address from the router
 # we may not enable ipv6 forwarding, otherwise SLAAC gets disabled
 autoconf 1
 accept_ra 2

Configurer la vitesse et le duplex

Une auto-négociation défaillante à maintes reprises est souvent le signe d’un problème de câblage, donc vérifiez votre installation matériel avant de considérer que ce sont les algorithmes d’auto-négociation de l’interface qui sont incompatibles. Si vous arrêtez l’auto-négociation puis configurez vous-même la vitesse et le mode duplex, l’interface du partenaire situé à l’autre bout du câble supposera que l’absence d’auto-négociation indique une vitesse de 10 Mbit/s et un mode duplex de la moitié. Pour que ça fonctionne sans erreur, si vous configurez vous-même la vitesse et le mode duplex, vous devez vous assurer que l’interface du partenaire a adopté exactement la même vitesse et le même mode duplex.

Si vous configurez manuellement la vitesse et le mode duplex de votre interface, quelques essais seront sans doute nécessaires. Voici les étapes à suivre :

  • Installez les paquets ethtool et net-tools afin de disposer des programmes ethtool et mii-tool. L’un ou l’autre devrait marcher pour votre interface.
  • Assurez-vous d’avoir un moyen de vous connecter au système au cas où l’interface réseau deviendrait non-fonctionnelle. Une connexion SSH peut s’interrompre, vous devez avoir une solution de repli.
  • Identifiez l’interface que vous voulez configurer (c’est souvent eth0). Modifier le reste des instructions en conséquence.
  • Essayez de déterminer quels sont les paramètres de vitesse et de duplex habituels. C’est là que cela devient drôle :
    • En tant que super-utilisateur, essayez d’abord ethtool eth0 et regardez si les lignes « Speed : » et « Duplex : » ont l’air valides. En cas contraire, ethtool pourrait ne pas être supporté par votre périphérique.
    • En tant que super-utilisateur, essayez mii-tool -v eth0 et regardez si ses données de sortie semblent correctes. En cas contraire, mii-tool pourrait ne pas être supporté par votre périphérique.
    • Si aucun des deux n’est supporté, vous allez avoir à paramétrer directement le module du pilote du noyau. Identifiez quel module est utilisé en lisant les données de dmesg et de lsmod. Essayez modinfo MODULENAME pour voir quels paramètres sont valides, s’il y en a (vous pouvez utiliser modinfo même avec des modules qui ne sont pas chargés pour comparer.) ToDo : où configure-t-on les paramètres des modules du noyau ?
  • Ensuite, essayez de changer les réglages de l’interface pendant qu’il fonctionne. Vous aurez bien sûr besoin d’être super-utilisateur. D’abord :
    • ethtool -s eth0 autoneg off speed 100 duplex full (en supposant que la vitesse est 100 Mbit/s et le mode full duplex)
    • mii-tool -F 100baseTx-FD eth0 (même hypothèse).
    A chaque essai, vérifiez si la configuration de l’interface a réellement changé et tenter d’émettre et de recevoir des données pour voir si le contrôleur d’interface réseau fonctionne correctement.
  • Si une de ces commandes réussit à configurer votre contrôleur d’interface réseau, enregistrez-la dans le fichier /etc/network/interfaces afin qu’elle fonctionne quand vous mettez en marche votre interface (par exemple au moment du démarrage de l’ordinateur). Néanmoins, avant de le faire, vous devez comprendre que tous les pilotes et périphériques ne se comportent pas tous de la même manière. Quand le module du pilote est chargé, le contrôleur d’interface réseau peut commencer une auto-négociation sans que l’on puisse l’arrêter (surtout les pilotes qui n’acceptent pas de paramètres). Les réglages enregistrés dans interfaces s’appliquent ensuite à un moment quelconque qui peut être juste au milieu de l’auto-négociation. Aussi, certains pensent qu’il est nécessaire de retarder de quelques secondes la commande ethtool ou mii-tool. Ainsi : iface eth0 inet static         address …/…         gateway …         up sleep 5; ethtool -s eth0 …ou de manière analogue avec la commande mii-tool.
  • Redémarrez l’ordinateur pour être sûr qu’il s’allume correctement et soyez prêt à intervenir manuellement (par exemple Ctrl-Alt-Del et puis redémarrez en mode mono-utilisateur avec GRUB ou LILO) si ça ne marche pas.

Activer une interface réseau sans adresse IP

Il faut se servir d’une méthode manuelle pour créer une interface réseau sans adresse IP puis utiliser les commandes pre-up et post-down pour activer ou désactiver l’interface.

   iface eth0 inet manual
      pre-up ifconfig $IFACE up
      post-down ifconfig $IFACE down

Si l’interface est une interface VLAN, les commandes up/down doivent être exécutées respectivement avant et après la connection du vlan. after/before the vlan hooks. (Vous devez aussi installez le paquet vlan.)

   iface eth0.99 inet manual
      post-up ifconfig $IFACE up
      pre-down ifconfig $IFACE down

Remarque : si vous créez l’interface VLAN seulement pour le mettre dans un bridge, il n’est pas besoin de définir l’interface LAN soi-même. Il suffit de configurer le bridge et l’interface VLAN interface sera créé automatiquement lors de la création du bridge (voir plus bas).

Définir les serveurs de noms de domaine (DNS)

Pour qu’un ordinateur puisse se connecter à une ressource réseau externe (par exemple, un serveur web), il faut qu’il ait le moyen de convertir un nom alpha-numérique (par exemple wiki.debian.org) en une adresse réseau numérique (par exemple 140.211.166.4). (Internet utilise ces adresses IP numériques structurées comme adresses réseaux.)

La bibliothèque C et les autres bibliothèques de résolveur vont chercher dans /etc/resolv.conf une liste de noms de serveurs. Dans le cas le plus simple, c’est un fichier à éditer pour dresser la liste des serveurs. Notez que d’autres programmes de configuration dynamique se feront un plaisir de remplacer vos réglages :

  1. Le programme resolvconf
  2. Le démon network-manager
  3. les clients DHCP

Dans la plupart des situations, le fichier à éditer est le fichier de configuration d’un tel programme.

Dans les cas les plus complexes, utiliser resolvconf est réellement le bon choix, même si avec des configurations plus simples, c’est probablement excessif.

Le fichier de configuration resolv.conf

Le fichier de configuration resolv.conf du répertoire /etc/resolv.conf contient les informations qui permettent à un ordinateur connecté au réseau de convertir les noms en adresses. (Note : Il ne faut pas confondre ce fichier de configuration avec le programme resolvconf qui porte malencontreusement presque le même nom.)

Le fichier resolv.conf contient habituellement les adresses IP des serveurs de noms de domaine (DNS) qui tenteront de convertir les noms en adresse pour tous les nœuds disponibles sur le réseau. Vous y verrez des lignes comme celle-ci :

nameserver 12.34.56.78
nameserver 12.34.56.79

Dans cet exemple, le système se sert de serveurs de noms de domaine dont les adresses IP sont 12.34.56.78 et 12.34.56.79. Il vous suffit de modifier le fichier en entrant l’adresse IP des serveurs de noms de domaine dont vous avez besoin après chaque nameserver ; ajoutez des lignes de nameserver si vous avez plus de serveurs de noms de domaine. N’utilisez pas cette méthode si vous avez installé le programme resolvconf.

Le fichier de configuration resolv.conf a plusieurs options pour définir comment le résolveur recherche les noms ; regardez man resolv.conf pour plus de détails.

Le programme resolvconf

Le programme resolvconf garde la trace des informations du système sur les serveurs de noms de domaine actuellement disponibles. Il ne faut pas le confondre avec le fichier de configuration resolv.conf qui porte malencontreusement presque le même nom. Le programme resolvconf est optionnel sur les systèmes Debian.

Le fichier de configuration resolv.conf contient des informations sur les serveurs de noms de domaine que le système doit utiliser. Néanmoins, quand plusieurs programmes doivent modifer dynamiquement le fichier de configuration resolv.conf, ils peuvent se chevaucher et le fichier peut ne plus être synchronisé. Le programme resolvconf s’occupe de ce problème. Il agit comme un intermédiaire entre les programmes qui fournissent des informations sur les serveurs de noms de domaine (par exemple les clients dhcp) et les programmes qui les utilisent (par exemple resolver).

Quand resolvconf est correctement installé, le fichier de configuration resolv.conf du répertoire /etc/resolv.conf est remplacé par un lien symbolique pointant vers le fichier /etc/resolvconf/run/resolv.conf et le résolveur utilise plutôt le fichier de configuration qui est généré dynamiquement par resolvconf à cet emplacement /etc/resolvconf/run/resolv.conf.

Le programme resolvconf est en général seulement nécessaire quand un système a plusieurs programmes qui ont besoin de modifier de façon dynamique les informations sur les serveurs de noms de domaine. Sur un système simple où les serveurs de noms de domaine ne changent pas souvent ou bien ne sont modifiés que par un programme, le fichier de configuration resolv.conf est suffisant.

Si le programme resolvconf est installé, vous n’aurez pas à modifier à la main le fichier de configuration resolv.conf car il sera changé de façon dynamique par les programmes. Si vous avez besoin de définir vous-même les serveurs de noms de domaine (comme avec une interface statique), ajoutez au fichier de configuration interfaces du répertoire /etc/network/interfaces une ligne comme celle-ci :

dns-nameservers 12.34.56.78 12.34.56.79

Mettez la ligne indéntée dans un paragraphe iface, par exemple juste après la ligne gateway. Entrez les adresses IP des serveurs de noms de domaine dont vous avez besoin après dns-nameservers, toutes sur la même ligne, séparées par des espaces. N’oubliez pas le « s » à la fin de dns-nameservers.

Le programme resolvconf est un ajout plutôt récent à Debian et plusieurs anciens programmes ont besoin d’être mis à jour ou reconfigurés pour fonctionner correctement avec lui . Si vous rencontrez des problèmes, regardez /usr/share/doc/resolvconf/README qui contient beaucoup d’informations sur la manière de faire fonctionner resolvconf avec d’autres programmes.

Configuration de DNS pour network-manager

Attention : Cette section n’a pas été testé avec une vraie configuration de network-manager. S’il vous plaît, testez-la puis retirez cet avertissement. Note : Cette section paraît valable avec les systèmes type Red Hat mais pas pour Debian dans la mesure où les systèmes RH utilisent habituellement /etc/sysconfig/network-scripts/, mais pas les systèmes Debian. La référence à /etc/sysconfig/network-scripts/ifcfg-* ne convient sans doute pas ici.

Si vous utilisez NetworkManager, mettez votre configuration dans le fichier /etc/sysconfig/network-scripts/ifcfg-*. Exemple :

DNS1=127.0.0.1
DNS2=8.8.8.8
DNS3=8.8.4.4

Avec l’interface graphique, cela signifie :

  1. Menu système → Préférences → Connexion réseau.
  2. Choisir une connexion dans l’onglet réseau filaire ou sans fil et cliquer Modifier.
  3. Dans l’onglet configuration IPv4, changez la Méthode en autre chose que “Automatique (DHCP)” . Par exemple, “Automatic (DHCP) addresses only” est probablement approprié.
  4. Entrez les serveurs de noms de domaine dans le champ “DNS servers”, séparés par des espaces.
  5. Cliquer sur “Appliquer”.

Notez que votre client DHCP pourrait corriger ces paramètres ; s’il en est ainsi, vous pouvez envisager de le signaler comme un bogue et voir plus bas pour la configuration du client DHCP.

Cette section est basée sur la page http://code.google.com/speed/public-dns/docs/using.html, pour plus d’information, vous pouvez vous y reporter.

Configuration du client DHCP

Configuration de serveurs DNS supplémentaires

Exemple : dhclient3 utilise /etc/dhcp/dhclient.conf et la configuration voulue est la suivante :

supersede domain-name-servers 12.34.56.78, 12.34.56.79;

ou peut-être

prepend domain-name-servers 12.34.56.78, 12.34.56.79;

Voir la page du manuel dhclient.conf(5) pour plus de détails.

Configuration de domaines de recherche supplémentaires

Ajout de domaines de recherche pour les VPN ou les réseaux virtuels locaux :

append domain-name " virt vpn";

Notez l’espace qui précède puisque la chaine est littéralement ajoutée au domaine de recherche fourni par d’autres configurations.

Relais

Un relais permet de mettre plusieurs interfaces dans le même segment de réseau. C’est très répandu pour connecter un serveur à de nombreux switch pour une haute disponibilité ou pour de la virtualisation. Dans ce dernier cas, on a l’habitude de créer un relais sur l’hôte (par exemple dom0) et de mettre les interfaces virtuelles des invités (domU) dans le relais.

  • Le paquet bridge-utils est requis pour créer des interfaces relais.

Exemple : Connexion d’un serveur à 2 switch (via eth0 et eth1) en définissant un relais 0 et attribution au serveur d’une adresse IP dans ce sous réseau :

auto br0
iface br0 inet static
        address 10.10.0.15/24
        gateway 10.10.0.1
        bridge_ports eth0 eth1
        up /usr/sbin/brctl stp br0 on

Si un serveur est connecté à plusieurs switch, on a besoin habituellement d’utiliser l’algorithme de l’arbre recouvrant (« spanning tree protocol » – STP) pour éviter les boucles. Donc le STP doit être activé avec une commande « up » comme ci-dessus.

Exemple : Installation d’un relais sans configuration d’adresse IP (utilisez « manual » à la place de « static ») pour « faire suivre » une interface à un invité VM. (La configuration d’un relais statique ne contient qu’une interface physique. L’interface virtuelle sera ajouté au relais au démarrage de la VM.)

auto br1
iface br1 inet manual
        bridge_ports eth4
        up /usr/sbin/brctl setageing br1 0
        up /usr/sbin/brctl stp br1 off

Attention : Les relais Linux ne gèrent que le STP, et non le RSTP (Rapid Spanning Tree). Donc, ils ne gèrent que les anciens coûts du STP, et pas les nouveaux coûts du RSTP (voir Spanning_Tree_Protocol). Cela marche bien avec les switch Cisco, mais les switch Juniper, par exemple, utilisent les coûts RSTP, et donc cela peut entraîner des calculs d’arbre différents et des problèmes de boucle. Cela peut être corrigé en fixant les coûts soi-même, soit sur le switch soit sur le serveur. Il est préférable de configurer les coûts sur les switch parce que Linux revient aux coûts par défaut chaque fois qu’une interface est redémarrée

Relais sans switch

Par défaut un relais Linux se comporte comme un switch. Cela veut dire qu’il retient les adresses MAC derrière un port de switch et si l’adresse MAC de destination est connue, les paquets de données sont seulement acheminés aux ports correspondants – sinon les paquets sont diffusés à tous les ports.

Dans certaines configurations, cela ne marche pas. Par exemple, si le relais connecte 2 interfaces de tronc, les mêmes adresses MAC peuvent être vues par les deux interfaces, selon le réseau. Comme un relais Linux ne gère pas les VLAN (table d’adresses MAC dédiées pour chaque VLAN), avec de tels configurations, vous devez désactiver la mémorisation des adresses MAC et configurer le relais dans un mode de « relais » réel avec la commande :

        up /sbin/brctl setageing br0 0
        up /sbin/brctl stp br0 off

Comment utiliser un réseau local virtuel – vlan (dot1q, 802.1q, trunk) avec Etch et Lenny

Configuration manuelle

modprobe 8021q

apt install vlan

vconfig add eth0 222    # 222 est le numéro du vlan
ifconfig eth0.222 up
ifconfig eth0.222 mtu 1496    #optionnel si votre carte réseau ne gère pas le MTU 1504B
ifconfig eth0.222 10.10.10.1 netmask 255.255.255.0

Configuration de réseau avec script init

Ajoutez cette ligne au fichier /etc/modules :

8021q

Dans la section iface du fichier /etc/network/interfaces ajoutez le paramètre :