четверг, 20 апреля 2017 г.

Cisco SmartPort Configuration\ Настройка Cisco SmartPorts-шаблонов с помощью macro

   Не знаю, как вас, а меня всегда раздражают изменения в конфигах в лабе: бесконечное переподключение новых устройств, постоянная смена ролей портов, постоянная необходимость настраивать порты то на доступ, то возвращать на них настройку "черной дыры", чтобы в следующий раз было понятно, какие порты заняты, а какие свободны.
   Давно-давно существовала такая модель коммутатора как 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 - скрыта, поэтому нужно вводить её полностью:

 
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
@
   Теперь можно посмотреть, что созданный макрос появился в списке макросов:

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

   Применяем созданный макрос:

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

   Теперь попробуем создать макрос с перечнем параметров, которые могут быть изменены и которые необходимо передавать в макрос при его вызове. Например, можно создать макрос для настройки порта в режим доступа с определенным номером VLAN, где номер VLAN будет изменяемым параметром. А кроме него сделаем изменяемым параметром еще и количество максимально разрешенных MAC-адресов для port-security.
   Создаю соответствующий макрос:

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


Комментариев нет:

Отправить комментарий