Introduction
Ce document décrit la configuration et la mise en service du provisionnement automatique (ZTP) sur les commutateurs de la gamme Cisco Catalyst 9000.
Conditions préalables
Exigences
Cisco vous recommande de prendre connaissance des rubriques suivantes :
- Configuration du serveur DHCP (Dynamic Host Configuration Protocol) sur le commutateur
- Notions de base du code Python
- Notions de base sur le service HTTP/TFTP
Exigences de licence
- La licence Network Advantage ou Network Essentials doit être active.
Plates-formes prises en charge
- Commutateurs de la gamme Catalyst 9300 exécutant la version 16.5.1a
- Commutateurs de la gamme Catalyst 9500 exécutant la version 16.5.1a
- Commutateurs Catalyst 9400 exécutant la version 16.6.2
Remarque : cette fonctionnalité n'est pas prise en charge dans C9600.
Composants utilisés
Les informations contenues dans ce document sont basées sur les versions de matériel et de logiciel suivantes :
- Commutateur Cisco Catalyst 9300 sur Cisco IOS® XE 17.6.4
- Le commutateur Cisco Catalyst 3850 fait office de serveur DHCP avec une configuration en option 67
- L'hôte final installé avec le service HTTP contient un fichier Python.
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. Si votre réseau est en ligne, assurez-vous de bien comprendre l’incidence possible des commandes.
Informations générales
La mise en service automatique (ZTP) permet de mettre en service les périphériques réseau avec précision en quelques minutes et sans intervention manuelle.
Diagramme du réseau
Configuration et étapes de base du provisionnement sans intervention
Fonctionnement de ZTP (étapes détaillées)
ZTP automatise la configuration des commutateurs de la gamme Catalyst 9000 sans configuration initiale lors de son introduction sur le réseau existant. Cela se produit sans aucune intervention manuelle. Les étapes détaillées sont expliquées ici :
Étape 1. Connexion du nouveau commutateur
Connectez un nouveau commutateur à l'infrastructure existante et mettez le périphérique sous tension. Le commutateur démarre sans configuration de démarrage.
Étape 2. Initiation ZTP
Le processus ZTP est lancé automatiquement par le commutateur.
Étape 3. Requête DHCP
Le commutateur envoie un message de détection DHCP.
Étape 4. Réponse DHCP
Le serveur DHCP répond avec une offre qui inclut l'option 67, avec l'adresse IP et l'URL du serveur HTTP.
Étape 5. URL HTTP
Le commutateur reçoit l'offre et obtient une adresse IP pour sa propre communication. Il reçoit également l'adresse IP du serveur HTTP et l'URL complète pour télécharger le fichier ZTP.py.
Étape 6. Télécharger
Le commutateur accède au serveur HTTP et télécharge le ZTP.py
fichier.
Étape 7. Guestshell
Le commutateur active automatiquement le shell d'invité.
Étape 8. Déploiement des configurations
Le commutateur exécute le fichier Python et les configurations sont appliquées automatiquement.
Étape 9. Succès
Le commutateur détruit le guestshell et le messagescript execution is a success
s'affiche.
Configuration
Configuration du service HTTP
Étape 1. Installer le service HTTP dans l'hôte final (exemple Linux)
sudo apt update
sudo apt install apache2
Étape 2. Créer un fichier Python ztp_http.py
Si un problème d'autorisation survient, utilisezchmod 777
afin de donner une autorisation complète au fichier.
Le fichier Python contient le code fait de ces tâches :
1. Commandes show.
2. Configuration du bouclage.
3. Vérification de la configuration.
Code Python
#Importing cli module
import cli
print "\n\n Running show version \n\n"
cli.executep('show version')
print "\n\n Configure a Loopback Interface \n\n"
cli.configurep(["interface loop 25", "ip address 192.168.0.25 255.255.255.255", "end"])
print "\n\n Running show ip interface brief \n\n"
cli.executep('show ip int brief | i up')
print "\n\n ZTP is success \n\n"
Emplacement du fichier python.
Ce fichier doit être stocké sous /var/www/html
dans une machine Linux.
vm: /var/www/html$ ls -l ztp_http.py
-rwxrwxrwx 1 root root 346 Apr 04 14:14 ztp_http.py
Étape 3. Vérification du service HTTP et du port d'écoute
Utilisez la commande service pour vérifier si le service HTTP est démarré et en cours d'exécution.
vm: /var/www/html$ sudo service apache2 status
Active: active (running)
Vérifiez avec quel port le service HTTP écoute en ce moment.
vm: /var/www/html$ sudo netstat -anp | grep apache
tcp6 0 :::80 :::* LISTEN 1998/apache2 <<<< Listens at 80
Étape 4. Vérification du numéro de port par le navigateur
Vérifiez si le fichier peut être téléchargé via un navigateur Web.
1. Ouvrez n'importe quel navigateur dans la même machine (par exemple, Linux).
2. Entrez cette URL dans la barre de recherche : localhost:80/ztp_http.py
3. Téléchargements de fichiers automatiquement.
Configuration du service DHCP
Étape 1. Configuration de l'interface de provisionnement (nouveau périphérique)
Le nouveau commutateur doit être connecté à G1/0/1.
enable
configure terminal
interface g1/0/1
description New_9300_switch
switchport
switchport mode access
switchport access vlan 1
Étape 2. Configuration de l'interface connectée du serveur HTTP
Le serveur HTTP (Linux) est directement connecté au commutateur 3850 (par exemple, l'interface G1/0/2).
enable
configure terminal
interface g1/0/2
description Linux_is_connected_here
switchport
switchport mode access
switchport access vlan 1
Étape 3. Configuration de l'étendue DHCP
Exemple de configuration de pool DHCP avec l'option 67.
enable
configure terminal
ip dhcp pool ZTP_Pool
network 10.0.0.0 255.255.255.0
default-router 10.0.0.1
option 67 ascii http://10.0.0.2:80/ztp_http.py
end
Vérification
Aucune procédure de vérification n'est disponible pour cette configuration.
Journaux de la console de travail
No startup-config, starting autoinstall/pnp/ztp...
Autoinstall will terminate if any input is detected on console
--- System Configuration Dialog ---
Would you like to enter the initial configuration dialog? [yes/no]: <<<< Do not provide any input during this time.
Autoinstall trying DHCPv6 on Vlan1
Autoinstall trying DHCPv4 on Vlan1
Acquired IPv4 address 10.0.0.10 on Interface Vlan1
Received following DHCPv4 options:
bootfile : http://10.0.0.2:80/ztp_http.py
stop Autoip process
OK to enter CLI now...
pnp-discovery can be monitored without entering enable mode
Entering enable mode will stop pnp-discovery
Attempting bootfile http://10.0.0.2:80/ztp_http.py
Loading http://10.0.0.2:80/ztp_http.py
Loading http://10.0.0.2:80/ztp_http.py day0guestshell activated successfully
Current state is: ACTIVATED
day0guestshell started successfully
Current state is: RUNNING
Guestshell enabled successfully
Running show version <<<< show command executed
Cisco IOS XE Software, Version 17.06.04
Cisco IOS Software [Bengaluru], Catalyst L3 Switch Software (CAT9K_IOSXE), Version 17.6.4, RELEASE SOFTWARE (fc1)
<snipped>
Model Number : C9300L-48T-4X
System Serial Number : FOC2531LGM8
CLEI Code Number :
Switch Ports Model SW Version SW Image Mode
------ ----- ----- ---------- ---------- ----
* 1 53 C9300L-48T-4X 17.06.04 CAT9K_IOSXE BUNDLE
Configure a Loopback interface <<<< configuration
Line 1 SUCCESS: interface loop 25
Line 2 SUCCESS: ip address 192.168.0.25 255.255.255.255
Line 3 SUCCESS: end
Running show ip int brief <<<< Config Verification
Vlan1 10.0.0.10 YES DHCP up up
Vlan4094 192.168.2.1 YES manual up down
GigabitEthernet0/0 unassigned YES unset up up
GigabitEthernet1/0/2 unassigned YES unset up up
GigabitEthernet1/0/3 unassigned YES unset up up
Ap1/0/1 unassigned YES unset up up
Loopback25 192.168.0.25 YES other up up
ZTP is success
Guestshell destroyed successfully
Script execution success! <<<< Success
Dépannage
Cette section fournit des informations que vous pouvez utiliser pour dépanner votre configuration.
Problèmes courants
1. Présence d'un autre serveur DHCP dans le réseau
No startup-config, starting autoinstall/pnp/ztp...
Autoinstall will terminate if any input is detected on console
--- System Configuration Dialog ---
Would you like to enter the initial configuration dialog? [yes/no]:
Autoinstall trying DHCPv6 on Vlan1
Autoinstall trying DHCPv4 on Vlan1
Acquired IPv4 address 192.168.45.117 on Interface Vlan1 <<<< Gets Different IP from another DHCP server.
Received following DHCPv4 options:
hostname : Switch
stop Autoip process
OK to enter CLI now...
pnp-discovery can be monitored without entering enable mode
Entering enable mode will stop pnp-discovery
Guestshell destroyed successfully
stop Autoip process
% Please answer 'yes' or 'no'.
Would you like to enter the initial configuration dialog? [yes/no]: no
2. Erreur de code Python
--- System Configuration Dialog ---
Would you like to enter the initial configuration dialog? [yes/no]:
Autoinstall trying DHCPv6 on Vlan1
Autoinstall trying DHCPv4 on Vlan1
Acquired IPv4 address 10.106.37.69 on Interface Vlan1
Received following DHCPv4 options:
bootfile : http://10.106.37.59:80/ztp_http.py
stop Autoip process
OK to enter CLI now...
pnp-discovery can be monitored without entering enable mode
Entering enable mode will stop pnp-discovery
Attempting bootfile http://10.106.37.59:80/ztp_http.py
Loading http://10.106.37.59:80/ztp_http.py
Loading http://10.106.37.59:80/ztp_http.py day0guestshell activated successfully
Current state is: ACTIVATED
day0guestshell started successfully
Current state is: RUNNING
Guestshell enabled successfully
File "/bootflash/guest-share/downloaded_script.py", line 1
print "\n\n Running show version \n\n"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("\n\n Running show version \n\n")? <<<< Code Error
Guestshell destroyed successfully
Script execution success!
3. Numéro de port du service HTTP
Le service HTTP écoute sur différents ports, par exemple 8080, mais la configuration DHCP de l'option 67 pointe vers 80.
enable
configure terminal
ip dhcp excluded-address 10.0.0.2
ip dhcp pool ZTP_Pool
network 10.0.0.0 255.255.255.0
default-router 10.0.0.1
option 67 ascii http://10.0.0.2:80/ztp_http.py <<<< Change to 8080
4. Adresse IP en double
Vérifiez l'étendue DHCP et excluez l'adresse IP attribuée au serveur HTTP.
enable
configure terminal
ip dhcp excluded-address 10.0.0.2 <<<< Exclude HTTP server address.
ip dhcp pool ZTP_Pool
network 10.0.0.0 255.255.255.0
default-router 10.0.0.1
option 67 ascii http://10.0.0.2:80/ztp_http.py
5. Vérifiez le service HTTP, arrêtez et redémarrez
vm: /var/www/html$ sudo service apache2 stop
vm: /var/www/html$ sudo service apache2 start
vm: /var/www/html$ sudo service apache2 status
Exemples de détails de paquets
Résumé d'échange HTTP :
10.0.0.10 10.0.0.2 HTTP 183 GET /http_ztp.py HTTP/1.1 <<<< HTTPGETrequest
10.0.0.2 10.0.0.10 HTTP 245 HTTP/1.1 200 OK (text/x-python) <<<< Response
Réponse HTTP détaillée :
Hypertext Transfer Protocol
HTTP/1.1 200 OK\r\n
Content-Type: text/x-python\r\n
Content-Length: 20\r\n
Date: Tue, 04 Apr 2023 12:24:02 GMT\r\n
Connection: keep-alive\r\n
Keep-Alive: timeout=5\r\n
\r\n
[HTTP response 1/2]
[Time since request: 0.204568243 seconds]
[Request in frame: 21]
[Next request in frame: 25]
[Next response in frame: 26]
[Request URI: http://10.0.0.2:80/http_ztp.py] >>>> URL