Настройка MSTP

Настройка MSTP — настраиваем Multi Spanning Tree Protocol на коммутаторе CISCO, основные моменты, тюнинг, ошибки конфигурирования, проверка.

В CCNA R&S буквально крупица информации о MSTP. В новом CCNA 7 вообще такой темы не нашёл. Всё что там есть:

Explain how Spanning Tree Protocol (STP) and Rapid Spanning Tree Protocol (RSTP) work

Невозможно на этих знаниях понять работу протокола даже приблизительно. Объяснение простое, усиленно развивается тенденция новых подходов к архитектуре сети. Всё на L3, оверлеи, применение STP ограничено. Развивается и захватывает мир 🙂 CISCO пересмотрело нишу STP, перенесла подробности в курс CCNP Enterprise. MSTP никуда не делся, но как узкоспециализированное и довольно-таки сложное решение живёт теперь полностью тут.

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

Используемые документы

MSTP (далее для краткости MST) изначально выпущен как IEEE 802.1s, затем он дорабатывался, был включён в 802.1Q-2005 и снова дорабатывался. Поэтому есть определенная неразбериха как в документации, особенно между старыми и новыми документами, так и между вендорами. Опираюсь на 3 основных дока:

  • CCNP and CCIE Enterprise Core ENCOR 350-401 Official Cert Guide, буду брать отсюда примеры;
  • Software Configuration Guide, Cisco IOS Release 15.2(4)E (Catalyst 3750-X and 3560-X Switches), отсюда беру различные пруфы;
  • Software Configuration Guide, Cisco IOS XE Denali 16.2.x (Catalyst 3650 Switches), сравниваю с IOS15, есть ли какие-то изменения

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


Предварительные сведения

Ранее работа STP рассматривалась в записи "Материалы курса CISCO CCNA-3 Часть 1". Отмечу центровой момент. При работе Spanning Tree Algorithm (STA) происходит расчёт экземпляра дерева STP на каждом коммутаторе. Другое название инстанс STP. Все протоколы STP делятся на 3 вида:

  1. Только одно дерево STP. Этот единственный инстанс работает сразу для всех VLANs. Поэтому если линк блокируется STP, то он блокируется для всех VLANs. И значит распределение нагрузки невозможно;
  2. Один инстанс на каждую VLAN. Избыточный вариант, зато есть жирный плюс в виде распределения нагрузки по линкам. Так как инстансы разные, то для одного инстанса линк может быть заблокированным, а для другого спокойно пересылать трафик;
  3. Или же один инстанс на группу VLANs

MST относится к третьему пункту. И здесь возникает первая особенность. Для получения профита от MST требуются настройки.

Почему это так? На коммутаторах CISCO протокол STP по умолчанию включен и работает в режиме PVST+ и всё, можно больше ничего не делать. Или мы переводим коммутаторы в режим Rapid PVST+ и опять можно больше ничего не делать.

Оба режима относятся к пункту два. Инстансы будут добавлены и рассчитаны автоматически. Вообще-то хорошо бы конечно для каждой VLAN указать корневой мост, резервный корневой мост, настроить диаметр STP, пользовательские порты перевести в PortFast. Но если мы этого не сделаем, то никаких глобальных ухудшений в работе STP не случится.

Отличия MST

С MST картина совсем другая. По умолчанию все VLANs добавляются в инстанс №0. Работа MST построена на базе RSTP (802.1w), то есть под каждую группу VLANs выделяется отдельный инстанс RSTP. И без дополнительной настройки получается что-то похожее на обычный RSTP. Один инстанс RSTP на все VLANs.

Эта ситуация в связи с MST относится к понятию Common Spanning Tree (CST), когда как раз все VLANs работают в одном дереве STP и распределение нагрузки по линкам для разных VLAN невозможно. Так мы теряем одну из основных фишек MST.

Поэтому после перевода свичей в режим MST, первым делом нужно руками указать соответствие VLANs инстансам. Тут возникает понятие региона MST.

Группа свичей с одной и той же конфигурацией MST называется регионом MST (MST region).

Нам как раз нужно создать такой регион. Для этого придётся вколотить руками одно и то же распределение VLANs по инстансам на каждом свиче. Довольно однообразная процедура, если свичей много, но другого нормального варианта нет:

VLAN Trunking Protocol (VTP) propagation of the MST configuration is not supported. However, you can manually configure the MST configuration (region name, revision number, and VLAN-to-instance mapping) on each switch within the MST region by using the command-line interface (CLI) or through the Simple Network Management Protocol (SNMP) support.

Software Configuration Guide, Cisco IOS Release 15.2(4)E 

Регион MST

Как определить два коммутатора MST будут в одном регионе или в разных? Первый атрибут уже был назван: одинаковое распределение VLANs по инстансам. Кроме этого должны совпадать:

  • Второй атрибут название региона, по умолчанию пустое (up to 32 characters). Сделано пустое, как я понимаю, чтобы как раз коммутаторы, переведённые "без затей" и дальнейшей настройки в режим MST, оказались в одном регионе;
  • Третий атрибут номер ревизии, по умолчанию ноль (from 0 to 65535). То же самое.

Все три атрибута совпадают на коммутаторах тогда один регион, любое отличие — разные.

Название региона позволяет явным образом определить коммутаторы в разные регионы. Ревизия позволяет не запутаться, когда идёт плановое изменение привязки VLANs к инстансам. Делаем новую привязку на коммутаторе и увеличиваем ревизию. Коммутаторы, где уже привязка сделана, отделятся в новый регион. Это позволит избежать петли на время переконфигурирования (почему это так чуть далее). Ну и контролировать удобно по номеру ревизии, где переконфигурирование уже было сделано, а где ещё нет.

Самое тут главное. Регион MST функционирует единообразно. И рассматривается со стороны как других регионов, так и со стороны свичей под управлением другого протокола STP как единый логический свич. При этом внутреннее устройство этого свича скрыто, black box. Это часть механизма совместимости MST с другими протоколами STP.

Отсюда первое (сильно забегая вперёд): между двумя регионами MST будет только один активный линк, остальные заблокированы. Вот поэтому и не может быть петли между двумя разными регионами.

Второе: регион здорово ломает классические представления о работе STP. Например, фундаментальное знание о выборе рутового порта. Для связки региона MST с другим протоколом STP может быть и вот так:

Настройка MSTP
Взаимодействие региона MST с другим протоколом STP

Порт между корневым мостом и SW3 будет блокирован, хотя в классическом 802.1D этот порт был бы корневым.

Когда нужен MST

В каких случаях нам выгоднее выбрать MST против других протоколов STP? Зачем вообще этот MST?

Протокол MST был разработан для устранения недостатка или избытка экземпляров STP. В результате администратор сети может настроить точно такое количество экземпляров STP, которое имеет смысл для данной корпоративной сети.

Это самый сбалансированный из протоколов STP, с высокой пропускной способностью, открытый стандарт, но.. требует понимания свой работы.

Первый случай мультивендорная среда

Здесь мы не можем выбрать какой-то один проприетарный протокол для всех коммутаторов. Либо разбивать сеть на несколько областей, в каждой области свой протокол STP, либо выбирать один из открытых протоколов.

Разбивать на несколько областей.. плохая идея. Может заработает нормально, а могут вылезти проблемы. Зависит от конкретной реализации. На стыке протоколов скорее будут какие-то ограничения или проблемы совместимости (расскажу далее на примере MST). Такой подход требует знаний, планирования и должен иметь под собой вескую причину. Когда такой причины нет, лучше избегать этой ситуации.

Если же выбирать из открытых протоколов, то тут не такой богатый выбор: старый и медленный 802.1D, RSTP и MST. Так как RSTP хоть и быстрый, но один инстанс на все VLANs, то победитель без вариантов MST. Дает бо́льшую пропускную способность, разгружает линки. При правильной настройке конечно же. А нам как раз всегда не хватает пропускной способности.

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

Второй случай большое число VLANs

Допустим все коммутаторы CISCO и несколько сотен VLANs в большой канальной среде. Казалось бы Rapid PVST+ и всех дел? Нет. На каждую VLAN потребуется своё дерево STP. Это затраты процессора на расчёт/перерасчёт каждого дерева, это затраты памяти на хранение деревьев, это отправка кадра BPDU в каждом дереве через 2 секунды, то есть замусоривание линков.

Конечно же у части VLANs будет одинаковая топология и было бы хорошо их выделить в один инстанс, но Rapid PVST+ так не умеет. А MST как раз для этого подходит идеально. Почему в один инстанс, зачем? Потому что если у двух VLAN одинаковая топология, то инстансы Rapid PVST+ получатся тоже одинаковые. В этом случае достаточно одного дерева STP.

Ну и самое главное: количество инстансов ограничено, зависит от модели коммутатора:

In PVST+ or Rapid PVST+ mode, the switch or switch stack supports up to 128 spanning-tree instances

Software Configuration Guide, Cisco IOS Release 15.2(4)E 

Создать "сотни" VLANs с Rapid PVST+ на Catalyst 3650, к примеру, не получится. Если же так сделать, то часть VLANs будет работать без STP. Не эмулировал такую ситуацию в лабе, но в теории это именно так. Выходом опять является MST.

Пример

Есть коммутатор доступа, он подключен к двум коммутаторам распределения, как и должно быть по классической схеме трёхуровневой модели сети. На уровне распределения наш L2 домен заканчивается, выше уже идут L3 линки. Тут есть две возможности:

  • Правый коммутатор распределения рутовый;
  • Или левый рутовый

Поэтому независимо от количества VLANs, возможны только две топологии. А значит два инстанса достаточны для работы. При переходе от PVST+ к MST, допустим 100 VLANs, получается экономия в 98 инстансов. Если же у нас всего две VLAN, предположим такую ситуацию, экономии не будет. Выигрыша от MST нет.

Обобщаем: MST — решение, лишённое основных недостатков других протоколов STP.


Настройка MST

Добрались до настройки. Для наглядности возьму следующую простую топологию. Это немного модифицированная топология из примера выше. На коммутаторах VIOS-L2 15.2 созданы VLANs: 2, 3, 4 и 5. Линки между коммутаторами переведены в транк:

D1(config)# interface range g0/0 - 2
D1(config-if-range)# switchport trunk encapsulation dot1q 
D1(config-if-range)# switchport mode trunk 

Сначала настройки региона: имя, ревизия, маппинг.

D1(config)# spanning-tree mode mst
D1(config)# spanning-tree mst configuration 
D1(config-mst)# name CCNP
D1(config-mst)# revision 1
D1(config-mst)# instance 1 vlan 2-3
D1(config-mst)# instance 2 vlan 4-5

Понятно что на двух оставшихся коммутаторах нужно сделать то же самое. Поддерживается до 4096 записей маппинга VLANs в инстансы. Важный момент, настройки применятся только после выхода из режима конфигурирования MST. А пока в режиме, то можно посмотреть текущие настройки:

D1(config-mst)# show current 
Current MST configuration
Name [CCNP]
Revision 0 Instances configured 1

Instance Vlans mapped
-------- -------------------------
0 1-4094
----------------------------------

Здесь видно что по умолчанию все возможные VLANs маппятся в инстанс 0.

И настройки ожидающие применения:

D1(config-mst)# show pending
Pending MST configuration
Name [CCNP]
Revision 1 Instances configured 3

Instance Vlans mapped
----------------------------------
0 1,6-4094
1 2-3
2 4-5
----------------------------------

Важное замечание: revision не изменяется при изменении инстансов либо имени региона, мы его должны изменить руками.

Распределение по инстансам

Тут вопрос: просто раскидать VLANs по инстансам? Для тестовой среды можно и так. И посмотреть как это работает. Оптимально выделять в отдельной инстанс группу VLANs с одинаковой топологией в сети. Более сложный подход предполагает предварительное планирование, с тем чтобы используя тюнинг MST влиять на топологию VLANs.

Кроме этого обычная практика резать определённые VLANs на определённых транках, ручная балансировка. Тут могут возникать ошибки конфигурирования. Расскажу об этом далее.

В любом случае минимальный план для внедрения MST:

  • Определить необходимое количество инстансов;
  • Распределить VLANs по инстансам

В нулевом инстансе осталась только VLAN1, она же является Native VLAN и не планируется для использования.

Тюнинг MST корневой мост

Дерево STP строится от корневого моста, выбирая его принудительно, мы меняем топологию для VLANs. Пока у нас один рутовый коммутатор для всех VLANs и это A1. Он выбрался на основании наименьшего MAC:

D1# show spanning-tree 
 MST0
   Spanning tree enabled protocol mstp
   Root ID    Priority    32768
              Address     5011.a000.1000
              Cost        0
              Port        2 (GigabitEthernet0/1)
              Hello Time   2 sec  Max Age 20 sec  Forward 

Для MSTI1 и MSTI2 аналогично. Отсюда два наглядных вывода:

  • Очень желательно указывать рутовый свич руками. Без такого указания взял и рутом выбрался коммутатор доступа, чего быть не должно;
  • Пока один рут, а он один и тот же для всех VLANs, топология всех VLANs в нашем конкретном случае получилась одинаковая. И то что мы распихали их по двум инстансам результата не даст. Рутовые, назначенные и альтернативные порты одни и те же. Это легко увидеть в выводе:
D1# show spanning-tree mst
...
 MST1    vlans mapped:   2-3
...
 Gi0/0            Altn BLK 20000     128.1    Shr 
 Gi0/1            Root FWD 20000     128.2    Shr 
 Gi0/2            Altn BLK 20000     128.3    Shr 
 MST2    vlans mapped:   4-5
...
 Gi0/0            Altn BLK 20000     128.1    Shr 
 Gi0/1            Root FWD 20000     128.2    Shr 
 Gi0/2            Altn BLK 20000     128.3    Shr

Поэтому и нужно определять VLANs с одинаковой топологией в один инстанс. Если мы их распихаем в разные, вреда не будет, но и пользы нет.

P2P и Shr

В нормальной ситуации на линке между коммутаторами согласуется Full Duplex, STP помечает тип такого порта как Peer-to-Peer (P2P). Если что-пошло не так, интерфейсы в режиме Half Duplex и тип порта Shared (Shr). Что значит Shared? Это среда с общим доменом коллизий, например, когда мы соединили наши коммутаторы через концентратор.

Поэтому когда STP видит Half Duplex — ага, тут возможно коммутаторы подключены не напрямую друг к другу. И выставляет Shr. Меняется логика работы порта, по факту Shr режим повышенной совместимости, со всеми вытекающими. В моей тестовой среде, как я ни старался, какие образы ни брал, P2P увидеть не удалось. Прошу это учесть и не обращать внимания на Shr в выводе устройств.

Настройка корневого моста

Корневой мост настраивается как в классическом STP, только вместо VLAN указывается инстанс:

D1(config)# spanning-tree mst 1 root primary - 1 номер инстанса
D1(config)# spanning-tree mst 2 root secondary - 2 номер инстанса

В конфигурации, однако, это будет выглядеть вот так:

!
spanning-tree mst 1 priority 24576
spanning-tree mst 2 priority 28672
!

Если не помнишь откуда такие цифры, то лучше освежить знания по классическому STP.

Для D2 зеркально и мы получили разную топологию VLANs 2-3 и VLANs 4-5, а значит искомую балансировку по линкам:

A1# show spanning-tree mst
...
 MST1    vlans mapped:   2-3
...
 Gi0/1            Root FWD 20000     128.2    Shr 
 Gi0/2            Altn BLK 20000     128.3    Shr 
 Gi1/0            Altn BLK 20000     128.5    Shr 
 Gi1/1            Altn BLK 20000     128.6    Shr 
 MST2    vlans mapped:   4-5
... 
 Gi0/1            Altn BLK 20000     128.2    Shr 
 Gi0/2            Altn BLK 20000     128.3    Shr 
 Gi1/0            Root FWD 20000     128.5    Shr 
 Gi1/1            Altn BLK 20000     128.6    Shr

Тюнинг MST корневой порт

Кроме этого можно влиять на выбор корневого порта. Зачем? Добавим на всех коммутаторах VLANs 6-7 и сделаем настройки:

D1(config)# spanning-tree mst configuration 
D1(config-mst)# revision 2
D1(config-mst)# instance 3 vlan 6-7

На остальных коммутаторах аналогично. И ещё:

D1(config)# spanning-tree mst 3 root primary
...
D2(config)# spanning-tree mst 3 root secondary 

Что мы получили:

A1# show spanning-tree mst
...
 MST1    vlans mapped:   2-3
...
 Gi0/1            Root FWD 20000     128.2    Shr 
 Gi0/2            Altn BLK 20000     128.3    Shr 
 Gi1/0            Altn BLK 20000     128.5    Shr 
 Gi1/1            Altn BLK 20000     128.6    Shr 
...
 MST3    vlans mapped:   6-7
...
 Gi0/1            Root FWD 20000     128.2    Shr 
 Gi0/2            Altn BLK 20000     128.3    Shr 
 Gi1/0            Altn BLK 20000     128.5    Shr 
 Gi1/1            Altn BLK 20000     128.6    Shr

У нас от A1 к D1 два линка (Gi0/1 и G0/2), а инстансы (1, 3) утилизируют только Gi0/1. Четыре VLANs 2, 3, 6, 7 ходят через интерфейс Gi0/1, при этом Gi0/2 простаивает. Для этого и нужно: задействовать заблокированный линк Gi0/2 и перевести на него две VLANs.

Делается с помощью стоимости порта (port cost) или приоритета порта (port priority).

Настройка cost

Сначала уменьшаем значение cost непосредственно в настройках порта, который мы хотим сделать кореневым. Для нашей топологии это:

A1(config)# interface g0/2
A1(config-if)# spanning-tree mst 3 cost 1000

Смотрим:

A1# show spanning-tree mst
...
 MST1    vlans mapped:   2-3
...
 Gi0/1            Root FWD 20000     128.2    Shr 
 Gi0/2            Altn BLK 20000     128.3    Shr 
 Gi1/0            Altn BLK 20000     128.5    Shr 
 Gi1/1            Altn BLK 20000     128.6    Shr 
...
 MST3    vlans mapped:   6-7
...
 Gi0/1            Altn BLK 20000     128.2    Shr 
 Gi0/2            Root FWD 1000      128.3    Shr 
 Gi1/0            Desg LRN 20000     128.5    Shr 
 Gi1/1            Desg LRN 20000     128.6    Shr

Нормально, теперь VLANs 2, 3 ходят через Gi0/1, а VLANs 6, 7 через Gi0/2.

Настройка priority

Мы сделали настройку для интерфейсов в сторону D1, но D1 может прилечь, поэтому настройку нужно сделать и для интерфейсов в сторону D2. Тут для примера воспользуемся настройкой приоритета. Чтобы порт стал корневым приоритет нужно уменьшать не на нём самом, а на порту с другой стороны линка. Почему это так рассказывается в классическом STP. У нас это Gi1/1 на D2:

D2(config)# interface g1/1
D2(config-if)# spanning-tree mst 3 port-priority 64

Временно погасим D1 и смотрим на A1:

A1# show spanning-tree mst
...
 MST1    vlans mapped:   2-3
...
 Gi1/0            Root FWD 20000     128.5    Shr 
 Gi1/1            Altn BLK 20000     128.6    Shr 
...
 MST3    vlans mapped:   6-7
...
 Gi1/0            Altn BLK 20000     128.5    Shr 
 Gi1/1            Root FWD 20000     128.6    Shr

Инстанс MST

Или MST Instance (MTSI). Самый центровой и важный тут это инстанс 0 (MSTI0). У него даже есть специальное название internal spanning tree (IST). Чем он так важен? Внутреннюю работу MST поддерживает именно он. Только в нём MST распространяет кадр BPDU. Кадр распространяется в переделах региона. В этом кадре содержится информация о всех MSTIs. Изменить номер IST нельзя.

IST работает на всех портах, где работает MST. Даже если IST не указан для этого порта в явном виде. Это нужно учитывать при настройке.

Кроме этого IST принимает участие, когда регион MST соединён с коммутаторами, где работает какой-то другой протокол STP. И этой всей информации достаточно, чтобы рассмотреть типичные ошибки конфигурирования MST.

Теперь про возможное количество инстансов MST. Довольно мутная тема, особенно в разрезе CISCO. Изначально было максимум 16 инстансов для MST: IST + 15 MSTIs. Так написано в материалах CCNA R&S 6.0 и такое можно встретить в других источниках. Сейчас ситуация другая:

The switch stack supports up to 65 MST instances. The number of VLANs that can be mapped to a particular MST instance is unlimited.
...
There is no limit to the number of MST regions in a network, but each region can only support up to 65 spanning-tree instances.

Software Configuration Guide, Cisco IOS Release 15.2(4)E 

Это уже согласно стандарта на MST. И у других вендоров должно быть так же. Однако возможна ситуация когда попадётся очень старый свич CISCO, с древней прошивкой и он будет поддерживать только 16 MSTIs. Или же не CISCO, уже со своими приколами. Поэтому важно использование относительно свежего оборудования с актуальными прошивками.

BPDU

Кадр BPDU для MST отличается от кадра BPDU другого протокола STP. Как же тогда MST совместим с другими протоколами? Ведь переносчиком информации STP служит как раз кадр BPDU. Об этом поговорим ниже начиная с раздела Граничный порт и далее.

Внутри кадра, в секции MST Extension, содержится информация о конфигурации региона. Получив такой кадр, на основании этой информации или её отсутствия, коммутатор делает вывод: линк, откуда прилетела BPDU-шка, он часть моего региона или нет.

При этом в BPDU MST нет информации о маппинге VLANs в инстансы, так как такая информация забивается на каждом коммутаторе вручную. То есть эта информация бесполезна и передавать её нет смысла.

Как же тогда коммутатор определяет соответствие маппинга? Ведь это первый пункт настройки региона. Предаётся хеш таблицы маппинга, MST Config digest. Сравнивая хеш из BPDU с собственным хешем, коммутатор определяет любые изменения в маппинге. И это гораздо быстрее, чем сравнивать саму таблицу, в которой может быть, как уже говорил, до 4096 записей.

Зачем так было сделано? Не берусь утверждать, но думаю из-за потенциально нехилых размеров таблицы маппинга и времени на её обработку она и не была включена в кадр BPDU для MST.

Кусок BPDU для MST

Проверка MST

Вывод команд show spanning-tree, show spanning-tree mst мы уже посмотрели, что тут ещё интересного есть? Посмотреть дайджест MST:

D1# show spanning-tree mst configuration digest
 Name      [CCNP]
 Revision  2     Instances configured 4
 Digest          0x848553630B509E99ECBFA25AD2D6F542
 Pre-std Digest  0x9B52A557B94A3281BCB003D77207478A

Параметр Pre-std Digest показывает что коммутатор способен взаимодействовать с очень старыми коммутаторами, на которых прошивка умеет только MST pre-standard. Для такого взаимодействия нужна настройка на интерфейсе, надеюсь никогда не пригодится и не рассказываю. Стараюсь отказываться от работы со старьём, так как пока ты тратишь на это время, новые технологии появляются, совершенствуются, изменяются, а ты не при делах.

A1# show spanning-tree root
                                         Root    Hello Max Fwd
 MST Instance           Root ID          Cost    Time  Age Dly  Root Port
 ---------------- -------------------- --------- ----- --- ---  ------------
 MST0             32768 5013.a200.0f00         0    2   20  15  Gi1/0           
 MST1             24577 50a5.5f00.0c00     20000    2   20  15  Gi0/1           
 MST2             24578 5013.a200.0f00     20000    2   20  15  Gi1/0           
 MST3             24579 50a5.5f00.0c00      1000    2   20  15  Gi0/2           

Вывод для рутовых портов по инстансам.

A1# show spanning-tree mst configuration 
 Name      [CCNP]
 Revision  2     Instances configured 4
 Instance  Vlans mapped
 --------  ---------------------------------------------------------------------
 0         1,8-4094
 1         2-3
 2         4-5
 3         6-7

Выжимка конфигурации MST.

A1# show spanning-tree mst interface g0/1
 GigabitEthernet0/1 of MST0 is designated forwarding 
...
 Bpdus sent 1227, received 1227
 Instance Role Sts Cost      Prio.Nbr Vlans mapped
 
 0        Desg FWD 20000     128.2    1,8-4094
 1        Root FWD 20000     128.2    2-3
 2        Altn BLK 20000     128.2    4-5
 3        Altn BLK 20000     128.2    6-7

Вывод для порта. Наверное всё тут, вот так кратенько.


Ошибки конфигурирования

Ошибки возникают из-за непонимания как устроен MST. Настройки тут нужно делать не для отдельных VLAN, а для инстанса или сразу всех VLANs, входящих в инстанс.

Первая ошибка не учитывать работу IST на всех портах. Пусть есть два коммутатора внутри региона и мы решили сделать балансировку между ними. На одном транке разрешили VLAN 20 (MSTI1), а на другом VLAN 10 (MSTI0, он же IST). И всё вроде хорошо, по одному линку бегает одна VLAN, по другому другая:

Настройка MSTP

Но IST работает на обох линках, поэтому чтобы не было петли, один из линков должен быть заблокирован для MSTI0. SW1 корневой мост и все порты назначенные. Значит SW2 должен заблокировать один из портов. Всё одинаково кроме приоритета порта во входящей BPDU-шке. Поэтому заблокируется порт на SW2, подключенный к порту с большим номером на SW1. Это Gi1/0/2. Почему это так рассказывается опять же в классическом STP. Получается что VLAN 10 не будет ходить ни по одному из линков. На линке Gi1/0/1-G1/0/1 VLAN 10 неразрешена, а на линке Gi1/0/2-Gi1/0/2 работа MSTI0 заблокирована.

Настройка MSTP

Чтобы избегать таких ситуаций есть два правила:

  • Если планируется балансить VLANs, то они должны быть перенесены из IST в другой MSTI;
  • На всех линках между свичами должны быть разрешены все VLANs, принадлежащие MSTI0 (IST)

Вторая ошибка связана с обрезкой VLANs (VLANs pruning). Допустим у нас в MSTI1 две VLAN: 10 и 20. И три свича. Чтобы помочь балансировке мы обрезали на одном линке VLAN 10, а на другом VLAN 20. И трафик перестал ходить:

Настройка MSTP

Почему так происходит? Потому что всё внутри одного MSTI, а значит нижний линк остаётся заблокированным для всего MSTI1: и для VLAN10, и для VLAN20. То есть существует единственный путь SW3-SW1-SW2. При этом единственном пути мы порезали на линках VLANs. Конечно ничего ходить не будет. Какие тут варианты решения:

  • Всё так же разносить VLANs в разные MSTI;
  • Если мы режем VLANs на каком-то транке для какого-то MSTI, то обязательно нужно резать все VLANs, принадлежащие этому MSTI. Другими словами убираем полностью MSTI с этого линка

Третья ошибка связана с подключением региона MST к другому протоколу STP. Как уже говорилось выше, таких ситуаций нужно избегать. Но вот допустим, из-за неверной настройки один из свичей работает под управлением другого протокола STP. Как поведёт себя регион? Как поведёт себя этот свич? Здесь возникает понятие граничного порта MST (Boundary Port).

Граничный порт MST

An MST region boundary is any port that connects to a switch that is in a different MST region or that connects to 802.1D or 802.1W BPDUs

Поэтому в обычной ситуации, когда настроен единый регион MST, никаких граничных портов быть не должно. В MST включены механизмы совместимости с другими протоколами STP:

PVST+MSTPRapid PVST+
PVST+YesYes (with restrictions)Yes (reverts to PVST+)
MSTPYes (with restrictions)YesYes (reverts to PVST+)
Rapid PVST+Yes (reverts to PVST+)Yes (reverts to PVST+)Yes
Совместимость протоколов STP CISCO

Граничный порт имеет несколько режимов работы. Переведём A1 в режим PVST+ и смотрим на D1:

D1# show spanning-tree mst
...
MST1    vlans mapped:   2-3
 Bridge        address 50a5.5f00.0c00  priority      24577 (24576 sysid 1)
 Root          this switch for MST1
 Interface        Role Sts Cost      Prio.Nbr Type
 
 Gi0/0            Desg FWD 20000     128.1    Shr 
 Gi0/1            Desg LRN 20000     128.2    Shr Bound(PVST) 
 Gi0/2            Desg LRN 20000     128.3    Shr Bound(PVST) 

Без изучения MST наличие таких портов в выводе легко может привести в замешательство: что это там за PVST в скобках..? MST для своего граничного порта автоматически определяет какой протокол на другой стороне линка.


Подключение региона MST к другому протоколу STP

Это уже тонкости работы MST. Для совместимости с PVST+ (и RSTP тоже) был разработан PVST simulation mechanism. Кратко о работе механизма симуляции: MSTIs за границы региона MST никогда не выходят, всё взаимодействие ведётся через IST. Когда регион получает от коммутатора с PVST+ BPDUs, то BPDU инстанса VLAN1 копируется в IST. Если же наоборот региону надо отправить BPDU, то из IST BPDU копируется для всех инстансов PVST+.

Пример

Мы перевели A1 в PVST+, поскольку регион для A1 как единый логический свич, то между регионом и A1 форвардит только один линк (и регион у нас тут рут):

A1# show spanning-tree 
 VLAN0001
...
 Interface           Role Sts Cost      Prio.Nbr Type
 
 Gi0/1               Altn BLK 4         128.2    Shr 
 Gi0/2               Altn BLK 4         128.3    Shr 
 Gi1/0               Root FWD 4         128.5    Shr 
 Gi1/1               Altn BLK 4         128.6    Shr 

Со стороны региона BPDU из IST копируется во инстансы PVST+. При этом регион видоизменяет свою BPDU'шку для того, чтобы она стала понятна A1. Захватим трафик для Gi1/0:

Как видно, поскольку регион рут, то он напихивает A1 BPDU'шками. Семь VLANs, семь инстансов, семь разных BPDU от D2. На скрине конкретно выделен для VLAN1. Формат BPDU PVST+.

И важный момент, тут возможна балансировка трафика VLANs по разным линкам, если на A1 выставить руками разный cost к руту на линках для каждой VLAN.

PVST simulation mechanism

Ну и собственно квинтэссенция механизма симуляции, работа возможна только в двух случаях:

  • Регион корневой мост для всех VLANs (предпочтительная конфигурация, возможна балансировка трафика);
  • Регион не является корневым мостом ни для какой VLAN (балансировки трафика нет)

Если возникает смешанная ситуация, и допустим, регион будучи рутом получает superior BPDU в какой-то VLAN или регион не рут получает inferior BPDU в какой-то VLAN, то граничный порт блокируется, root inconsistent blocking state. Так происходит во избежание петли и называется PVST simulation check. С этим связана третья ошибка конфигурации MST.

Переведём A1 в рут для VLAN1:

A1(config)# spanning-tree vlan 1 root primary 

Смотрим на D2:

*Jul 12 16:53:53.421: %SPANTREE-2-PVSTSIM_FAIL: Blocking root port Gi1/0: Inconsitent inferior PVST BPDU received on VLAN 2...
D2# show spanning-tree 
 MST0    vlans mapped:   1,8-4094
... 
 Gi0/0               Desg FWD 20000     128.1    Shr 
 Gi1/0               Root BKN*20000     128.5    Shr Bound(PVST) *PVST_Inc 
 Gi1/1               Altn BLK 20000     128.6    Shr Bound(PVST) 

Что тут произошло? Регион согласился что A1 теперь рут для VLAN1 и тут же получил inferior BPDU для VLAN2.

Подключение региона MST к другому региону

На данный момент не готов разбираться, а тем более не готов рассказывать другим. Может позже. Почему? Потому что не видел в продакшене двух регионов MST и вероятность увидеть такое в будущем мала. Лучше потрачу время/силы на разбор глав жирного ENCOR. И обязательно выложу ещё статьи.

Кстати, в CCNP Enterprise не рассматривается подключение двух регионов MST. В CCNP R&S и того информации меньше, буквально пара страничек про MST. Единственное что тут хотел показать, увеличим номер ревизии на D2, смотрим на D1:

D1# show spanning-tree mst 
 MST0    vlans mapped:   1,8-4094
... 
 Gi0/0            Altn BLK 20000     128.1    Shr Bound(RSTP) 
 Gi0/1            Altn BLK 20000     128.2    Shr Bound(PVST) 
 Gi0/2            Root BKN*20000     128.3    Shr Bound(PVST) *PVST_Inc 

Свичи D1 и D2 развалились на два разных региона. Режим совместимости между регионами RSTP, кроме того из-за неправильной настройки всё на всё заблокировалось. Регионы общаются через IST, данными о MSTIs не обмениваются. Главное тут помнить что регионы взаимодействуют как логические свичи.

На этом закругляюсь, наверняка тут полно ещё подводных камней, кто захочет вникнуть подробнее, вот полезная статья INE, Welcome. В завершение предлагаю для закрепления знаний выполнить лабу MST от Рене.

Добавить комментарий