소개
이 문서에서는 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