Петли L2, методы борьбы (PortFast, LoopGuard, BPDU guard, BPDU filter)


Петли в сетях

Петли в коммутируемой сети могут возникнуть по нескольким причинам:
  • Отключен STP;
  • PVST BPDU передает идентификатор VLAN. Если на access-интерфейсе полученный идентификатор VLAN'а не совпадает с VLAN ID в котором было получено BPDU, то порт переводится в заблокированное состояние для этого VLAN;
  • Различные версии STP;
  • Разные native VLAN'ы на концах транка;
  • Слишком маленькие таймеры STP;
  • Большое количество хопов в топологии STP. 

Опциональные настройки STP
  • Loop Guard
  • BPDU Guard
  • Root Guard
  • PortFast
  • BPDU Filter
  • UDLD
Функции PortFast, BPDU guard, BPDU filtering, EtherChannel guard, root guard или loop guard могут быть настроены в режиме PVST+, rapid PVST+ или MSTP. Функции UplinkFast, BackboneFast или cross-stack UplinkFast могут быть настроены в режиме rapid PVST+ или MSTP, но они будут оставаться выключенными (inactive) до тех пор пока режим не будет изменен на PVST+ (так как они уже вшииы в rapid pvst+)

Port Fast
Portfast функция на свичах для протокола Spanning Tree, которая позволяет переводить порт в режим передачи мгновенно. Как только втыкнуть в него кабель. Это применяеться для того чтобы включать рабочие станции и сервера в сеть немедленно, без ожидания конвергенции Spanning Tree. Не рекомендуют включать в таком режиме свичи, во избежания образования петель.
Portfast — функция, которая позволяет порту пропустить состояния listening и learning и сразу же перейти в состояние forwarding. Настраивается на портах уровня доступа, к которым подключены пользователи или сервера. Фактически, PortFast меняет две вещи в стандартной работе STP:
  • порт пропускает состояния listening и learning
  • при изменении статуса порта, не отправляется сообщение о изменении состояния порта TCN BPDU (topology change notification BPDU)
Но, если включить PortFast на портах, которые соединены с другими коммутаторами, то есть риск создания петли. Так как, после получения BPDU порт остается в состоянии Forwarding. За это время, уже может образоваться петля. Поэтому, в связке с PortFast, как правило, используется BPDUGuard (хотя и это, конечно же, не даст 100% гарантии, что не будет петли).

Настройка Port Fast
Синтаксис команды для настройки Port Fast на интерфейсе:
sw(config-if)# spanning-tree portfast [disable | trunk]

Настройка Port Fast на access-интерфейсе:
sw(config)#interface fa0/1 
sw(config-if)# spanning-tree portfast

Настройка Port Fast на интерфейсе, который работает в режиме trunk (тегированый порт)
(Если на интерфейсе, который работает в режиме транка выполнить команду без параметра trunk, то функция Port Fast не будет применена. )
sw(config)#interface fa0/1 
sw(config-if)# spanning-tree portfast trunk

Функцию Port Fast можно настроить глобально на всех интерфейсах в режиме access:
sw(config)#spanning-tree portfast default

Отключить Port Fast на интерфейсе:
sw(config-if)# spanning-tree portfast disable


Просмотр информации о настройках Port Fast
Просмотр информации о статусе функции Port Fast на интерфейсе:
sw# show spanning-tree interface fa 0/1 portfast

Просмотр информации о настройках spanning-tree на интерфейсе:
sw# show spanning-tree interface fa 0/1 detail

Если Port Fast была включена глобально на всех access-портах, то это можно посмотреть так:
sw# show spanning-tree summary


---------------------------------------Безопасность STP----------------------------------------------
 

BPDU Guard
Функция, которая позволяет выключать порт при получении BPDU.
PortFast BPDU guard предотвращает петли так: он переводит нетранковые поты в состояние errdisable, когда BPDU приходит на порт. Когда на свитче настроен BPDU guard, spanning tree выключает PortFast-configured порты, которые получают BPDUs вместо того, чтоб переводить их в состояние blocked. При правильной конфигурации  PortFast интерфейсы не получают BPDUs.
Если в конфигурации отображается порт, который должен быть включен, но программное обеспечение на коммутаторе обнаружило порт в состояние ошибки, то программное обеспечение отключит этот порт. Когда порт отключается из-за ошибки, он фактически выключается, а прием и отправка трафика через него не выполняются. Цвет индикатора порта становится оранжевым, а при выполнении команды show interfaces отображается состояние порта err-disabled.


Включение BPDU Guard глобально на коммутаторе, на портах с включенной функцией Port Fast:
sw(config)# spanning-tree portfast bpduguard default

Настройка BPDU Guard на интерфейсе:
sw(config)#interface fa0/1 
sw(config-if)# spanning-tree bpduguard enable

Информация о BPDU содержится в  spanning-tree на интерфейсе:
sw1#sh span int fa0/1 detail


BPDU Filtering

• Если настраивается глобально, а не в режиме интерфейса
BPDU Filtering - настраивается поверх PORTFAST, блокирует попытки отправить BPDU с интерфейса на котором включен, так конечный пользователь не знает что работает STP. Разница с BPDU guard в том, что при получении пакета, порт не отключается как у BPDU guard, на нем отключается PORTFAST и функция BPDU guard, т.е. порт становится обычным STP портом, в том числе посылает и принимает BPDU пакеты
• If BPDU Filtering is configured from the interface configuration mode the result is completely different as this will cause the specific port to stop sending AND receiving (BPDUs are dropped) BPDUs. Tthe port ignores any incoming BPDUs and changes to Forwarding state. this solution is not recommended as it can result in bridging loops.

Включение BPDU Filtering глобально на коммутаторе, на портах с включенной функцией Port Fast:
sw(config)# spanning-tree portfast bpdufilter default

Настройка BPDU Filtering на интерфейсе:
sw(config)#interface fa0/1 
sw(config-if)# spanning-tree bpdufilter enable

Просмотр информации о настройках BPDU Filtering
Просмотр информации о настройках spanning-tree на интерфейсе:
sw1#sh spanning-tree interface fa0/1 detail

if you enable BPDU Guard on the same interface as BPDU Filtering, BPDU Guard has no effect because BPDU Filtering takes precedence over BPDU Guard. Configuation of BPDU Filtering is not a recommended configuration.


Root Guard
Root Guard -- если функция включена на интерфейсе, то при получении на нём BPDU лучшего, чем текущий корневой коммутатор, порт переходит в состояние root-inconsistent (эквивалентно состоянию listening). После того как порт перестает получать BPDU, он переходит в нормальное состояние.

Включение Root Guard на интерфейсе (переводит порт в роль designated):
sw(config)# interface fa0/1 
sw(config-if)# spanning-tree guard root

Посмотреть какие порты в состоянии inconsistent:
sw# show spanning-tree inconsistentports


Loop Guard
Одна из проблем с STP в том, что само оборудование, которое его использует, может быть причиной сбоя и создания петли. Для предотвращения подобных сбоев и была создана функция Loop Guard. Loop Guard - обеспечивает дополнительную защиту на 2 уровне от возникновения петель. STP петля возникает когда блокированный порт в избыточной топологии ошибочно переводится в состояние forwarding (передачи). Это может возникнуть например когда блокированный STP порт перестаёт получать BPDU. Так как работа протокола STP полагается на постоянное присутствие BPDU пакетов в сети.(Designated (назначенный) порт постоянно должен передавать BPDU пакеты а non-designated должен их получать). Как только на порт перестают поступать BPDU STP понимает это как изменение топологии и исчезновение петли и переводит порт в состояние forwarding. В случае использования Loop Guard порт после прекращения получения пакетов BPDU переводится в состояние loop-inconsistent и остаются по прежнему блокированным. А в логах появится следующее сообщение:
%SPANTREE-2-LOOPGUARD_BLOCK: Loop guard blocking port FastEthernet0/15 on VLAN0037

Как только на порт снова начинают поступать BPDU порт переводится в состояние согласно содержанию пакетов BPDU, а в логах появится следующее сообщение:
%SPANTREE-2-LOOPGUARD_UNBLOCK: Loop guard unblocking port FastEthernet0/15 on VLAN0037

На каких портах следует включать Loop Guard? Loop guard должен быть включен на root и alternate портах. По умолчанию Loop guard выключен.

Для того что бы его включить используйте следующие команды:
Router(config)#interface gigabitEthernet 1/1
Router(config-if)#spanning-tree guard loop

Что бы включить Loop guard глобально:
(config)#spanning-tree loopguard default

Команда для проверки статуса Loop Guard:
#show spanning-tree summary


Хабра "Идеальный Шторм"

Comments

Popular posts from this blog

Проброска static маршрута в OSPF

EtherChannel