J’ai testé pour vous : Zero-touch deployment – Que faire quand auto-smartports ne fait pas ce que je veux?
4 min read
Voici le premier post d’une longue série j’espère concernant ce que l’on appelle “Zero-touch deployment”, c’est-à-dire comment on peut déployer un réseau qui va s’auto-configurer. Cela est particulièrement utile au niveau des nombreux commutateurs d’accès pour lesquels on se passerait bien volontiers de passer du temps à les configurer. On branche le switch et celui-ci va télécharger le bon IOS, la bonne configuration, et les ports seront ensuite automatiquement configurés en fonction de l’équipement connecté et l’authentification faite sur le port. On va parler de fonctionnalités comme Smart-Install, Auto Smartports, ISE, radius, 802.1X, etc. mais n’anticipons pas trop. Ici je vais me concentrer sur Auto Smartports et comment “customiser” cette fonctionnalité…
Auto Smartports est la fonctionnalité Cisco qui va permettre d’appliquer automatiquement des configurations sur un port en fonction de l’équipement qui va être connecté. Des règles de profiling sont définies par défaut dans l’IOS mais ne font pas toujours ce que l’on veut… On peut même avoir des scénarios dans lesquels le profiling fait sur l’équipement n’est pas forcément celui escompté. Ce post a pour objectif de montrer la souplesse que l’on peut avoir avec Auto Smartports et qui va nous permettre de répondre à la plupart des cas de figure rencontrés.
J’ai fait tous les tests ci-dessous sur un 4500 en Sup6L-E en 15.1(1)SG. Afin d’illustrer une erreur de profiling de Auto Smartports, je branche sur le port GigabitEthernet 1/11 un routeur Cisco 2951 et l’on constate que l’équipement est reconnu comme un commutateur:
4507-2#sh macro auto interface gigabitEthernet 1/11 Global Auto Smart Port Status Auto Smart Ports Enabled Fallback : CDP Disabled Interface Auto Smart Port Fallback Macro Description(s) -------------------------------------------------------------- Gi1/11 TRUE None CISCO_SWITCH_EVENT
Avec la configuration ci-dessous pour la macro Switch:
interface GigabitEthernet1/11 switchport mode trunk auto qos trust macro description CISCO_SWITCH_EVENT service-policy input AutoQos-4.0-Input-Policy service-policy output AutoQos-4.0-Output-Policy end
Vous constaterez que j’ai bien connecté un routeur 2951 sur le port en question:
4507-2#sh cdp neighbors | i 1/11 Gig 1/11 145 R S I CISCO2951 Gig 0/1
Alors quelle est l’origine du problème? Auto Smartports se base sur 2 composantes:
- Le Device sensor, qui permet de récupérer des informations de profiling du device localement (via MAC, CDP, LLDP, DHCP). Ces informations sont brutalement récupérées sur le routeur et associées à chaque port.
- Le Device classifier, qui va déterminer le type de matériel à partir des informations recueillies par device sensor, et qui va ensuite appliquer les bonnes macros (en théorie). Mais devant le nombre d’équipements en jeu des mauvaises décisions peuvent être prises par le device classifier aussi il faut pouvoir prendre le contrôle.
Voyons quelles sont les options pour résoudre un problème de profiling et voyons quelle souplesse on a sur le déploiement d’Auto-Smartports.
Rajouter une règle par adresse MAC
La technique consiste à définir des groupes d’adresses MAC (en spécifiant les MAC ou les OUI) qui permettront de lancer des macros. Quand une adresse MAC est vue sur un port comme appartenant à un groupe alors on va lancer la macro correspondante. Ci-dessous je configure un groupe d’adresse MAC appelé MAC-MAC qui contient l’adresse MAC de mon MAC 🙂
macro auto mac-address-group MAC-MAC mac-address list C82A.142D.A5FD
Ensuite je définis la macro qui va être appliquée quand l’adresse MAC est vue sur un port. J’aurais également pu appeler une fonction déjà existante dans le système mais mon objectif ici est de montrer toute la souplesse permise par auto smartports.
macro auto execute MAC-MAC { if [[ $LINKUP -eq YES ]] then conf t interface $INTERFACE macro description $TRIGGER exit end fi if [[ $LINKUP -eq NO ]] then conf t interface $INTERFACE no macro description exit end fi }
Je shut et no shut le port et je vois que la bonne macro est appliquée sur le port 1/12 où j’ai connecté mon laptop.
4507-2#sh macro auto interface gi1/12 Global Auto Smart Port Status Auto Smart Ports Enabled Fallback : CDP Disabled Interface Auto Smart Port Fallback Macro Description(s) -------------------------------------------------------------- Gi1/12 TRUE None MAC-MAC
Et on observe que la configuration du port est mise à jour en conséquence… Pas grand chose dans la config: à vous de mettre ce que vous voulez dans vos scripts!
interface GigabitEthernet1/12 macro description MAC-MAC end
Ici je peux donc simplement créer des nouvelles règles. Evidemment cela suppose de connaître les adresses MAC ou les OUI des systèmes concernés ce qui n’est pas toujours simple. Aussi cette méthode ne pourra pas toujours être déployée. Les méthodes suivantes pourront peut-être vous aider.
Rajouter une règle sur le nom du voisin CDP
La première étape consiste à récupérer le nom exact du neighbor CDP.
Device ID: C2951-1.test.cisco.fr Entry address(es): IP address: 10.153.0.51 IPv6 address: A::A (global unicast) IPv6 address: FE80::7281:5FF:FEF6:7DF1 (link-local) Platform: Cisco CISCO2951/K9, Capabilities: Router Switch IGMP Interface: GigabitEthernet1/11, Port ID (outgoing port): GigabitEthernet0/1 Holdtime : 160 sec
Attention s’il y a des “espaces” cachés, il faut récupérer tous les cartactères avant la “virgule”. Ensuite on définit un trigger qui va déclencher une macro sur détection de ce voisin CDP.
macro auto trigger CISCO_2951 device Cisco CISCO2951/K9
Et en dernier lieu je créé la macro CISCO_2951 qui va être appelée par le trigger précédemment défini.
macro auto execute CISCO_2951 { if [[ $LINKUP -eq YES ]] then conf t interface $INTERFACE macro description $TRIGGER exit end fi if [[ $LINKUP -eq NO ]] then conf t interface $INTERFACE no macro description exit end fi }
Vous noterez que la macro ne fait aucune configuration: elle se contente d’appliquer un nom de macro sur l’interface. A vous de configurer ce que vous voulez…
Je shut / no shut le port et la bonne macro s’applique:
4507-2#sh macro auto interface gigabitEthernet 1/11 Global Auto Smart Port Status Auto Smart Ports Enabled Fallback : CDP Disabled Interface Auto Smart Port Fallback Macro Description(s) -------------------------------------------------------------- Gi1/11 TRUE None CISCO_2951
Jetons un coup d’oeil à la configuration du port
interface GigabitEthernet1/11 macro description CISCO_2951 end
Cette possibilité offerte depuis peu en IOS et pas encore documentée je crois permet donc de faire plus ou moins tout ce que l’on veut sous réserve que l’équipement distant parle CDP.
Déporter le profiling sur serveur radius distant (ISE) qui appliquera la bonne macro
Cette option est à mon avis la meilleure puisqu’elle permet de centraliser la prise de décision sur un serveur ISE (Identity Service Engine) qui offre une console de management simplifiée. Au delà du profiling ce serveur permettra également la gestion de l’authentification 802.1X, le contrôle de posture, et la définition des règles sur tout le réseau WiFi. Promis je posterai un article avec des tests poussés sur ISE.
1 commentaires