Mise à jour et configuration automatique pour Juniper
Vincent Bernat
La documentation de Juniper sur ZTP explique comment configurer le serveur ISC DHCP pour mettre à niveau et configurer automatiquement au premier démarrage un équipement Juniper. Toutefois, la configuration proposée pourrait être un brin plus élégante. Cette note explique comment.
En bref
Ne redéfinissez pas l’option 43. Utilisez plutôt la
directive vendor-option-space
.
Lors du premier démarrage, un équipement Juniper demande son adresse IP via un message DHCP discovery, puis demande des paramètres supplémentaires pour l’autoconfiguration via un message DHCP request :
Dynamic Host Configuration Protocol (Request) Message type: Boot Request (1) Hardware type: Ethernet (0x01) Hardware address length: 6 Hops: 0 Transaction ID: 0x44e3a7c9 Seconds elapsed: 0 Bootp flags: 0x8000, Broadcast flag (Broadcast) Client IP address: 0.0.0.0 Your (client) IP address: 0.0.0.0 Next server IP address: 0.0.0.0 Relay agent IP address: 0.0.0.0 Client MAC address: 02:00:00:00:00:01 (02:00:00:00:00:01) Client hardware address padding: 00000000000000000000 Server host name not given Boot file name not given Magic cookie: DHCP Option: (54) DHCP Server Identifier (10.0.2.2) Option: (55) Parameter Request List Length: 14 Parameter Request List Item: (3) Router Parameter Request List Item: (51) IP Address Lease Time Parameter Request List Item: (1) Subnet Mask Parameter Request List Item: (15) Domain Name Parameter Request List Item: (6) Domain Name Server Parameter Request List Item: (66) TFTP Server Name Parameter Request List Item: (67) Bootfile name Parameter Request List Item: (120) SIP Servers Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server Parameter Request List Item: (43) Vendor-Specific Information Parameter Request List Item: (150) TFTP Server Address Parameter Request List Item: (12) Host Name Parameter Request List Item: (7) Log Server Parameter Request List Item: (42) Network Time Protocol Servers Option: (50) Requested IP Address (10.0.2.15) Option: (53) DHCP Message Type (Request) Option: (60) Vendor class identifier Length: 15 Vendor class identifier: Juniper-mx10003 Option: (51) IP Address Lease Time Option: (12) Host Name Option: (255) End Padding: 00
Il demande plusieurs options, notamment l’option 150 pour l’adresse du serveur TFTP et l’option 43 « VSIO » pour les informations spécifiques au fournisseur. Le serveur DHCP peut s’aider de l’option 60 pour déterminer les VSIO à envoyer. Pour les équipements Juniper, l’option 43 permet de coder le nom de l’image et le nom du fichier de configuration. Ils sont alors téléchargés à partir de l’adresse IP fournie dans l’option 150.
La documentation de Juniper sur ZTP fournit une configuration valide pour répondre à une telle requête. Toutefois, elle ne tire pas parti de la capacité du serveur ISC DHCP à prendre en charge plusieurs fournisseurs et redéfinit l’option 43 pour qu’elle soit spécifique à Juniper :
option NEW_OP-encapsulation code 43 = encapsulate NEW_OP;
Au lieu de cela, il est possible de définir un espace d’options pour Juniper, en utilisant un nom moins alambiqué, sans surcharger l’option 43 :
# Juniper vendor option space option space juniper; option juniper.image-file-name code 0 = text; option juniper.config-file-name code 1 = text; option juniper.image-file-type code 2 = text; option juniper.transfer-mode code 3 = text; option juniper.alt-image-file-name code 4 = text; option juniper.http-port code 5 = text;
Ensuite, lorsque vous devez définir ces sous-options, indiquez l’espace d’options à utiliser :
class "juniper-mx10003" { match if (option vendor-class-identifier = "Juniper-mx10003") { vendor-option-space juniper; option juniper.transfer-mode "http"; option juniper.image-file-name "/images/junos-vmhost-install-mx-x86-64-19.3R2-S4.5.tgz"; option juniper.config-file-name "/cfg/juniper-mx10003.txt"; }
Cette configuration renvoie la réponse suivante1 :
Dynamic Host Configuration Protocol (ACK) Message type: Boot Reply (2) Hardware type: Ethernet (0x01) Hardware address length: 6 Hops: 0 Transaction ID: 0x44e3a7c9 Seconds elapsed: 0 Bootp flags: 0x8000, Broadcast flag (Broadcast) Client IP address: 0.0.0.0 Your (client) IP address: 10.0.2.15 Next server IP address: 0.0.0.0 Relay agent IP address: 0.0.0.0 Client MAC address: 02:00:00:00:00:01 (02:00:00:00:00:01) Client hardware address padding: 00000000000000000000 Server host name not given Boot file name not given Magic cookie: DHCP Option: (53) DHCP Message Type (ACK) Option: (54) DHCP Server Identifier (10.0.2.2) Option: (51) IP Address Lease Time Option: (1) Subnet Mask (255.255.255.0) Option: (3) Router Option: (6) Domain Name Server Option: (43) Vendor-Specific Information Length: 89 Value: 00362f696d616765732f6a756e6f732d766d686f73742d69… Option: (150) TFTP Server Address Option: (255) End
L’utilisation de la directive vendor-option-space
permet de faire
coexister différentes implémentations de ZTP. Par exemple, vous pouvez
définir l’espace d’option pour PXE :
option space PXE; option PXE.mtftp-ip code 1 = ip-address; option PXE.mtftp-cport code 2 = unsigned integer 16; option PXE.mtftp-sport code 3 = unsigned integer 16; option PXE.mtftp-tmout code 4 = unsigned integer 8; option PXE.mtftp-delay code 5 = unsigned integer 8; option PXE.discovery-control code 6 = unsigned integer 8; option PXE.discovery-mcast-addr code 7 = ip-address; option PXE.boot-server code 8 = { unsigned integer 16, unsigned integer 8, ip-address }; option PXE.boot-menu code 9 = { unsigned integer 16, unsigned integer 8, text }; option PXE.menu-prompt code 10 = { unsigned integer 8, text }; option PXE.boot-item code 71 = unsigned integer 32; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; vendor-option-space PXE; option PXE.mtftp-ip 10.0.2.2; # […] }
Sur le même thème, ne surchargez pas non plus l’option 125 « VIVSO ». Consultez la note « Mise à jour et configuration automatique pour Cisco IOS » sur le sujet.
-
Wireshark sait comment décoder l’option 43 pour certains fournisseurs, grâce à l’option 60, mais pas pour Juniper. ↩︎