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, то к сожалению только снимать.
Почему так строго? Потому что нет современного ПО с закрытыми дырами в безопасности. И если хакер проникнет в периметр вашей организации, такие коммутаторы с дырявым 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елеграм канал
Было бы неплохо статью про текущие методы лицензирования в современных реалиях. Про PLR и тд
А что тут рассказывать-то?
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.
а где прошивки брать?
Этот вопрос надо задавать своему начальнику.