Date de publication du RFC : Décembre 2020
Auteur(s) du RFC : B. Volz (Cisco), T. Mrugalski (ISC), CJ. Bernardos (UC3M)
Chemin des normes
Réalisé dans le cadre du groupe de travail IETF dhc
Première rédaction de cet article le 2 décembre 2020
L'utilisation de DHCP pour attribuer des adresses IP est bien connue. Ce nouveau RFC spécifie comment utiliser DHCP pour attribuer des adresses MAC.
Dans quels cas est-ce utile ? La principale motivation vient des environnements virtualisés où on crée des quantités industrielles de machines virtuelles. C'est le cas chez les gros hébergeurs, par exemple, ou bien dans les organisations qui ont d'immenses fermes de machines. Si les adresses MAC de ces machines sont attribuées au hasard, le risque de collision est important, d'autant plus qu'il n'y a pas de protocole de détection de ces collisions. (Sur le risque de collision, notamment en raison du paradoxe de l'anniversaire, voir le RFC 4429, annexe A.1.) Bien sûr, les adresses MAC n'ont pas besoin d'être uniques au niveau mondial, mais la taille de certains réseaux L2 fait que la collision est un réel problème. Un autre scénario est celui des objets connectés (RFC 7228), où leur nombre pourrait menacer l'espace d'adressage OUI. L'idée est donc de récupérer ces adresses MAC auprès d'un serveur DHCP, ce qui évitera les collisions.
En effet, le protocole DHCP, normalisé pour sa version IPv6 dans le RFC 8415, ne sert pas qu'à attribuer des adresses IP. On peut s'en servir pour n'importe quel type de ressources. Et il offre toutes les fonctions nécessaires pour gérer ces ressources, et de nombreuses mises en œuvre déjà bien testées. Notre RFC va donc s'appuyer dessus pour les adresses MAC de 48 bits (EUI-48) d'IEEE 802 (et peut-être dans le futur pour d'autres types d'adresses).
Dans ces adresses de 48 bits, un bit nous intéresse particulièrement, le U/L. Comme son nom l'indique (U = universal, L = local), il indique si l'adresse suit le mécanisme d'allocation de l'IEEE (et est donc a priori unique au niveau mondial) ou bien si l'adresse est gérée selon des règles locales. Les adresses allouées via DHCP seront en général des adresses à gestion locale. Étant purement locales (aucune garantie quant à leur unicité), elles ne doivent pas être utilisées pour fabriquer le DUID - DHCP Unique Identifier - de DHCP (cf. RFC 8415, section 11). Notez aussi que la norme IEEE 802c découpe l'espace local en quatre parties (détails dans l'annexe A du RFC ou, pour les courageuses et les courageux, dans la norme 802c). Pendant qu'on parle de l'IEEE, leur norme 802 1CQ prévoit un mécanisme d'affectation des adresses MAC, qui peut être un concurrent de celui de ce RFC. Le RFC 8948 fournit un moyen de choisir l'un de ces quadrants.
Un peu de terminologie est nécessaire pour suivre ce RFC (section 3). Un bloc d'adresses est une suite consécutive d'adresses MAC. IA_LL désigne une Identity Association for Link-Layer Address et c'est une option DHCP (code 138) qui va beaucoup servir. Autre option DHCP, LLADDR (code 139) qui est l'option qui va servir à transporter les adresses MAC.
La section 4 du RFC présente les principes de déploiement de la solution. Il y a notamment deux scénarios envisagés :
Bon, sinon, le fonctionnement de l'allocation d'adresses MAC
marche à peu près comme celui de l'allocation d'adresses IP. Le
client DHCP envoie un message Solicit
incluant
une option IA_LL qui contient elle-même une option LLADDR qui
indique le type d'adresse souhaitée et peut aussi inclure une
suggestion, si le client a une idée de l'adresse qu'il voudrait. Le
serveur répond avec Advertise
contenant
l'adresse ou le bloc d'adresses alloué (qui ne sont pas forcément
ceux suggérés par le client, comme toujours avec DHCP). Si
nécessaire, il y aura ensuite l'échange habituel
Request
puis Reply
. Bref,
du DHCPv6 classique. Le client devra renouveler l'allocation au
bout du temps indiqué dans le bail (le serveur peut toujours donner
l'adresse sans limite de temps, cf. RFC 8415,
section 7.7). Le client peut explicitement abandonner l'adresse,
avec un message Release
. On l'a dit, ça se
passe comme pour les adresses IP.
Les fanas du placement exact des bits liront la section 10, où
est décrit l'encodage de l'option IA_LL et de la « sous-option »
LLADDR. C'est là qu'on trouvera l'indication des blocs d'adresses
MAC, encodés par la première adresse puis la taille du bloc
(-1). Ainsi, 02:04:06:08:0a
/ 3 indique un bloc
qui va de 02:04:06:08:0a
à
02:04:06:08:0d
. Pendant qu'on parle de bits,
notez que les bits indiquant diverses caractéristiques de l'adresse
MAC figurent dans le premier octet, et que la transmission se fait
en commençant par le bit le moins significatif (IEEE 802 est
petit-boutien pour les bits). Ainsi,
l'adresse citée plus haut, 02:04:06:08:0a
a un
premier octet qui vaut 2, soit 00000010 en binaire, ce qui sera
transmis comme 01000000. Le premier bit est le M, qui indique ici
qu'il s'agit d'une adresse
unicast, le second est
U/L, indiquant ici que c'est bien une adresse locale, les deux bits
suivants sont une nouveauté de IEEE
802c et indiquent le quadrant des adresses (cf. annexe A du
RFC, puis le RFC 8948).
Quelques conseils pour les administrateurs des serveurs DHCP qui feront cette allocation d'adresses MAC figurent en section 11 du RFC. Par exemple, il ne faut allouer que des adresses locales (bit U/L à 1).
Les deux nouvelles options, IA_LL et LLADDR ont été mises dans le registre IANA.
Pour finir, l'annexe A du RFC résume la norme IEEE 802c. Dans la norme IEEE 802 originale, il y avait, comme indiqué plus haut, un bit U/L qui disait si l'adresse était gérée selon des règles locales (et n'était donc pas forcément unique au niveau mondial). 802c ajoute à ces adresses locales la notion de quadrant, découpant l'espace local en quatre. Après le bit M (unicast ou groupe) et le bit U/L (local ou pas). deux bits indiquent dans quel quadrant se trouve l'adresse :
02:04:06:08:0a
et suivantes sont dans ce
quadrant),Un mécanisme de sélection du quadrant est normalisé dans le RFC 8948.
Pour l'instant, je ne connais pas de mise en œuvre de ce RFC que ce soit côté client ou serveur.
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)