Catalyst 9000 серии прошивка

Catalyst 9000 серии прошивка — довольно давно написал статью про прошивку коммутаторов 2950/3550. Эта статья продолжение или приемник, как хотите, той старой статьи.


Как было раньше и что изменилось

Раньше мы закачивали новый бинарник IOS на коммутатор и указывали его для загрузки:

#(config)boot system flash:название_прошивки.bin

Или можно было вообще не указывать, если на флэшке коммутатора лежал единственный образ IOS. Вот всё. При первой перезагрузке с новым образом обычно перешивался загрузчик на новую версию, а дальше стартовал наш новый образ. Как стартовал? Распаковывался с флэш в память и начинал работать. Всё было классно, а первые образы занимали всего 1,5-3Mb. Эти прошивки имели довольно непонятное имя файла, надо было потрудиться-поискать, чтобы расшифровать буквенно-цифровое название:

c2950-i6k2l2q4-mz.121-22.EA13.bin

Дальше больше, образы IOS стали расти в функционале и объёмах, 10-15Mb. А сам функционал обозначался в названии прошивки:

c3750-ipservicesk9-mz.150-2.SE11.bin

И тут прикол, поскольку каждая серия коммутаторов представлена линейкой устройств, то на какие-то младшие модели полнофункциональная прошивка могла и не поместиться. Например, прошивка выше почти 18Mb, при этом у старой модели WS-C3750G-24T флэшка всего 16Mb:

15998976 bytes total (4976640 bytes free)

Далее прошивка стала единой, со словом universal:

c3750e-universalk9-mz.152-4.E10.bin

Размер универсальной прошивки максимальный, ведь там присутствует весь возможный для устройства функционал. То есть прошивки ещё прибавили в объёмах. Доступный функционал при этом определяется лицензиями, загруженными на устройство (подробнее здесь, в самом конце).

Прошло ещё времени и IOS была заменена на IOS XE. Что там нового? Разные фичи всякие: модульность, программируемость (да здравствует автоматизация), со встроенными сертификатами для лучшей безопасности. Надо отметить что, система лицензирования несколько раз претерпевала изменения, но это уже менее интересные подробности в контексте обновления устройства. Но самое главное (на мой взгляд) с точки зрения прошивки, это совсем другие весовые категории. Возьмём актуальную версию 17.09.04a. Так для серии коммутаторов 9200 файл cat9k_lite_iosxe.17.09.04a.SPA.bin весит 450Mb. А для 9300/9500 файл cat9k_iosxe.17.09.04a.SPA.bin размером 1,2Gb. Да-да, более гигабайта.

Понятно, что старый способ загрузки коммутатора с чтением всего такого файла с флэшки в память, он устарел. Допускаю, что загрузка данных идёт параллельно распаковке и не нужно дожидаться пока весь файл распакуется. Скорее всего так и есть. Тем не менее, при существующих размерах образов, подобный метод здорово замедляет загрузку коммутатора. Поэтому был предложен новый метод, использующий как раз модульность.


Старьё

Моё субъективное мнение, подчёркиваю.

Раз уж разговор зашёл за старые модели коммутаторов, то нужно обозначить какие серии/модели актуальны сегодня. Циска навыпускала дофига плюс три разных моделей, и порой понять что это, довольно сложно. Во-первых, никаких SMB (Small Business). Довольно-таки спорная линейка, причём спорной она была прям с момента выхода. Сейчас SMB, если они ещё используются, нужно снимать и выбрасывать из окна.

Во-вторых, 2000/3000 линейки. Минимальная планка 2960X/3750X. Всё что ниже необходимо снимать/списывать/продавать/утилизировать. Сюда же старьё из 4000/6000 серий. Хотя конечно Catalyst 6500 — легенда, не спорю. Но если там старая версия Supervisor Engine, то к сожалению только снимать.

Catalyst 9000 серии прошивка

Почему так строго? Потому что нет современного ПО с закрытыми дырами в безопасности. И если хакер проникнет в периметр вашей организации, такие коммутаторы с дырявым IOS станут для него дополнительными точками закрепления.


Catalyst 9000

Посмотрим новый подход к прошивке/загрузке коммутаторов на примере 9200/9300/9500. Там всё одинаково, только для 9200 и 9300/9500 сам файл IOS XE отличается, как уже отмечал. Собственно есть два метода:

  • Bundle mode, старый, оставлен скорее для совместимости, когда прошивка лежит куском и загружается как обычно, через распаковку;
#sh ver

Switch Ports Model              SW Version        SW Image              Mode   
------ ----- -----              ----------        ----------            ----   
     1 52    C9200L-48P-4X      17.09.04a         CAT9K_LITE_IOSXE      BUNDLE
*    2 52    C9200L-48P-4X      17.09.04a         CAT9K_LITE_IOSXE      BUNDLE
     3 52    C9200L-48P-4X      17.09.04a         CAT9K_LITE_IOSXE      BUNDLE
  • Install mode, новый, прошивка хранится на флэш уже распакованной, в виде ряда файлов .pkg, а загружается через конфигурационный файл packages.conf.
#sh ver

Switch Ports Model              SW Version        SW Image              Mode   
------ ----- -----              ----------        ----------            ----   
     1 41    C9300-24T          17.09.04a         CAT9K_IOSXE           INSTALL
*    2 41    C9300-24T          17.09.04a         CAT9K_IOSXE           INSTALL

Сам файл с прошивкой на флэшке коммутатора более не нужен и даже вреден, так как занимает немало места.


Сброс пароля

Поговорим про сброс пароля, здесь тоже поменялось. Нет больше команд flash_init и load_helper. Как быть? Входим в режим ROMMON. Для удаленного подключения удобнее всего воспользоваться контекстным меню Putty. Правой кнопкой на строке заголовка Специальные команды - Break.

Initializing Hardware......

System Bootstrap, Version 17.6.1r, RELEASE SOFTWARE (P)
Compiled 18-03-2021 12:00:00.00 by rel

Current ROMMON image : Primary Rommon Image

Last reset cause:PowerOn
C9500-24Y4C platform with 16777216 Kbytes of main memory

Preparing to autoboot. [Press Ctrl-C to interrupt] 5 (interrupted)
rommon 1 >

Далее вводим команды:

rommon 1 > SWITCH_IGNORE_STARTUP_CFG=1
rommon 2 > boot

Важный момент, после восстановления, в конце всех манипуляций обязательно нужно будет ввести (иначе коммутатор продолжит игнорировать конфигурацию при загрузке):

(config)#no system ignore startupconfig {switch all}
(config)#end
#wr

Итак, дожидаемся пока коммутатор прогрузится без конфигурации, потом всё как обычно. Подгружаем имеющуюся конфу:

Switch#copy startup-config running-config 

После чего имя Switch изменится на то, какое прописано для него в конфигурации. Затем меняем пароль на enable:

#conf t
(config)#enable algorithm-type scrypt secret Qaz12345
(config)#end
#wr

Или же стираем конфу полностью и забиваем руками по новой:

Switch#erase startup-config

****************************************************************************************
Erasing Nvram will not clear license trust code.
****************************************************************************************
Erasing the nvram filesystem will remove all configuration files! Continue? [confirm]
[OK]
Erase of nvram: complete

Прошивка

Предполагается, что новый образ уже загружен на коммутатор. В случае стека отдельно распихивать файл образа по всем коммутаторам не нужно, установка сделает это сама. Загружал через TFTP/FTP, разницы ни по скорости, ни по надёжности, не заметил. Для FTP так:

copy ftp://name:pass@ip/Firmware/Cisco/cat9k_iosxe.17.09.04a.SPA.bin flash: {vrf MGMT}

name - логин FTP
pass - пароль FTP
ip - адрес FTP, например 192.168.1.1
/Firmware/Cisco/ - вложенность папок на FTP-сервере до образа
vrf - указать, если нужно
Подготовка к прошивке

Будем прошивать из Bundle в Install. Обновление прошивки, которая уже в Install mode, полностью аналогична. За исключением одного шага и более быстрого процесса. С этого шага и начнём. Сначала нужно удалить с конфы коммутатора строку загрузки из файла:

#show run | i boot system

boot system switch all flash:cat9k_iosxe.17.03.04.SPA.bin

#conf t
#(config) no boot system switch all flash:cat9k_iosxe.17.03.04.SPA.bin

Далее, указать загрузку из packages.conf и обязательно сохранить конфигурацию.

#(config)boot system flash:packages.conf
#(config)end
#wr

На этом шаге сохранение необходимо, но если далее внести ещё какие-то изменения и запустить установщик, то он сам уже задаст вопрос о сохранении конфигурации. Теперь чекаем:

#show boot

Должен быть указан только файл packages.conf. При первых прошивках девятитысячников пренебрёг данными рекомендациями, в результате чего потерял время, стек загрузился снова в Bundle и со старой версией. Тут надо отметить, что стек уходит в перезагруз после инсталляции минут на 10 и тем дольше, чем больше коммутаторов в стеке.

Непосредственно прошивка

Происходит в одну команду:

#install add file flash:cat9k_iosxe.17.09.04a.SPA.bin activate commit

Коммутатор задаст несколько вопросов, главный о необходимости перезагрузки:

...
This operation requires a reload of the system. Do you want to proceed? [y/n]
...
Install will reload the system now!
SUCCESS: install_add_activate_commit Wen Jan 03 13:04:15 UTC + 3 2024

Вывод может немного отличаться на разных моделях и по времени тоже по-разному, но в конце коммутатор обязательно должен сообщить об успехе и уйти в перезагрузку. Как уже говорил, новая прошивка будет установлена на все коммутаторы стека.

Команду можно разбить на несколько этапов:

#install add file flash:cat9k_iosxe.17.09.04a.SPA.bin
#install activate
#install commit

Большого смысла в этом нет, за исключением каких-то специфических случаев. Дело в том, что после ввода activate потребуется перезагрузка:

This operation requires a reload of the system. Do you want to proceed? [y/n]

Например возможно, когда на 9300 развёрнут программный WLC (EWC 9800). И вот чтобы проапгрейдить, но не сломать, понадобится такая раздельная установка. С промежуточным апгрейдом версии WLC. Этот момент как раз, апгрейд WLC на 9300, мне ещё предстоит. Разберусь, обязательно выложу.

Очистка

После установки и перезагрузки коммутатора, полезно запустить очистку флэшки:

#install remove inactive

Закачанный файл с прошивкой тоже удалится. Кстати, если установка закончится ошибкой о недостатке места, данная команда поможет. Закачивать прошивку придётся ещё раз.

Авто-апгрейд

Весьма полезная вещь. Доступна только в Install mode. Если к стеку добавить новый коммутатор, он автоматически обновится на нужную версию. Для этого надо предварительно ввести команду:

(config)#software auto-upgrade enable

Для старых коммутаторов (типа 3750) пришлось бы руками копировать прошивку на каждый новый коммутатор стека, здесь же всё просто. Собираем стек целиком, тут важный момент, не надо подавать питание сразу на все новые коммутаторы стека. Включаем их строго по одному. После включения дожидаемся пока коммутатор полностью закончит процедуру присоединения (с обязательной перезагрузкой). Затем подаём питание на следующий и так далее. Коммутатор проходит следующие стадии:

Switch#   Role    Mac Address     Priority Version  State 
-------------------------------------------------------------------------------------
*1       Active   d0dc.2c59.2d80     1      V02     Ready                               
 2       Standby  e80a.b918.1000     1      V02     Ready                               
 3       Member   e80a.b9fc.e380     1      V02     Ready                               
 4       Member   bc8d.1fc1.2a80     1              Initializing

Затем сообщение о несовпадении версий:

Mar  7 14:27:33: %BOOT-3-BOOTTIME_INCOMPATIBLE_SW_DETECTED: Switch 1 R0/0: issu_stack: Incompatible software detected. Details: Chassis 4 is detected INCOMPATIBLE with software version of Active: FAILED: Version '17.06.05' mismatch with Active's running version '17.09.04a' for package: 'rp_base'
Switch#   Role    Mac Address     Priority Version  State 
-------------------------------------------------------------------------------------
*1       Active   d0dc.2c59.2d80     1      V02     Ready                               
 2       Standby  e80a.b918.1000     1      V02     Ready                               
 3       Member   e80a.b9fc.e380     1      V02     Ready                               
 4       Member   bc8d.1fc1.2a80     1      V02     V-Mismatch  

Начался авто-апгрейд, полновесная прошивка была на мастере стека, как понял она обязательно должна присутствовать на одном из текущих коммутаторов стека:

64849   -rw-        470682931  Feb 23 2024 18:20:24 +03:00  cat9k_lite_iosxe.17.09.04a.SPA.bin
Mar  7 14:27:35: %AUTO_UPGRADE-5-AUTO_UPGRADE_START_CHECK: Switch 1 R0/0: auto_upgrade_client_helper: Auto upgrade start checking for incompatible switches.
Mar  7 14:27:43: %AUTO_UPGRADE-5-AUTO_UPGRADE_INITIATED: Switch 1 R0/0: auto_upgrade_client_helper: Auto upgrade initiated for switch 4/R0.
Mar  7 14:27:43: %AUTO_UPGRADE-5-AUTO_UPGRADE_SEARCH: Switch 1 R0/0: auto_upgrade_client_helper: Searching stack for software to upgrade switch 4/R0.
Mar  7 14:27:43: %AUTO_UPGRADE-5-AUTO_UPGRADE_FOUND: Switch 1 R0/0: auto_upgrade_client_helper: Found donor switch 1 to auto upgrade switch 4/R0.
Mar  7 14:27:43: %AUTO_UPGRADE-5-AUTO_UPGRADE_START: Switch 1 R0/0: auto_upgrade_client_helper: Upgrading switch 4/R0 with software from switch 1.

Перезагрузка после прошивки:

Mar  7 14:28:34: %AUTO_UPGRADE-5-AUTO_UPGRADE_RELOAD: Switch 1 R0/0: auto_upgrade_client_helper: Reloading switch 4 to complete the auto upgrade.
Mar  7 14:28:35: %HMANRP-5-CHASSIS_DOWN_EVENT: Chassis 4 gone DOWN!
Mar  7 14:28:35: %STACKMGR-4-SWITCH_REMOVED: Switch 1 R0/0: stack_mgr: Switch 4 has been removed from the stack.
Switch#   Role    Mac Address     Priority Version  State 
-------------------------------------------------------------------------------------
*1       Active   d0dc.2c59.2d80     1      V02     Ready                               
 2       Standby  e80a.b918.1000     1      V02     Ready                               
 3       Member   e80a.b9fc.e380     1      V02     Ready                               
 4       Member   0000.0000.0000     0      V02     Removed    

После перезагрузки, коммутатор успешно присоединился к стеку:

Switch#   Role    Mac Address     Priority Version  State 
-------------------------------------------------------------------------------------
*1       Active   d0dc.2c59.2d80     1      V02     Ready                               
 2       Standby  e80a.b918.1000     1      V02     Ready                               
 3       Member   e80a.b9fc.e380     1      V02     Ready                               
 4       Member   bc8d.1fc1.2a80     1      V02     Ready  

Ну и после нескольких таких итераций, в моём случае после трёх, стек полностью собран:

Switch#   Role    Mac Address     Priority Version  State 
-------------------------------------------------------------------------------------
*1       Active   d0dc.2c59.2d80     1      V02     Ready                               
 2       Standby  e80a.b918.1000     1      V02     Ready                               
 3       Member   e80a.b9fc.e380     1      V02     Ready                               
 4       Member   bc8d.1fc1.2a80     1      V02     Ready                               
 5       Member   bc8d.1fc1.2f00     1      V02     Ready                               
 6       Member   ccd3.426d.4b00     1      V02     Ready 

Разборка/сборка стека

Иногда бывает нужно разобрать существующий стек и использовать коммутаторы по отдельности. Или собрать стек из новых/старых коммутаторов.

Разборка

Если вынуть коммутатор из стека, то он посчитает, что остальные коммутаторы стека неработоспособны. И продолжит оставаться частью стека. Имеем такой коммутатор, у него в конфе к примеру:

!
switch 2 provision c9200l-48p-4x
!

Соответственно, все его порты начинаются с двойки:

!
interface GigabitEthernet2/0/1
!
interface GigabitEthernet2/0/2
!
interface GigabitEthernet2/0/3

Делаем следующее:

Switch(config)#switch 2 renumber 1

WARNING: Changing the switch number may result in a
configuration change for that switch.
The interface configuration associated with the old switch
number will remain as a provisioned configuration.
Do you want to continue?[confirm]
Changing Switch Number 2 to Switch Number 1
New Switch Number will be effective after next reboot

Перезагружаем, на самом деле сохраняться необязательно, настройки стека всё равно применятся:

Switch(config)#do reload

System configuration has been modified. Save? [yes/no]: yes
Building configuration...
[OK]
Proceed with reload? [confirm]

После перезагрузке в конфе останется:

!
switch 1 provision c9200l-48p-4x
switch 2 provision c9200l-48p-4x
!

И ещё будет два набора портов:

!
interface GigabitEthernet1/0/1
!
interface GigabitEthernet1/0/2
!
interface GigabitEthernet1/0/3
...
!
interface GigabitEthernet2/0/1
!
interface GigabitEthernet2/0/2
!
interface GigabitEthernet2/0/3

Последнее действо:

Switch(config)#no switch 2 provision
Сборка

Если собирается из прям новых коммутаторов с заводскими настройками, то лучший вариант тут, сначала собрать стек физически. Затем, как уже говорил выше, включать питание коммутаторов в той последовательности, как они должны идти по номерам в стеке. Дожидаясь полной загрузки каждого коммутатора, перед включением следующего.

Для пользованных коммутаторов, особенно при подключении такого коммутатора к существующему стеку, лучше подстраховаться. И предварительно в существующем стеке повысить приоритет текущего мастера стека:

ILO-STACK(config)#switch 1 priority 15
Switch#  Role   Mac Address     Priority Version  State 
----------------------------------------------------------
*1 Master 88f0.313e.4380 15 3 Ready
2 Member f40f.1b64.5280 1 3 Ready

Зачем это надо? Потому тут возможны различные ошибки при подсоединении пользованного коммутатора с несброшенной, не до конца сброшенной на завод конфой. Например, если он раньше был частью другого стека и его номер отличен от единицы. Допустим в cтеке, куда идёт присоединение, уже используется такой номер. Тогда коммутатор видит стек, но не сможет присоединиться. У коммутатора циклический ребут, без возможности какой-либо настройки:

Reloading because of stack merge or communication failure

В таком случае, далее обычно следуют сильные танцы. Хаотичные попытки отсоединения/присоединения стековых кабелей, изменение номеров коммутаторов, множество перезагрузок как этого коммутатора, так и стека. И в результате возможна ситуация, когда присоединяемый коммутатор изберётся мастером. Тогда продуктовый стек загрузится с пустой конфигурацией, которая была на присоединяемом коммутаторе. Проходил такие истории.

Ещё здесь может помочь перенумерация подсоединяемого коммутатора в нужный номер, который он должен иметь в стеке. Перенумеровываем ещё до подсоединения, цепляем, профит.


Обновление маршрутизатора

Скажу уж пару слов и про маршрутизаторы, на примере ASR1001-X. Так как обновляю и их. Здесь практически всё то же самое, за исключением того, что обновление происходит двумя файлами. Помимо прошивки есть ещё файл ROMmon. Он должен быть совместимой (c основной прошивкой IOS-XE) версии. Посмотреть соответствие релизов IOS-XE и версии ROMmon для ASR 1000 серии можно тут. Как видно из таблицы, соответствие не однозначное, а с перекрытиями. То есть одна версия ROMmon перекрывает несколько версий IOS-XE.

Последняя на момент (16.01.24) версия ROMmon ASR 1000 это 17.3(1r). Файл надо закачать на маршрутизатор и выполнить команду:

#upgrade rom-monitor filename bootflash:asr1000-rommon.173-1r.SPA.pkg all 

Затем, перенастроить загрузку из файла packages.conf, для случая когда маршрутизатор в Bundle mode. И сохранить конфигурацию.

#show run | i boot system

boot system flash bootflash:asr1001x-universalk9.17.03.03.SPA.bin

#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
(config)#no boot system flash bootflash:asr1001x-universalk9.17.03.03.SPA.bin
(config)#boot system flash bootflash:packages.conf
(config)#end
#wr

Далее, обновляем основную прошивку:

#install add file bootflash:asr1001x-universalk9.17.09.04a.SPA.bin activate commit

Устройство как всегда обругается:

This operation requires a reload of the system. Do you want to proceed? 
Please confirm you have changed boot config to bootflash:packages.conf [y/n]y

...
This operation may require a reload of the system. Do you want to proceed? [y/n]y

...
Send model notification for install_add_activate_commit before reload
Install will reload the system now!
SUCCESS: install_add_activate_commit  Tue Jan 16 07:32:18 MSK 2024

После перезагрузки выполняем очистку.

#install remove inactive

Все файлы прошивок при этом улетают.

The following files will be deleted:
    [R0]: /bootflash/asr1001x-universalk9.16.09.02.SPA.bin
    [R0]: /bootflash/asr1001x-universalk9.17.03.03.SPA.bin
    [R0]: /bootflash/asr1000-rommon.173-1r.SPA.pkg
    [R0]: /bootflash/asr1001x-universalk9.17.09.04a.SPA.bin

Do you want to remove the above files? [y/n]y

Надо заметить, файлы на маршрутизаторе отличаются по количеству и по составу от файлов на коммутаторе.

169686 -rw- 71581828  Jan 16 2024 07:26:26 +03:00  asr1001x-rpboot.17.09.04a.SPA.pkg
169685 -rw- 718668868  Jan 16 2024 07:24:49 +03:00  asr1001x-mono-universalk9.17.09.04a.SPA.pkg
169684 -rw- 5334068  Jan 16 2024 07:24:48 +03:00  asr1001x-firmware_nim_ssd.17.09.04a.SPA.pkg
169683 -rw- 11306040  Jan 16 2024 07:24:48 +03:00  asr1001x-firmware_ngwic_t1e1.17.09.04a.SPA.pkg

Последним шагом проверяем версию.

#show ver

Cisco IOS XE Software, Version 17.09.04a
Cisco IOS Software [Cupertino], ASR1000 Software (X86_64_LINUX_IOSD-UNIVERSALK9-M), Version 17.9.4a, RELEASE SOFTWARE (fc3)

Приглашаю поделиться мнением в Tелеграм канал

4 thoughts on “Catalyst 9000 серии прошивка”

  1. Было бы неплохо статью про текущие методы лицензирования в современных реалиях. Про PLR и тд

    1. А что тут рассказывать-то?

      Purchased Licenses:
      C9500 Network Advantage (C9500 Network Advantage):
      Description: C9500 Network Advantage
      Total reserved count: 1
      Term information:
      Active: PID:C9500-24Y4C,SN:-----------
      Authorization type: UNIVERSAL INSTALLED on Feb 20 12:39:24 2024 UTC
      License type: PERPETUAL
      Term Count: 1

      Достаточно чтобы железки не ходили в нет к серверам CISCO.

Leave a Comment

Scroll to Top