Не знаю, как вас, а меня всегда раздражают изменения в конфигах в лабе: бесконечное переподключение новых устройств, постоянная смена ролей портов, постоянная необходимость настраивать порты то на доступ, то возвращать на них настройку "черной дыры", чтобы в следующий раз было понятно, какие порты заняты, а какие свободны.
Давно-давно существовала такая модель коммутатора как Cisco Catalyst Express 500. Вот, даже фоточку нашел в гугле:
Помимо того, что это была ужасно тормозная и глючная железка, которую постоянно приходилось перезагружать, у нее была еще одна особенность - она настраивалась ТОЛЬКО через веб-интерфейс. Не было консольного порта в принципе, не было возможность включить SSH. Только http\https, нужная версия Java - и в путь. Настраивалось все там тоже ужасно (лично мое мнение), но была интересная возможность работы с портами - SmartPorts. Можно было с помощью тыкания в картинки, изображающие порты на коммутаторе, выбрать соответствующую роль для порта - подключен другой ПК, телефон, телефон и ПК, точка доступа, маршрутизатор, коммутатор и т.д. Т.е. к каждой роли уже были привязаны общие настройки, характерные для данного типа порта, нужно было только задать конкретные параметры.
Во время очередного подключения нового устройства я вспомнил про эту фичу и подумал, вот бы здорово было бы сделать что-то подобное в CLI - сохранить некоторый скрипт, который бы мог после вызова поменять все настройки на нужном мне интерфейсе сразу же. И мне не пришлось бы сохранять в блокнотик параметры стандартного порта, копировать их с соседнего порта. В целом не сложно, но хотелось как-то покрасивее это делать. Оказывается, все велосипеды давно уже изобретены! И название им - SmartPorts macro.
Допустим, у нас есть коммутатор, на котором мы создали VLAN10 и решили, что это будет "Черная дыра" - VLAN, который всегда будет неактивен. В него мы поместим все незадействованные физические интерфейсы, предварительно их выключив. При этом будем использовать описание интерфейса для указания, что этот интерфейс не используется. Получаем следующий набор команд:
! description --UNUSED-- switchport mode access switchport access vlan 10 shutdown !
Теперь представим ситуацию, что у нас 48 портов, которые постоянно изменяют свой статус - то к ним что-то подключено, то нет. По правилам необходимо вернуть настройки обратно. И чтобы это делать каждый раз только одной командой, можно воспользоваться макросами. Дам такое определение - это набор настроек, которые сохраняются под некоторым общим именем и могут быть сразу же применены с помощью вызова по имени.
Для начала следует сказать, что в Cisco (оговорка - все, как всегда, зависит от версии софта и модели устройства) присутствуют макросы по умолчанию. Посмотреть перечень дефолтных макросов можно с помощью команды show parser macro brief.
Создам макрос для настройки порта в соответствии с вышеописанным конфигом. Для этого в глобальном конфигурационном режиме введу команду macro name <ИМЯ МАКРОСА>, не забывая о том, что команда macro name - скрыта, поэтому нужно вводить её полностью:
Для начала следует сказать, что в Cisco (оговорка - все, как всегда, зависит от версии софта и модели устройства) присутствуют макросы по умолчанию. Посмотреть перечень дефолтных макросов можно с помощью команды show parser macro brief.
Создам макрос для настройки порта в соответствии с вышеописанным конфигом. Для этого в глобальном конфигурационном режиме введу команду macro name <ИМЯ МАКРОСА>, не забывая о том, что команда macro name - скрыта, поэтому нужно вводить её полностью:
sw(config)#macro name UNUSED Enter macro commands one per line. End with the character '@'. description -- UNUSED switchport mode access switchport access vlan 10 switchport nonegotiate shutdown @
Теперь можно посмотреть, что созданный макрос появился в списке макросов:
Создаю соответствующий макрос:
Проверяю, что все корректно:
Теперь пробую вызвать макрос для настройки интерфейса. Обращаю внимание на то, что требуется указать значение параметров по ключевым словам. Если бы изменяемый параметр был один, то я мог бы не указывать названия ключевых слов, а просто написать macro trace ACCESS 333. Но если параметр не один или один и тот же параметр используется несколько раз (как у меня значение VLAN и в switchport, и в описании), то требуется писать через пробел ключевое слово и значение параметра:
Проверяю, что все настройки применились к порту:
Выполняем проверку. Для этого возьмем любой порт, на котором необходимо применить настройку для неиспользованного порта. После чего применим макрос:sw(config)#do sh parser macro brief default global : cisco-global default interface: cisco-desktop default interface: cisco-phone default interface: cisco-switch default interface: cisco-router default interface: cisco-wireless customizable : UNUSED sw(config)#do sh parser macro name UNUSED Macro name : UNUSED Macro type : customizable description -- UNUSED switchport mode access switchport access vlan 10 switchport nonegotiate shutdown
Применяем созданный макрос:sw(config)#interf G0/19 sw(config-if)#do sh run interf g0/19 Building configuration... Current configuration : 121 bytes ! interface GigabitEthernet0/19 description -- Test The Macros switchport access vlan 333 switchport mode access end
Теперь попробуем создать макрос с перечнем параметров, которые могут быть изменены и которые необходимо передавать в макрос при его вызове. Например, можно создать макрос для настройки порта в режим доступа с определенным номером VLAN, где номер VLAN будет изменяемым параметром. А кроме него сделаем изменяемым параметром еще и количество максимально разрешенных MAC-адресов для port-security.sw(config-if)#macro trace UNUSED Applying command... 'description -- UNUSED' Applying command... 'switchport mode access' Applying command... 'switchport access vlan 10' Applying command... 'switchport nonegotiate' Applying command... 'shutdown' sw(config-if)#do sh run interf g0/19 Building configuration... Current configuration : 171 bytes ! interface GigabitEthernet0/19 description -- UNUSED switchport access vlan 10 switchport mode access switchport nonegotiate shutdown
Создаю соответствующий макрос:
sw(config)#macro name ACCESS Enter macro commands one per line. End with the character '@'. switchport mode access switchport access vlan $VLANID switchport port-security spanning-tree portfast switchport port-security maximum $PSID description -- Access vlan $VLANID #macro keywords $VLANID $PSID @
Проверяю, что все корректно:
sw(config)#do sh parser macro name ACCESS Macro name : ACCESS Macro type : customizable switchport mode access switchport access vlan $VLANID switchport port-security spanning-tree portfast switchport port-security maximum $PSID description -- Access vlan $VLANID #macro keywords $VLANID $PSID
Теперь пробую вызвать макрос для настройки интерфейса. Обращаю внимание на то, что требуется указать значение параметров по ключевым словам. Если бы изменяемый параметр был один, то я мог бы не указывать названия ключевых слов, а просто написать macro trace ACCESS 333. Но если параметр не один или один и тот же параметр используется несколько раз (как у меня значение VLAN и в switchport, и в описании), то требуется писать через пробел ключевое слово и значение параметра:
sw(config-if)#macro trace ACCESS $VLANID 333 $PSID 2 Applying command... 'switchport mode access' Applying command... 'switchport access vlan 333' Applying command... 'switchport port-security' Applying command... 'spanning-tree portfast' Applying command... 'switchport port-security maximum 2' Applying command... 'description -- Access vlan 333'
Проверяю, что все настройки применились к порту:
sw(config-if)#do sh run interf g0/19 ! interface GigabitEthernet0/19 description -- Access vlan 333 switchport access vlan 333 switchport mode access switchport nonegotiate switchport port-security maximum 2 switchport port-security shutdown macro description UNUSED | ACCESS spanning-tree portfast
Комментариев нет:
Отправить комментарий