ѕоддержим в трудное врем€ —пециальное предложение на техническую поддержку вашей »“ - инфраструктуры силами наших экспертов ѕодобрать тариф
ѕоставка оборудовани€ √аранти€ и помощь с настройкой. —кидка дл€ наших читателей по промокоду WIKIMERIONET  упить
»нтерфейс статистики Merion Mertics показывает ключевые диаграммы и графики по звонкам, а также историю звонков в формате, который легко поймет менеджер ѕопробовать бесплатно
¬недрение
офисной телефонии
Ўаг на пути к созданию доступных унифицированных коммуникаций в вашей компании ¬недрить
»нтеграци€ с CRM ѕомогаем навести пор€док с данными
и хранить их в единой экосистеме
ѕодключить
»“ Ѕезопастность ”мна€ информационна€ безопасность дл€ вашего бизнеса «аказать
ћерион Ќетворкс

11 минут чтени€

¬ыходим на новый уровень. ƒл€ изучени€ следующей темы вы уже должны хорошо понимать св€зующее дерево. —в€зующее дерево (Spanning Tree Protocol STP) Ч это важна€ тема. ≈сть много вещей, которые могут пойти не так, и в этой статье мы рассмотрим р€д инструментов, которые мы можем использовать дл€ защиты нашей топологии св€зующего дерева.

Spanning Tree Toolkit

ƒл€ профессионалов

  • PortFast: мы видели это в статье о spanning tree и rapid spanning tree. ќн настроит порт доступа как пограничный порт, поэтому он переходит в режим forwarding немедленно.
  • BPDU Guard: это отключит (err-disable) интерфейс, который имеет настроенный PortFast, если он получает BPDU.
  • BPDUFilter: это будет подавл€ть BPDU на интерфейсах.
  • Root Guard: это предотвратит превращение соседнего коммутатора в корневой мост, даже если он имеет лучший идентификатор моста.
  • UplinkFast: мы видели это в статье о св€зующем дереве. ќн улучшает врем€ конвергенции.
  • BackboneFast: мы также видели это в статье о св€зующем дереве. ќно улучшает врем€ конвергенции, если у вас есть сбой косвенной св€зи.

UplinkFast и BackboneFast не требуютс€ дл€ rapid spanning tree, поскольку оно уже реализовано по умолчанию. ћы начнем с BPDUguard:

BPDUguard

¬ топологии выше мы имеем идеально работающую топологию остовного дерева. ѕо умолчанию св€зующее дерево будет отправл€ть и получать BPDU на всех интерфейсах. ¬ нашем примере у нас есть компьютер, подключенный на интерфейсе fa0/2 коммутатора B. ≈сть кто-то, кто с враждебными намерени€ми мог бы запустить инструмент, который сгенерирует BPDU с превосход€щим ID моста. „то же произойдет- так это то, что наши коммутаторы будут считать, что корневой мост теперь может быть достигнут через коммутатор B, и у нас будет повторный расчет св€зующего дерева. «вучит не очень хорошо, правда?

’акер в середине

ћожно поставить человека (хакера) в середине топологии дл€ атаки так, чтобы никто не знал. ѕредставьте себе, что хакер подключает свой компьютер к двум коммутаторам. ≈сли хакер станет корневым мостом, то весь трафик от коммутатора ј или коммутатора C к коммутатору ¬ будет проходить через него. ќн запустит Wireshark и подождет, пока произойдет чудо.

err-disable

BPDUguard гарантирует, что, когда мы получаем BPDU на интерфейс, интерфейс перейдет в режим err-disable.

BPDUguard

„тобы продемонстрировать работу BPDUguard будем использовать два коммутатора. Ќастроем интерфейс fa0/16 коммутатора B так, что он перейдет в режим err-disable, если он получит BPDU от коммутатора C.

SwitchB(config)#interface fa0/16
SwitchB(config-if)#spanning-tree bpduguard enable

¬от как вы включаете его в интерфейсе. »мейте в виду, что обычно вы никогда не будете делать это между коммутаторами. ¬ы должны настроить это на интерфейсах в режиме доступа, которые подключаютс€ к компьютерам.

SwitchB

ј-а... вот и наш интерфейс.

SwitchB(config-if)#no spanning-tree bpduguard
SwitchB(config-if)#shutdown
SwitchB(config-if)#no shutdown

»збавитьс€ от BPDUguard можно использу€ команды shut/no shut, чтобы сделать интерфейс снова рабочим.

SwitchB(config)#spanning-tree portfast bpduguard

¬ы также можете использовать команду spanning-tree portfast bpduguard. Ёто позволит глобально активировать BPDUguard на всех интерфейсах, которые имеют включенный portfast.

SwitchB(config)#spanning-tree portfast default

Portfast также может быть включен глобально дл€ всех интерфейсов, работающих в режиме доступа.

show spanning-tree summary

Ёто полезна€ команда, позвол€юща€ проверить свою конфигурацию. ¬ы видите, что portfast и BPDUGuard были включены глобально.

BPDUGuard переведет интерфейс в режим err-disable.  роме того, можно фильтровать сообщени€ BPDU с помощью BPDUfilter. BPDUfilter может быть настроен глобально или на уровне интерфейса и есть разница:

  • √лобальный: если вы включите bpdufilter глобально, любой интерфейс с включенным portfast станет стандартным портом.
  • »нтерфейс: если вы включите BPDUfilter на интерфейсе, он будет игнорировать вход€щие BPDU и не будет отправл€ть никаких BPDU.

¬ы должны быть осторожны, когда включаете BPDUfilter на интерфейсах. ¬ы можете использовать его на интерфейсах в режиме доступа, которые подключаютс€ к компьютерам, но убедитесь, что вы никогда не настраиваете его на интерфейсах, подключенных к другим коммутаторам. ≈сли вы это сделаете, вы можете получить цикл.

BPDUfilter

ƒл€ демонстрации работы BPDUfilter мы будем снова использовать коммутатор B и коммутатор C.

SwitchB(config)#interface fa0/16
SwitchB(config-if)#spanning-tree portfast trunk
SwitchB(config-if)#spanning-tree bpdufilter enable	

ќн перестанет посылать BPDU и будет игнорировать все, что будет получено.

SwitchB#debug spanning-tree bpdu	

¬ы не увидите никаких интересных сообщений, но если вы включите отладку BPDU, то заметите, что он больше не отправл€ет никаких BPDU. ≈сли вы хотите, вы также можете включить отладку BPDU на коммутаторе C, и вы увидите, что нет ничего от коммутатора B.

SwitchB(config)#interface fa0/16
SwitchB(config-if)#no spanning-tree bpdufilter enable

ƒавайте избавимс€ от команды BPDUfilter на уровне интерфейса.

SwitchB(config)#spanning-tree portfast bpdufilter default

¬ы также можете использовать глобальную команду дл€ BPDUfilter. Ёто позволит включить BPDUfilter на всех интерфейсах, которые имеют portfast.

RootGuard

≈ще один вариант, с помощью которого мы можем защитить наше св€зующее дерево, - это использовать RootGuard. ѕроще говор€, RootGuard позаботитс€ о том, чтобы вы не принимали определенный коммутатор в качестве корневого моста. BPDU отправл€ютс€ и обрабатываютс€ нормально, но, если коммутатор внезапно отправл€ет BPDU с идентификатором верхнего моста, вы не будете принимать его в качестве корневого моста. ќбычно коммутатор D становитс€ корневым мостом, потому что у него есть лучший идентификатор моста, к счастью, у нас есть RootGuard на коммутатое C, так что этого не произойдет!

SwitchB - SwitchC

–ассмотрим с вами конфигурацию с коммутатором B и коммутатором C.

SwitchB(config)#spanning-tree vlan 1 priority 4096

ƒавайте убедимс€, что коммутатор C не €вл€етс€ корневым мостом.

SwitchB

¬от как мы включаем RootGuard на интерфейсе.

SwitchB#debug spanning-tree events
Spanning Tree event debugging is on	

Ќе забудьте включить отладку, если вы хотите увидеть событи€.

SwitchC(config)#spanning-tree vlan 1 priority 0	

ƒавайте перенастроим коммутатор B, изменив приоритет на наименьшее возможное значение 0 на коммутаторе C. ќн теперь должен стать корневым мостом.

SwitchB

¬от так коммутатор B не будет принимать коммутатор C в качестве корневого моста. Ёто заблокирует интерфейс дл€ этой VLAN.

show spanning-tree inconsistentports

¬от еще одна полезна€ команда, чтобы проверить, работает ли RootGuard.

—в€зующее дерево становитс€ все более безопасным с каждой минутой! ќднако есть еще одна вещь, о которой мы должны подуматьЕ

¬олоконные кабели

≈сли вы когда-либо использовали волоконные кабели, вы могли бы заметить, что существует другой разъем дл€ передачи и приема трафика. ≈сли один из кабелей (передающий или принимающий) выйдет из стро€, мы получим однонаправленный сбой св€зи, и это может привести к петл€м св€зующего дерева. —уществует два протокола, которые могут решить эту проблему:

  • LoopGuard
  • UDLD

ƒавайте начнем с того, что внимательно рассмотрим, что произойдет, если у нас произойдет сбой однонаправленной св€зи.

–ежим блокировки

ѕредставьте себе, что между коммутаторами волоконно-оптические соединени€. Ќа самом деле имеетс€ другой разъем дл€ передачи и приема.  оммутатор C получает BPDU от коммутатора B, и в результате интерфейс стал альтернативным портом и находитс€ в режиме блокировки.

ѕовреждение коннектора

“еперь что-то идет не так... transmit коннектор на коммутаторе B к коммутатору C был съеден мышами. ¬ результате коммутатор C не получает никаких BPDU от коммутатора B, но он все еще может отправл€ть трафик дл€ переключени€ между ними.

ѕоскольку коммутатор C больше не получает BPDU на свой альтернативный порт, он перейдет в forwarding режим. “еперь у нас есть one way loop (петл€ в один конец), как указано зеленой стрелкой.

LoopGuard

ќдин из методов, который мы можем использовать дл€ решени€ нашего однонаправленного сбо€ св€зи Ч это настройка LoopGuard.  огда коммутатор отправл€ет, но не получает BPDU на интерфейсе, LoopGuard поместит интерфейс в состо€ние несогласованности цикла и заблокирует весь трафик!

“опологи€

ћы снова будем использовать эту топологию дл€ демонстрации LoopGuard.

SwitchA(config)#spanning-tree loopguard default
SwitchB(config)#spanning-tree loopguard default
SwitchC(config)#spanning-tree loopguard default	

»спользуйте команду spanning-tree loopguard по умолчанию, чтобы включить LoopGuard глобально

SwitchB(config)#interface fa0/16
SwitchB(config-if)#spanning-tree portfast trunk
SwitchB(config-if)#spanning-tree bpdufilter enable	

¬ примере у нас нет никаких волоконных разъемов, поэтому мы не сможем создать однонаправленный сбой св€зи. ќднако мы можем смоделировать его с помощью BPDUfilter на интерфейсе SwitchB fa0/16.  оммутатор C больше не будет получать никаких BPDU на свой альтернативный порт, что заставит его перейти в режим переадресации.

SwitchC

ќбычно это вызвало бы петлю, но, к счастью, у нас есть настроенный LoopGuard. ¬ы можете увидеть это сообщение об ошибке, по€вл€ющеес€ в вашей консоли. ѕроблема решена!

SwitchC(config-if)#spanning-tree guard loop

≈сли вы не хотите настраивать LoopGuard глобально, вы т можете сделать это на уровне интерфейса.

ƒругой протокол, который мы можем использовать дл€ борьбы с однонаправленными сбо€ми св€зи, называетс€ UDLD (UniDirectional Link Detection). Ётот протокол не €вл€етс€ частью инструментари€ св€зующего дерева, но он помогает нам предотвратить циклы.

ѕроще говор€, UDLD Ч это протокол второго уровн€, который работает как механизм keepalive. ¬ы посылаете приветственные сообщени€, вы их получаете, и все прекрасно.  ак только вы все еще посылаете приветственные сообщени€, но больше их не получаете, вы понимаете, что что-то не так, и мы блокируем интерфейс.

“опологи€

”бедитесь, что вы отключили LoopGuard перед работой с UDLD. ћы будем использовать ту же топологию дл€ демонстрации UDLD.

UDLD

—уществует несколько способов настройки UDLD. ¬ы можете сделать это глобально с помощью команды udld, но это активирует только UDLD дл€ оптоволоконных линий св€зи! —уществует два варианта дл€ UDLD:

  • Normal (default)
  • Aggressive

 огда вы устанавливаете UDLD в нормальное состо€ние, он помечает порт как неопределенный, но не закрывает интерфейс, когда что-то не так. Ёто используетс€ только дл€ того, чтобы Ђинформироватьї вас, но это не предотвратит циклы.

јгрессивный - это лучшее решение, когда пропадает св€зь с соседом. ќн будет посылать кадр UDLD 8 раз в секунду. ≈сли сосед не отвечает, интерфейс будет переведен в режим errdisable.

udld
SwitchB(config)#interface fa0/16
SwitchB(config-if)#udld port aggressive
SwitchC(config)#interface fa0/16
SwitchC(config-if)#udld port aggressive	

ћы будем использовать коммутатор B и C, чтобы продемонстрировать UDLD. Ѕудем использовать агрессивный режим, чтобы мы могли видеть, что интерфейс отключаетс€, когда что-то не так.

debug udld events

≈сли вы хотите увидеть, что UDLD работает, вы можете попробовать выполнить отладку.

“еперь самое сложное будет имитировать однонаправленный сбой св€зи. LoopGuard был проще, потому что он был основан на BPDUs. UDLD запускает свой собственный протокол уровн€ 2, использу€ собственный MAC-адрес 0100.0ccc.сссс.

SwitchC(config)#mac access-list extended UDLD-FILTER
SwitchC(config-ext-macl)#deny any host 0100.0ccc.cccc
SwitchC(config-ext-macl)#permit any any
SwitchC(config-ext-macl)#exit
SwitchC(config)#interface fa0/16
SwitchC(config-if)#mac access-group UDLD-FILTER in

Ёто творческий способ создавать проблемы. ѕри фильтрации MAC-адреса UDLD он будет думать, что существует сбой однонаправленной св€зи!

SwitchB ¬ы увидите много отладочной информации, но конечным результатом будет то, что порт теперь находитс€ в состо€нии err-disable. show udld

¬ы можете проверить это с помощью команды show udld.

LoopGuard и UDLD решают одну и ту же проблему: однонаправленные сбои св€зи.

ќни частично пересекаютс€, но есть р€д различий, вот общий обзор:

LoopGuardUDLD
Ќастройки√лобально/на порту√лобально (дл€ оптики)/на порту
VLAN?ƒа
Ќет, на порту
јвтосохранениеƒаƒа, но вам нужно настроить errdisable timeout.
«ащита от сбоев STP из-за однонаправленных св€зейƒа - нужно включить его на всех корневых и альтернативных портахƒа - нужно включить его на всех интерфейсах.
«ащита от сбоев STP из-за сбоев программного обеспечени€ (нет отправки BPDU)ƒаЌет
«ащита от неправильного подключени€ (коммутационный оптический приемопередающий разъем)Ќетƒа

≈сть еще одна последн€€ тема, которую хотелось бы объ€снить, это не протокол св€зующего дерева, но речь идет о избыточных ссылках, поэтому € оставлю ее здесь. Ёто называетс€ FlexLinks.

FlexLinks

¬от в чем дело: при настройке FlexLinks у вас будет активный и резервный интерфейс. ћы настроим это на коммутаторе C:

  • Fa0/14 будет активным интерфейсом.
  • Fa0/16 будет интерфейс резервного копировани€ (этот блокируетс€!).

ѕри настройке интерфейсов в качестве FlexLinks они не будут отправл€ть BPDU. Ќет никакого способа обнаружить петли, потому что мы не запускаем на них св€зующее дерево. ¬с€кий раз, когда наш активный интерфейс выходит из стро€, резервный интерфейс замен€ет его.

SwitchC(config)#interface fa0/14
SwitchC(config-if)#switchport backup interface fa0/16

»менно так мы делаем интерфейс fa0/16 резервной копией интерфейса fa0/14.

ќтключение

¬ы можете видеть, что св€зующее дерево отключаетс€ дл€ этих интерфейсов.

show interfaces switchport backup

ѕроверьте нашу конфигурацию с помощью команды show interfaces switchport backup. ¬от и все, что нужно было сделать. Ёто интересное решение, потому что нам больше не нужно св€зующее дерево. ¬едь в любой момент времени активен только один интерфейс.

SwitchC(config)#interface f0/14
SwitchC(config-if)#shutdown

ƒавайте закроем активный интерфейс.

Ќеактивный интерфейс

¬ы можете видеть, что fa0/16 стал активным. ¬от и все.