목차

소개

사전 요구 사항

요구 사항

라이센스 요구 사항

지원되는 플랫폼

사용되는 구성 요소

배경 정보

네트워크 다이어그램

ZTP 작업(세부 단계)

1단계. 새 스위치 연결

2단계. ZTP 시작

3단계. DHCP 요청

4단계. DHCP 응답

5단계. HTTP URL

6단계. 다운로드

7단계. 방명록

8단계. 컨피그레이션 구축

9단계. 성공

설정

HTTP 서비스 설정

1단계. 엔드 호스트에 HTTP 서비스 설치(예: Linux)

2단계. Python 파일 ztp_http.py 생성

3단계. HTTP 서비스 및 수신 포트 확인

4단계. 포트 번호의 브라우저 확인

DHCP 서비스 설정

1단계. 프로비저닝 인터페이스 컨피그레이션(새 디바이스)

2단계. HTTP 서버 연결 인터페이스 컨피그레이션

3단계. DHCP 범위 컨피그레이션

확인

작업 콘솔 로그

문제 해결

일반적인 문제

1. 네트워크에 다른 DHCP 서버가 있음

2. Python 코드 오류

3. HTTP 서비스 포트 번호

4. 중복 IP 주소

5. HTTP 서비스, 중지 및 재시작 확인

패킷 세부사항 샘플

소개

이 문서에서는 Cisco Catalyst 9000 Series 스위치의 ZTP(Zero Touch Provisioning) 구성 및 프로비저닝에 대해 설명합니다.

사전 요구 사항

요구 사항

다음 주제에 대한 지식을 보유하고 있으면 유용합니다.

- 스위치의 DHCP(Dynamic Host Configuration Protocol) 서버 구성

- 파이썬 코드의 기초

- HTTP/TFTP 서비스의 기본 사항

라이센스 요구 사항

- Network Advantage 또는 Network Essentials 라이센스가 활성 상태여야 합니다.

지원되는 플랫폼

- 16.5.1a 버전을 실행하는 Catalyst 9300 Series 스위치

- 16.5.1a 버전을 실행하는 Catalyst 9500 Series 스위치

- 16.6.2 버전을 실행하는 Catalyst 9400 Series 스위치

참고: 이 기능은 C9600에서 지원되지 않습니다.

사용되는 구성 요소

이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.

- Cisco IOS® XE 17.6.4의 Cisco Catalyst 9300 스위치

- Cisco Catalyst 3850 스위치는 옵션 67 구성을 통해 DHCP 서버 역할을 합니다

- HTTP 서비스와 함께 설치된 종단 호스트에 Python 파일이 포함되어 있습니다.

이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.

배경 정보

ZTP(Zero Touch Provisioning)는 수작업 없이 몇 분 이내에 네트워크 디바이스를 정확하게 프로비저닝하는 데 사용됩니다.

네트워크 다이어그램

제로 터치 프로비저닝 기본 설정 및 단계

ZTP 작업(세부 단계)

ZTP는 기존 네트워크에 도입 시 시작 구성 없이 Catalyst 9000 Series 스위치의 구성을 자동화합니다. 이 작업은 수동 작업 없이 수행됩니다. 자세한 단계는 여기에서 설명합니다.

1단계. 새 스위치 연결

새 스위치를 기존 인프라에 연결하고 디바이스의 전원을 켭니다. 스위치는 시작 컨피그레이션 없이 부팅됩니다.

2단계. ZTP 시작

ZTP 프로세스는 스위치에 의해 자동으로 시작됩니다.

3단계. DHCP 요청

스위치는 DHCP 검색 메시지를 전송합니다.

4단계. DHCP 응답

DHCP 서버는 HTTP 서버 IP 및 URL이 포함된 옵션 67을 포함하는 오퍼로 응답합니다.

5단계. HTTP URL

스위치는 제안을 받고 자체 통신을 위한 IP 주소를 가져옵니다. 또한 HTTP 서버의 IP 주소 및 ZTP.py 파일을 다운로드할 전체 URL도 수신합니다.

6단계. 다운로드

스위치는 HTTP 서버에 도달하고 파일을 ZTP.py 다운로드합니다.

7단계. 방명록

이 스위치는 자동으로 게스트 쉘을 활성화합니다.

8단계. 컨피그레이션 구축

스위치가 Python 파일을 실행하며 컨피그레이션이 자동으로 적용됩니다.

9단계. 성공

스위치가 guestshell을 파괴하고script execution is a success메시지가 표시됩니다.

설정

HTTP 서비스 설정

1단계. 엔드 호스트에 HTTP 서비스 설치(예: Linux)

sudo apt update

sudo apt install apache2

2단계. Python 파일 ztp_http.py 생성

사용 권한 문제가 발생할 경우 파일에 대한 완전한 사용 권한을 부여하기 위해 사용합니다chmod 777.

Python 파일에는 다음 작업으로 만들어진 코드가 들어 있습니다.

1. 명령을 표시합니다.

2. 루프백 구성

3. 구성 확인

파이썬 코드

#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"

python 파일의 위치입니다.

이 파일은 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

3단계. HTTP 서비스 및 수신 포트 확인

service 명령을 사용하여 HTTP 서비스가 시작되어 지금 실행 중인지 확인합니다.

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

Active: active (running)

HTTP 서비스가 현재 듣고 있는 포트를 확인하십시오.

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

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

4단계. 포트 번호의 브라우저 확인

웹 브라우저를 통해 파일을 다운로드할 수 있는지 확인합니다.

1. 동일한 시스템(예: Linux) 내에서 브라우저를 엽니다.

2. 검색 창에 다음 URL을 입력합니다.  localhost:80/ztp_http.py

3. 파일 다운로드가 자동으로 수행됩니다.

DHCP 서비스 설정

1단계. 프로비저닝 인터페이스 컨피그레이션(새 디바이스)

새 스위치는 G1/0/1에 연결될 것으로 예상됩니다.

enable

configure terminal

interface g1/0/1

description New_9300_switch

switchport

switchport mode access

switchport access vlan 1

2단계. HTTP 서버 연결 인터페이스 컨피그레이션

HTTP 서버(Linux)는 3850 스위치(예: 인터페이스 G1/0/2)에 직접 연결됩니다.

enable

configure terminal

interface g1/0/2

description Linux_is_connected_here

switchport

switchport mode access

switchport access vlan 1

3단계. DHCP 범위 컨피그레이션

옵션 67의 DHCP 풀 컨피그레이션 예

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

확인

현재 이 설정에 사용 가능한 확인 절차는 없습니다.

작업 콘솔 로그

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

문제 해결

이 섹션에서는 설정 문제 해결에 사용할 수 있는 정보를 제공합니다.

일반적인 문제

1. 네트워크에 다른 DHCP 서버가 있음

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. 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. HTTP 서비스 포트 번호

HTTP 서비스는 8080과 같은 다른 포트에서 수신하지만, 옵션 67의 DHCP 컨피그레이션은 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. 중복 IP 주소

DHCP 범위를 확인하고 HTTP 서버에 할당된 IP 주소를 제외합니다.

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. HTTP 서비스, 중지 및 재시작 확인

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

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

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

패킷 세부사항 샘플

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

HTTP 응답 세부 정보:

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