Ceci est une ancienne révision du document !
Table des matières
Le réseau sous Linux
C'est à la fois simple et également compliqué, notamment car il existe une myriade d'outils qui font plus ou moins la même chose mais différemment, et que certains sont (partiellement) à la retraite pendant que d'autres les remplacent (partiellement). L'objectif de cet article est d'essayer d'y voir plus clair.
On va découvrir les choses dans l'ordre, du bas niveau (presque des électrons) jusqu'au haut niveau.
RJ45, Hardware
En informatique, le hardware est géré par le noyau (kernel) qui jongle avec les drivers. Sous Linux, on peut noter la présence d'un device manager (=gestionnaire de périphériques) udev qui se charge des périphériques dans /dev.
Lorsqu'on branche son câble RJ45, udev envoie des notifications aux couches supérieures (comme NetworkManager et ses copains) pour permettre de configurer la connexion.
udeva remplacédevfsà la gestion des périphériques/devdepuis le noayu 2.6
Gestionnaires de connexion
Cette couche sert à configurer la connexion (une fois détectée par le kernel), et la mettre à disposition des autres applications (navigateur web, client IRC…).
Par configurer, on entend attribuer une adresse IP, définir une passerelle, éventuellement des ponts ou des routes, etc.
C'est un peu la foire, car il existe plusieurs outils, de plus ou moins haut-niveau, qui s'utilisent les uns les autres, et qui se remplacent (l'informatique est un grand fleuve, tout avance). Généralement, c'est l'un ou l'autre.
Parmi ces outils, on notera :
- NetworkManager
- systemd-networkd (aka networkd)
/etc/network/interfaces, en combinaison avec les outils- Netplan, une couche d'abstraction de configuration de NetworkManager ou networkd. Outil utilisé par Ubuntu
Netplan
Netplan est une couche d'abstraction de configuration, pour NetworkManager et systemd-networkd.
Les fichiers de config de netplan se trouvent dans /etc/netplan.
Une fois la config netplan écrite, on peut générer les fichiers de config pour NetworkManager ou networkd (netplan generate), tester une configuration qui retourne à la config précédente si on ne valide pas dans les 120 sec (netplan try), et appliquer la config lorsqu'elle fonctionne (netplan apply).
Le service networkd-dispatcher peut agir comme relais pour déclencher des actions (pre-up pre-down…)
Netplan ne permet pas de fallback de la façon dont j'ai besoin (bascule sur une config avec IP fixe choisie si pas de DHCP disponible), au lieu de ça, y'a possibilité d'avoir une ip link-local (ip choisie au hasard dans 224.0.0.0/24 ou 169.254.0.0/16).
Si on veut se passer de netplan, il suffit (?) d'installer ifupdown (et du supprimer netplan ? apt purge netplan.io ?)
Il semblerait que sur Ubuntu, certaines lib de netplan soient des dépendances de NetworkManager, il n'est ainsi pas possible de supprimer brutalement netplan et de conserver l'usage de NetworkManager. Toutefois, il semblerait que NetworkManager garde le lead, notamment quand la connexion est gérée par la GUI: NetworkManager crée un fichier de config dans /etc/netplan pour coller à la config définie dans la GUI. source.
iproute2
C'est une collection d'outils pour controler et monitorer le réseau. On note les commandes ip, ss (afficher des statistiques).
dhcpcd
C'est un client DHCP, le fichier de conf est dans /etc/dhcpcd.conf
dhclient
Un client DHCP
DNS
Souvent, on (article indéfini) souhaite accéder à une ressource sur le réseau (locale ou le grand internet) sans connaître son adresse. C'est d'autant plus vrai depuis l'avènement de l'IPv6 dont les adresses sont impossibles à mémoriser. Pour se faciliter la tâche, on a inventé dans les années 80 le Domain Name System (aka DNS) qui permet de relier un nom (de domaine) à une adresse. C'est un système plutôt décentralisé, mais il y a des ressources mieux informées qui vous expliqueront en détail l'historique et les principes.
Ce système est constitué de serveurs, qui peuvent être sur son routeur, son fournisseur internet, ou hébergé soi-même.
Il est nécessaire d'avoir un client dns bien configuré sur son PC sans quoi on ne peut pas résoudre les noms et obtenir les adresses.
Enfin, il existe des systèmes qui permettent la découverte d'un réseau local et d'accéder aux différentes ressources par leur nom/hostname sans avoir de serveur DNS. J'ai lu ici ou la mdns, avahi, j'en parle ici et là. Aujourd'hui, je n'utilise plus ces solutions, je suis parti sur un serveur DNS comme powerdns, notamment car la configuration est centralisée, ça évite de devoir déployer une configuration spécifique sur chaque machine -merci la containerisation-.
Linkographie
Quelques liens en vrac où je suis allé chercher des infos (notamment sur les gestionnaires de connexions:
