Contents

Introdução

Pré-requisitos

Requisitos

Requisitos de licença

Plataformas suportadas

Componentes Utilizados

Informações de Apoio

Diagrama de Rede

Operação do ZTP (etapas detalhadas)

Etapa 1. Conectar o novo switch

Etapa 2. Iniciação de ZTP

Etapa 3. Solicitação DHCP

Etapa 4. Resposta DHCP

Etapa 5. URL HTTP

Etapa 6. Download

Passo 7. Concha de convidado

Etapa 8. Implantação de configurações

Etapa 9. Sucesso

Configuração

Configurando o serviço HTTP

Etapa 1. Instalar o Serviço HTTP no Host Final (Exemplo Linux)

Etapa 2. Criar arquivo Python ztp_http.py

Etapa 3. Verificar Serviço HTTP e Porta de Escuta

Etapa 4. Verificação do número da porta pelo navegador

Configurando o serviço DHCP

Etapa 1. Configuração da interface de provisionamento (novo dispositivo)

Etapa 2. Configuração da Interface Conectada do Servidor HTTP

Etapa 3. Configuração de Escopo DHCP

Verificação

Logs do console de trabalho

Troubleshooting

Problemas comuns

1. Outra Presença do Servidor DHCP na Rede

2. Erro de Código Python

3. Número da Porta do Serviço HTTP

4. Endereço IP duplicado

5. Verificar o Serviço HTTP, Parar e Reiniciar

Amostras de detalhes do pacote

Introdução

Este documento descreve a configuração e o provisionamento Zero Touch Provisioning (ZTP) em Cisco Catalyst 9000 Series Switches.

Pré-requisitos

Requisitos

A Cisco recomenda que você tenha conhecimento destes tópicos:

- Configuração do servidor DHCP no switch

- Conceitos básicos do código Python

- Conceitos básicos do serviço HTTP/TFTP

Requisitos de licença

- A licença do Network Advantage ou do Network Essentials deve estar ativa.

Plataformas suportadas

- Catalyst 9300 Series Switches executando a versão 16.5.1a

- Catalyst 9500 Series Switches executando a versão 16.5.1a

- Catalyst 9400 Series Switches executando a versão 16.6.2

Observação: esse recurso não é suportado no C9600.

Componentes Utilizados

As informações neste documento são baseadas nestas versões de software e hardware:

- Switch Cisco Catalyst 9300 no Cisco IOS® XE 17.6.4

- O switch Cisco Catalyst 3850 atua como um servidor DHCP com configuração de opção 67

- O host final instalado com o serviço HTTP contém um arquivo Python.

As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se a rede estiver ativa, certifique-se de que você entenda o impacto potencial de qualquer comando.

Informações de Apoio

O ZTP (Zero Touch Provisioning) é usado para provisionar dispositivos de rede com precisão em minutos e sem qualquer intervenção manual.

Diagrama de Rede

Configuração e etapas básicas do provisionamento automatizado

Operação do ZTP (etapas detalhadas)

O ZTP automatiza a configuração dos Catalyst 9000 Series Switches sem configuração de inicialização quando é introduzido na rede existente. Isso acontece sem qualquer intervenção manual. As etapas detalhadas são explicadas aqui:

Etapa 1. Conectar o novo switch

Conecte um novo switch à infraestrutura existente e ligue o dispositivo. O switch é inicializado sem nenhuma configuração de inicialização.

Etapa 2. Iniciação de ZTP

O processo ZTP é iniciado automaticamente pelo switch.

Etapa 3. Solicitação DHCP

O switch envia uma mensagem de descoberta DHCP.

Etapa 4. Resposta DHCP

O servidor DHCP responde com uma oferta que inclui a opção 67, que tem o IP e o URL do servidor HTTP.

Etapa 5. URL HTTP

O switch recebe a oferta e obtém um endereço IP para sua própria comunicação. Ele também recebe o endereço IP do servidor HTTP e o URL completo para fazer download do arquivo ZTP.py.

Etapa 6. Download

O switch acessa o servidor HTTP e faz o download do ZTP.py arquivo.

Passo 7. Concha de convidado

O switch ativa o guestshell automaticamente.

Etapa 8. Implantação de configurações

O switch executa o arquivo Python e as configurações são aplicadas automaticamente.

Etapa 9. Sucesso

O switch destrói a concha de convidado escript execution is a successa mensagem é exibida.

Configuração

Configurando o serviço HTTP

Etapa 1. Instalar o Serviço HTTP no Host Final (Exemplo Linux)

sudo apt update

sudo apt install apache2

Etapa 2. Criar arquivo Python ztp_http.py

Se algum problema de permissão surgir, usechmod 777para conceder permissão completa ao arquivo.

O arquivo Python contém o código destas tarefas:

1. Comandos show.

2. Configuração de loopback.

3. Verificação da configuração.

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"

Localização do arquivo python.

Este arquivo deve ser armazenado em na máquina Linux/var/www/html.

vm: /var/www/html$ ls -l ztp_http.py

-rwxrwxrwx 1 root root 346 Apr 04 14:14 ztp_http.py

Etapa 3. Verificar Serviço HTTP e Porta de Escuta

Use o comando service para verificar se o serviço HTTP foi iniciado e está em execução agora.

vm: /var/www/html$ sudo service apache2 status

Active: active (running)

Verifique com qual porta o serviço HTTP está escutando agora.

vm: /var/www/html$ sudo netstat -anp | grep apache

tcp6 0 :::80 :::* LISTEN 1998/apache2               <<<< Listens at 80

Etapa 4. Verificação do número da porta pelo navegador

Verifique se o arquivo pode ser baixado pelo navegador da Web.

1. Abra qualquer navegador na mesma máquina (por exemplo, Linux).

2. Informe este URL na barra de pesquisa:  localhost:80/ztp_http.py

3. O arquivo é baixado automaticamente.

Configurando o serviço DHCP

Etapa 1. Configuração da interface de provisionamento (novo dispositivo)

Espera-se que o novo switch seja conectado a G1/0/1.

enable

configure terminal

interface g1/0/1

description New_9300_switch

switchport

switchport mode access

switchport access vlan 1

Etapa 2. Configuração da Interface Conectada do Servidor HTTP

O servidor HTTP (Linux) está conectado diretamente ao switch 3850 (por exemplo, interface G1/0/2).

enable

configure terminal

interface g1/0/2

description Linux_is_connected_here

switchport

switchport mode access

switchport access vlan 1

Etapa 3. Configuração de Escopo DHCP

Exemplo de configuração do pool DHCP com a opção 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

Verificação

No momento, não há procedimento de verificação disponível para esta configuração.

Logs do console de trabalho

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

Troubleshooting

Esta seção fornece informações que podem ser usadas para o troubleshooting da sua configuração.

Problemas comuns

1. Outra Presença do Servidor DHCP na Rede

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. Erro de Código 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 da Porta do Serviço HTTP

O serviço HTTP está escutando em portas diferentes, como 8080, mas a configuração DHCP para a opção 67 está apontando para 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. Endereço IP duplicado

Verifique o escopo do DHCP e exclua o endereço IP atribuído ao 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. Verificar o Serviço HTTP, Parar e Reiniciar

vm: /var/www/html$ sudo service apache2 stop

vm: /var/www/html$ sudo service apache2 start

vm: /var/www/html$ sudo service apache2 status

Amostras de detalhes do pacote

Resumo do intercâmbio 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

Resposta HTTP em detalhes:

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