Aller au contenu

Interfaces, pilotes et démarrage par le réseau

Entre le câble et l’application, une machine empile plusieurs pièces que l’on confond volontiers : la carte réseau, son pilote, l’interface que présente le système d’exploitation et la pile de protocoles qui l’utilise. Cette fiche les distingue, montre comment les observer sur les principaux systèmes, puis décrit le démarrage par le réseau, avec BOOTP (Bootstrap Protocol), DHCP (Dynamic Host Configuration Protocol), PXE (Preboot eXecution Environment) et le réveil à distance, pratiques pour déployer cent postes et tout aussi pratiques pour en compromettre cent.

→ Lire l’explication complète de la marmotte

La carte réseau, ou NIC (Network Interface Controller), est le composant qui transforme des trames en signaux électriques, lumineux ou radio. Elle est aujourd’hui soudée sur la carte mère, enfichée sur un bus PCIe (Peripheral Component Interconnect Express) ou branchée en USB (Universal Serial Bus). Chaque carte Ethernet ou Wi-Fi porte une adresse MAC (Media Access Control) de 48 bits, écrite en six octets hexadécimaux, par exemple 3c:7c:3f:12:ab:9e. Les trois premiers octets forment l’OUI (Organizationally Unique Identifier) attribué au fabricant par l’IEEE (Institute of Electrical and Electronics Engineers). Dans le premier octet, le bit de poids le plus faible distingue les adresses individuelles des adresses de groupe, et le bit suivant signale une adresse administrée localement : c’est le cas des adresses aléatoires que les smartphones présentent désormais à chaque réseau Wi-Fi, et des adresses fabriquées pour les machines virtuelles. L’adresse MAC identifie une interface sur un segment local, pas une personne, et se modifie en une commande.

Le pilote est le logiciel, souvent un module du noyau, qui sait programmer cette carte précise : registres, files de réception et d’émission, gestion des interruptions.

L’interface est l’objet logique que le système présente à la pile réseau et à l’administrateur : un nom (enp3s0, wlp2s0, Ethernet 2, en0), un état, une MTU (Maximum Transmission Unit), des adresses IP (Internet Protocol). Une carte peut porter plusieurs interfaces, par exemple une par VLAN (Virtual Local Area Network), et une interface peut n’avoir aucune carte derrière elle.

Interfaces physiques, virtuelles, bouclage et tunnels

Section intitulée « Interfaces physiques, virtuelles, bouclage et tunnels »

L’interface de bouclage (lo sous Linux, lo0 sous macOS, adresse 127.0.0.1 en IPv4 et ::1 en IPv6) permet à la machine de se parler à elle-même sans toucher au matériel. Les interfaces virtuelles se multiplient sur toute machine moderne :

TypeExemple de nomCoucheRôle
Physiqueenp3s0, en02carte Ethernet ou Wi-Fi réelle
Pont (bridge)br0, docker0, virbr02commutateur logiciel reliant plusieurs interfaces
Paire vethveth3a91f2@if72câble virtuel entre un conteneur et l’hôte
VLANenp3s0.1002sous-interface étiquetée
TAP / TUNtap0, tun02 / 3tunnel logiciel en trames (TAP) ou en paquets (TUN)
VPNwg0, utun3, ppp03extrémité d’un VPN (Virtual Private Network)
Partage de connexionusb0, enx..., rndis02téléphone vu comme une carte réseau

Chaque ligne est une porte de sortie potentielle. Les fiches VPN, tunnels et bastions et Conteneurs, Kubernetes et CNI détaillent celles qu’ajoutent les tunnels et les conteneurs.

Jusqu’au milieu des années 1990, une carte sur bus ISA (Industry Standard Architecture) se réglait par cavaliers : une ligne d’IRQ (Interrupt Request), par exemple 10, une adresse d’entrée-sortie de base, souvent 0x300, parfois une zone de mémoire partagée et un canal DMA (Direct Memory Access). Deux cartes sur la même IRQ se neutralisaient, et le diagnostic commençait par un tournevis. Le Plug and Play puis le bus PCI ont automatisé tout cela, mais les notions demeurent : une carte PCIe signale ses événements par interruptions MSI-X (Message Signaled Interrupts eXtended), souvent une par file et par cœur, et écrit directement en mémoire par DMA. Sous forte charge, Linux bascule vers une scrutation périodique (mécanisme NAPI) plutôt que de subir un million d’interruptions par seconde.

Pour qu’un même pilote serve plusieurs piles de protocoles, deux interfaces de programmation se sont affrontées à la fin des années 1980. NDIS (Network Driver Interface Specification), conçue par Microsoft et 3Com, reste le modèle de pilote réseau de Windows : pilote de carte (miniport) d’un côté, pilotes de protocole de l’autre, et pilotes de filtre entre les deux, là où s’insèrent pare-feu, VPN et outils de capture. Quand un client VPN se comporte mal sous Windows, un filtre NDIS est souvent en cause. ODI (Open Data-Link Interface), portée par Novell et Apple pour NetWare, n’a plus d’usage actif.

Une interface reçoit sa configuration de trois façons. La configuration automatique, par DHCP en IPv4 et par autoconfiguration ou DHCPv6 en IPv6, convient aux postes et aux équipements mobiles. La configuration manuelle fige adresse, préfixe, passerelle et résolveurs ; elle s’impose pour les serveurs, les routeurs et tout ce qui doit rester joignable au même endroit. Les outils constructeur, enfin, règlent ce que le système ignore : agrégation de liens, déchargement de calcul vers la carte, réveil à distance, options de démarrage réseau stockées dans le micrologiciel.

Les questions restent les mêmes partout : quelles interfaces, quel état, quelles adresses, quel pilote.

# Linux
ip -br link # interfaces et état
ip -br addr # adresses
ethtool -i enp3s0 # pilote, version, micrologiciel
lspci -k | grep -A3 -i ether # carte PCI et module noyau utilisé
nmcli device status # vue de NetworkManager
# Windows (PowerShell)
Get-NetAdapter # interfaces, état, vitesse, description du pilote
Get-NetIPConfiguration # adresses, passerelle, DNS
ipconfig /all # équivalent historique
# macOS
networksetup -listallhardwareports # correspondance port matériel / en0, en1...
ifconfig # toutes les interfaces, y compris utun et bridge

Sous Linux, la configuration persistante dépend de la distribution (NetworkManager, systemd-networkd, netplan) ; ip addr add 192.0.2.10/24 dev enp3s0 agit immédiatement et disparaît au redémarrage, vertu en dépannage, défaut en production.

Un téléphone porte une interface Wi-Fi, des interfaces cellulaires et un bouclage. Le partage de connexion (tethering) en fait un routeur, en Wi-Fi, en Bluetooth ou en USB, où il apparaît côté ordinateur comme une carte Ethernet (pilotes RNDIS ou NCM pour Android, ipheth sous Linux pour un iPhone). Pour l’entreprise, c’est une sortie Internet complète, hors proxy, hors pare-feu, hors journaux, installée en dix secondes par un utilisateur pressé.

BOOTP, défini en 1985 par le RFC (Request for Comments) 951, permettait à une machine sans disque d’obtenir son adresse IP, l’adresse d’un serveur et le nom d’un fichier de démarrage. DHCP (RFC 2131, 1997) a repris son format de message et ses ports, UDP (User Datagram Protocol) 67 côté serveur et 68 côté client, en y ajoutant les baux temporaires et un riche jeu d’options. L’échange en quatre temps, découverte, offre, requête, acquittement, est détaillé dans la fiche DNS, DHCP, NTP.

PXE, spécifié par Intel à la fin des années 1990, permet au micrologiciel de la carte (BIOS ou UEFI) de démarrer sans disque. Le client émet une découverte DHCP en se présentant comme PXEClient (option 60). Le serveur lui répond avec une adresse et deux indications : le serveur de fichiers (champ next-server, ou option 66) et le nom du fichier d’amorçage (option 67). Le client télécharge ce fichier en TFTP (Trivial File Transfer Protocol, UDP 69), un protocole sans authentification ni chiffrement, puis l’exécute. Ce chargeur récupère à son tour un noyau, une image d’installation ou un environnement complet. Le démarrage HTTP de l’UEFI ou le chargeur iPXE remplacent souvent TFTP, plus vite, mais pas plus authentifiés par défaut.

Le Wake-on-LAN (WoL) réveille une machine éteinte mais alimentée : la carte reste en veille et guette un « paquet magique », composé de six octets FF suivis de seize répétitions de son adresse MAC, soit 102 octets, généralement envoyés en diffusion sur UDP port 9. Il s’active dans le micrologiciel et le pilote (ethtool -s enp3s0 wol g sous Linux). Le paquet ne contient aucun secret : quiconque connaît l’adresse MAC peut rallumer la machine.

Poussé à son terme, l’amorçage réseau supprime le disque : postes légers et nœuds de calcul montent leur racine par NFS (Network File System) ou iSCSI (Internet Small Computer System Interface). L’image centrale se met à jour en un point, ce qui séduit l’exploitation, et se compromet en un point, ce qui séduit l’attaquant.

Le démarrage réseau alimente le provisioning : la machine s’annonce par son adresse MAC, reçoit l’image prévue pour son rôle et s’inscrit dans l’inventaire, occasion idéale de rapprocher ce qui a été acheté, ce qui démarre et ce qui est supervisé. Les abus d’un réseau de déploiement trop ouvert sont connus : serveur DHCP ou PXE pirate qui répond plus vite que le légitime, téléchargement des images par n’importe quel poste, fichiers de réponse d’installation contenant des mots de passe d’administration locaux à peine encodés, comptes de jonction au domaine aux droits trop larges. Les parades tiennent en peu de lignes : VLAN de déploiement dédié, relais DHCP limité aux segments prévus, DHCP snooping sur les commutateurs, démarrage sécurisé (Secure Boot) avec chargeurs signés, aucun secret dans les images, et des comptes de déploiement à usage limité. La fiche Filtrage, segmentation et NAC décrit le cloisonnement correspondant.

Sur une station Linux de développement, ip -br link produit typiquement :

lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
enp3s0 UP 3c:7c:3f:12:ab:9e <BROADCAST,MULTICAST,UP,LOWER_UP>
wlp2s0 DOWN a4:c3:f0:55:10:2b <NO-CARRIER,BROADCAST,MULTICAST,UP>
docker0 UP 02:42:9d:41:7c:03 <BROADCAST,MULTICAST,UP,LOWER_UP>
veth3a91f2@if7 UP 9a:51:0e:c2:44:d1 <BROADCAST,MULTICAST,UP,LOWER_UP>
wg0 UNKNOWN <POINTOPOINT,NOARP,UP,LOWER_UP>

Lecture : une carte câblée active, le Wi-Fi sans porteuse, un pont Docker et une paire veth (adresses en 02, administrées localement), un tunnel WireGuard sans adresse MAC puisqu’il travaille en couche 3. Six interfaces, dont une seule figure sur le schéma officiel. Il reste à vérifier avec ip route laquelle porte la route par défaut : c’est là que se découvre un VPN qui capture tout, ou un conteneur qui sort directement.

Sur une machine de test, une capture lancée avant la remise en service de l’interface montre l’échange complet :

sudo tcpdump -ni enp3s0 -v 'udp port 67 or udp port 68'
sudo ip link set enp3s0 down && sudo ip link set enp3s0 up

On y lit la découverte émise de 0.0.0.0 vers 255.255.255.255, l’offre, la requête puis l’acquittement, avec masque, routeur, serveurs DNS (Domain Name System) et durée du bail. Sous Windows, ipconfig /release puis ipconfig /renew déclenchent le même échange. Si deux serveurs répondent, l’atelier vient de trouver un vrai problème.

Chercher une panne IP alors que le pilote est absent fait perdre des heures. Le diagnostic remonte la pile : carte vue sur le bus (lspci, gestionnaire de périphériques), pilote chargé (ethtool -i, dmesg), lien monté, et seulement ensuite adresse et route. Une mise à jour du noyau qui oublie un pilote propriétaire produit exactement ce symptôme.

Laisser PXE accessible depuis un segment utilisateur revient à publier ses images d’installation et à laisser n’importe qui proposer les siennes.

Oublier les interfaces créées par un VPN ou des conteneurs fausse l’inventaire des chemins : une règle écrite pour enp3s0 ne s’applique ni à docker0 ni à wg0.

Carte réseau et interface logique : la carte est un objet matériel, l’interface une construction du système ; une carte porte plusieurs interfaces, et beaucoup d’interfaces n’ont aucune carte.

Pilote et protocole : le pilote parle à un matériel précis, le protocole définit un dialogue entre machines. Changer de pilote ne change pas TCP (Transmission Control Protocol), et un problème de TCP ne se règle pas en réinstallant le pilote, n’en déplaise aux forums.

Wake-on-LAN et accès administratif : le paquet magique allume, il n’authentifie personne et n’ouvre aucune session. Le danger tient à ce qu’il rend joignable, pas à ce qu’il autorise.

Sans cloisonnement du réseau de déploiement, n’importe quel poste du segment utilisateur peut répondre avant le serveur légitime et servir sa propre image de démarrage : la machine exécute alors, avant même que son système n’existe, un code que personne n’a validé. Les images légitimes, avec les paramètres d’installation qu’elles embarquent, se téléchargent de la même façon par quiconque sait formuler la demande. Sans inventaire des interfaces, celles qu’ajoutent un VPN, un conteneur ou un partage de connexion depuis un téléphone créent des chemins de sortie qu’aucune règle ne décrit. Et le réveil à distance, laissé ouvert, rallume sagement des machines que l’on croyait éteintes, donc hors de danger.

Pour communiquer, une machine a besoin d’une carte réseau, c’est-à-dire d’un composant physique relié à un câble ou à une antenne. Chaque carte porte une adresse matérielle. Le système d’exploitation ne parle pas directement à la carte : il passe par un pilote, un petit programme qui traduit ses ordres en instructions que la carte comprend. Le système présente ensuite la carte sous la forme d’une interface, un nom auquel on attribue une adresse réseau. Il existe aussi des interfaces sans matériel derrière : l’interface de bouclage, qui permet à la machine de se parler à elle-même, et les interfaces créées par un tunnel, une connexion privée à distance ou un conteneur. Si le pilote manque, aucune interface n’apparaît et aucun réglage réseau ne peut fonctionner. La configuration peut être manuelle ou automatique : au démarrage, la machine demande alors une adresse à un serveur du réseau. Certaines machines vont plus loin et démarrent entièrement par le réseau : elles obtiennent une adresse, puis l’emplacement d’un système à télécharger, et le lancent sans rien lire sur leur disque. Un message spécial peut même allumer à distance une machine éteinte. Ces méthodes facilitent l’installation de nombreux postes, mais si le réseau de déploiement est ouvert à tous, n’importe qui peut y proposer un faux système ou récupérer ce qui y est distribué.

À lire aussi

Pages voisines

: les deux pages se citent l’une l’autre.