Contenido

Introducción

Prerequisites

Requirements

Requisitos de Licencia

Plataformas Soportadas

Componentes Utilizados

Antecedentes

Diagrama de la red

Funcionamiento de ZTP (pasos detallados)

Paso 1. Conexión del switch nuevo

Paso 2. Iniciación de ZTP

Paso 3. Solicitud DHCP

Paso 4. Respuesta DHCP

Paso 5. URL HTTP

Paso 6. Descargar

Paso 7. Concha de invitados

Paso 8. Implementación de configuraciones

Paso 9. Éxito

Configuración

Configuración del servicio HTTP

Paso 1. Instalación del servicio HTTP en el host final (ejemplo de Linux)

Paso 2. Crear archivo Python ztp_http.py

Paso 3. Verificar el servicio HTTP y el puerto de escucha

Paso 4. Verificación por el explorador del número de puerto

Configuración del servicio DHCP

Paso 1. Configuración de la interfaz de aprovisionamiento (nuevo dispositivo)

Paso 2. Configuración de la Interfaz Conectada del Servidor HTTP

Paso 3. Configuración del alcance DHCP

Verificación

Registros de consola de trabajo

Troubleshoot

Problemas comunes

1. Presencia de otro servidor DHCP en la red

2. Error de código de Python

3. Número de puerto del servicio HTTP

4. Dirección IP duplicada

5. Verifique el servicio HTTP, deténgalo y reinicie

Ejemplos de detalles de paquetes

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 successse 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 777para 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