Introducción
Este documento describe la configuración y el aprovisionamiento de Zero Touch Provisioning (ZTP) en switches Catalyst de Cisco serie 9000.
Prerequisites
Requirements
Cisco recomienda que tenga conocimiento sobre estos temas:
- Configuración del servidor de protocolo de configuración dinámica de host (DHCP) en el switch
- Fundamentos del código Python
- Conceptos básicos del servicio HTTP/TFTP
Requisitos de Licencia
- Network Advantage o Network Essentials License deben estar activos.
Plataformas Soportadas
- Catalyst 9300 Series Switches que ejecutan la versión 16.5.1a
- Catalyst 9500 Series Switches que ejecutan la versión 16.5.1a
- Catalyst 9400 Series Switches que ejecutan la versión 16.6.2
Nota: C9600 no admite esta función.
Componentes Utilizados
La información que contiene este documento se basa en las siguientes versiones de software y hardware.
- Switch Cisco Catalyst 9300 en Cisco IOS® XE 17.6.4
- El switch Cisco Catalyst 3850 actúa como servidor DHCP con la configuración de la opción 67
- El host final instalado con el servicio HTTP contiene un archivo Python.
La información que contiene este documento se creó a partir de los dispositivos en un ambiente de laboratorio específico. Todos los dispositivos que se utilizan en este documento se pusieron en funcionamiento con una configuración verificada (predeterminada). Si tiene una red en vivo, asegúrese de entender el posible impacto de cualquier comando.
Antecedentes
El aprovisionamiento sin intervención del usuario (ZTP) se utiliza para aprovisionar dispositivos de red con precisión en minutos y sin necesidad de intervención manual.
Diagrama de la red
Configuración y pasos básicos del aprovisionamiento sin intervención del usuario
Funcionamiento de ZTP (pasos detallados)
ZTP automatiza la configuración de los switches Catalyst serie 9000 sin configuración de inicio cuando se introduce en la red existente. Esto sucede sin ninguna intervención manual. A continuación se explican los pasos detallados:
Paso 1. Conexión del switch nuevo
Conecte un nuevo switch a la infraestructura existente y encienda el dispositivo. El switch arranca sin configuración de inicio.
Paso 2. Iniciación de ZTP
El switch inicia automáticamente el proceso ZTP.
Paso 3. Solicitud DHCP
El switch envía un mensaje de detección de DHCP.
Paso 4. Respuesta DHCP
El servidor DHCP responde con una oferta que incluye la opción 67, que tiene la dirección IP y URL del servidor HTTP.
Paso 5. URL HTTP
El switch recibe la oferta y obtiene una dirección IP para su propia comunicación. También recibe la dirección IP del servidor HTTP y la URL completa para descargar el archivo ZTP.py.
Paso 6. Descargar
El switch llega al servidor HTTP y descarga el ZTP.py
archivo.
Paso 7. Concha de invitados
El switch activa el shell de invitado automáticamente.
Paso 8. Implementación de configuraciones
El switch ejecuta el archivo Python y las configuraciones se aplican automáticamente.
Paso 9. Éxito
El switch destruye el shell del invitado yscript execution is a success
se muestra el mensaje.
Configuración
Configuración del servicio HTTP
Paso 1. Instalación del servicio HTTP en el host final (ejemplo de Linux)
sudo apt update
sudo apt install apache2
Paso 2. Crear archivo Python ztp_http.py
Si surge algún problema con los permisos, utilicechmod 777
para dar permiso completo al archivo.
El archivo de Python contiene el código formado por estas tareas:
1. Mostrar comandos.
2. Configuración de loopback.
3. Verificación de la configuración.
Código 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"
Ubicación del archivo python.
Este archivo debe estar almacenado en /var/www/html
en la máquina Linux.
vm: /var/www/html$ ls -l ztp_http.py
-rwxrwxrwx 1 root root 346 Apr 04 14:14 ztp_http.py
Paso 3. Verificar el servicio HTTP y el puerto de escucha
Utilice el comando service para comprobar si el servicio HTTP está iniciado y en ejecución en este momento.
vm: /var/www/html$ sudo service apache2 status
Active: active (running)
Verifique con qué puerto está escuchando el servicio HTTP en este momento.
vm: /var/www/html$ sudo netstat -anp | grep apache
tcp6 0 :::80 :::* LISTEN 1998/apache2 <<<< Listens at 80
Paso 4. Verificación por el explorador del número de puerto
Compruebe si el archivo se puede descargar a través del explorador web.
1. Abra cualquier navegador dentro de la misma máquina (por ejemplo, Linux).
2. Introduzca esta URL en la barra de búsqueda: localhost:80/ztp_http.py
3. Descarga de archivos automáticamente.
Configuración del servicio DHCP
Paso 1. Configuración de la interfaz de aprovisionamiento (nuevo dispositivo)
Se espera que el nuevo switch esté conectado a G1/0/1.
enable
configure terminal
interface g1/0/1
description New_9300_switch
switchport
switchport mode access
switchport access vlan 1
Paso 2. Configuración de la Interfaz Conectada del Servidor HTTP
El servidor HTTP (Linux) está conectado directamente al switch 3850 (por ejemplo, la interfaz G1/0/2).
enable
configure terminal
interface g1/0/2
description Linux_is_connected_here
switchport
switchport mode access
switchport access vlan 1
Paso 3. Configuración del alcance DHCP
Ejemplo de configuración del conjunto DHCP con la opción 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
Verificación
Actualmente, no hay un procedimiento de verificación disponible para esta configuración.
Registros de consola de trabajo
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
Troubleshoot
En esta sección encontrará información que puede utilizar para solucionar problemas de configuración.
Problemas comunes
1. Presencia de otro servidor DHCP en la red
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. Error de código de 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. Número de puerto del servicio HTTP
El servicio HTTP escucha en diferentes puertos, como 8080, pero la configuración DHCP de la opción 67 apunta a 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. Dirección IP duplicada
Verifique el alcance de DHCP y excluya la dirección IP asignada al servidor 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. Verifique el servicio HTTP, deténgalo y reinicie
vm: /var/www/html$ sudo service apache2 stop
vm: /var/www/html$ sudo service apache2 start
vm: /var/www/html$ sudo service apache2 status
Ejemplos de detalles de paquetes
Resumen de intercambio 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
Respuesta HTTP detallada:
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