Loopdetect своими руками
Суть проблемы
Одним из самых страшных бичей сети ethernet являются, так называемые, петли. Они возникают когда (в основном из-за человеческого фактора) в топологии сети образуется кольцо. К примеру, два порта коммутатора соединили патч-кордом (часто бывает когда два свича заменяют на один и не глядя втыкают всё, что было) или запустили узел по новой линии, а старую отключить забыли (последствия могут быт печальными и трудно выявляемыми). В результате такой петли пакеты начинают множиться, сбиваются таблицы коммутации и начинается лавинообразный рост трафика. В таких условиях возможны зависания сетевого оборудования и полное нарушение работы сети.
Помимо настоящих петель не редки случаи когда при выгорания порта (коммутатора или сетевой карты) он начинает возвращать полученные пакеты назад в сеть, при этом чаще всего соединение согласовывается в 10M, а линк поднимается даже при отключенном кабеле. Когда в сегменте такой порт только один, последствия могут быть не столь плачевными, но всё же весьма чувствительны (особенно сильно страдают пользователи висты и семёрки). В любом случае с такими вещами нужно нещадно бороться и понимать тот факт, что намеренно или случайно создавая петлю, пусть и на небольшой период времени, можно отключить целый сегмент сети.
Матчасть
К счастью большинство современных управляемых коммутаторов, в том или ином виде, имеют функции выявления петель (loopdetect, stp), и даже более того, семейство протоколов stp позволяет специально строить кольцевую топологию (для повышения отказоустойчивости и надёжности). Но тут есть и обратная сторона медали, не редко случается так, что один сгоревший порт может оставить без связи целый район. Или скажем у того же stp перестроение топологии происходит далеко не мгновенно, связь в этот момент, естественно, оставляет желать лучшего. Кроме того, некоторые производители весьма халатно относятся к реализации протоколов обнаружения петель, скажем DES-3016 (глинк) вообще не может определить петлю если просто соединить два его порта.
Принципы выявления
Принцип обнаружения петель (loopdetect) довольно простой. В сеть отправляется специальный пакет с броадкаст адресом (предназначен всем) и если он вернулся назад, считаем, что сеть за этим интерфейсом закольцована. Дальнейшие действия зависят от типа оборудования и настроек. Чаще всего порт полностью или частично (в отдельном vlan) блокируется, событие записывается в логи, отправляются snmp-трапы. Тут в дело вступают системные администраторы и аварийная служба.
Если вся сеть управляемая, то выявить и устранить петлю довольно не сложно. Но не так уж мало сетей где к одному порту подключена цепочка из 5 — 6 неуправляемых коммутаторов. Устранение такой петли может занять немало времени и сил. Процесс поиска же сводится к последовательному отключению (включению) портов. Для определения наличия петли используется либо вышестоящий управляемый коммутатор, либо какой-нибудь снифер (wireshark, tcpdump). Первый способ весьма опасен в следствие наличия задержки между включением и выключением блокировки, в лучшем случае у пользователей просто будут лаги, а в худшем — сработает loopdetect выше по линии и отвалится уже куда больший сегмент. Во втором случае опасности для пользователей нет, но зато намного сложнее определять наличие петли (особенно в небольшом сегменте, где мало броадкаст трафика), всё-таки снифер вещь, по определению, пассивная.
Своими руками
Как было сказано выше, аппаратных реализаций поиска петель хватает с лихвой. Так что не долго думая, включаю wireshark настраиваю фильтр и смотрю, что и как делает коммутатор. Собственно всё просто: в порт отправляется пакет ethernet с адресом назначения cf:00:00:00:00:00, типом 0x9000 (CTP) и c неведомым номером функции 256 (в найденной мной документации описаны только две). Адрес назначение является броадкастовым, так что при наличии в сети петли назад должно вернутся несколько копий этого пакета.
С получившимся скриптом можно ознакомится далее.
03. Loopback detection
3.2. Конфигурация Loopback detection
Включить функцию Loopback detection;
Настроить действие при обнаружении петли;
Отобразить информацию о конфигурации и отладочную информацию;
Включить отправку trap.
Команда
Описание
no loopback-detection interval-time
! В режиме глобальной конфигурации
loopback-detection control-recovery timeout
! В режиме глобальной конфигурации
Задать время восстановления после выключена порта при обнаружении петли. После применения значения 0 восстановление не происходит автоматически (по-умолчанию).
2.Включить функцию Loopback detection:
Команда
Описание
no loopback-detection specified-vlan
! В режиме конфигурации интерфейса
Задать VLAN для которых будет проверяться наличие петли. Команда no удаляет эту конфигурацию.
3.Настроить действие при обнаружении петли:
Команда
Описание
no loopback-detection control
! В режиме конфигурации интерфейса
Выбрать действие при обнаружении петли. Команда no удаляет эту конфигурацию.
4. Отобразить информацию о конфигурации и отладочную информацию:
Команда
Описание
no debug loopback-detection
! В Admin режиме
Выводить отладочную информацию. Команда no отменяет вывод отладочной информации.
show loopback-detection [interface ]
Вывести информацию и состоянии и конфигурации Loopback-detection. Если указан параметр interface информация будет выведена только для указанного интерфейса.
5.Включить отправку trap:
Команда
Описание
loopback-detection trap enable
no loopback-detection trap enable
! В режиме глобальной конфигурации
Включить отправку SNMP trap при обнаружении петли. Команда no отключает эту функцию.
3.3. Пример конфигурации Loopback detection
Чтобы защитить сеть от последствий возникновения петли коммутации из-за ошибки пользователя, неиcправности линии или оборудования, подключенных к порту 1/0/1 коммутатора Switch, необходимо настроить функцию loopback-detection.
Конфигурация коммутатора будет выглядеть следующим образом:
Пример конфигурации MST Instance:
3.4. Решение проблем с конфигурацией Loopback detection
Убедитесь, что оборудование, подключенное к интерфейсу с loopback detection, прозрачно пропускает Loopback-detection BPDU, иначе функция не будет работать;
Рекомендуется использовать Loopback-detection только на портах в сторону неконтролируемого участка сети (порты доступа, сегменты с неуправляемыми коммутаторами);
Не рекомендуется использовать loopback-detection на одном порту с протоколами STP, так как это может повлечь за собой некорректную работу STP или Loopback-detection;
Loopback detection что это
Функция LoopBack Detection (LBD) обеспечивает дополнительную защиту от образования петель на уровне 2 модели OSI.
LoopBack Detection (LBD) позволяет обнаружить петлю как за одним портом, так и между портами коммутатора.
Существуют два режима работы этой функции:
порт будет заблокирован для передачи трафика только той VLAN, в которой обнаружена петля. Остальной трафик через этот порт будет передаваться.
Рассмотрим примеры настройки LoopBack Detection на коммутаторе DES-3200-28 rev.C1.
1. Петля между портами коммутатора.
enable loopdetect / Глобальное включение LBD
config loopdetect ports 6,24 state enable / Включение LBD на портах
config loopdetect mode port-based / Выбор режима работы LBD
config loopdetect log state enable / Включение логирование событий LBD
Замыкаем патчкордком между собой порты 6 и 24, коммутатор должен обнаружить петлю и отключить порты. В логе должны появиться соответствующие записи.
2. Петля между двумя коммутаторами.
enable loopdetect
config loopdetect ports 4,22 state enable
config loopdetect mode port-based
config loopdetect log state enable
Далее соединяем 2 коммутатора между собой двумя патчкордами, как это показано на картинке. В логе должны появиться соответствующие записи.
3. Петля за одним портом коммутатора(в режиме VLAN-Based).
Коммутатор 1:
create vlan 10 tag 10
config vlan 10 add tagged 4
enable loopdetect
config loopdetect ports 4 state enable
config loopdetect mode vlan-based
config loopdetect log state enable
Коммутатор 2:
create vlan 10 tag 10
config vlan 10 add tagged 2,6,24 / Добавляем порты, между которыми будет петля
config vlan vlanid 1 del 24 / Удаляем один порт из 1 vlan, чтобы петля была только во vlan 10.
Далее соединяем два коммутатора между собой патчкордом, и на втором коммутаторе делаем петлю, как это показано на картинке. Так как петля будет только во vlan 10, коммутатор 1 не должен заблокировать порт 4, а должен только заблокировать трафик в 10 vlan. В логе должны появиться соответствующие записи.
Функция предотвращения петлеобразования (LoopBack Detection)
В режиме Port-Based при обнаружении петли происходит автоматическая блокировка порта и никакой трафик через него не передается.
Цель: Понять способы работы LBD-алгоритма в различных режимах функционирования.
| DES-3200-28 | 2 шт. |
| DES-1005D | 1 шт. |
| Рабочая станция | 4 шт. |
| Кабель Ethernet | 7 шт. |
| Консольный кабель | 2 шт. |
Перед выполнением задания необходимо сбросить настройки коммутатора к заводским настройкам по умолчанию командой
Настройка LoopBack Detection Independent STP в режиме Port-Based
Настройка DES-3200-28
В данном задании рассматривается блокирование порта управляемого коммутатора при обнаружении петли в подключенном сегменте.
Включите функцию LBD глобально на коммутаторе
Активизируйте функцию LBD на всех портах коммутатора
Сконфигурируйте режим Port-Based, чтобы при обнаружении петли отключался порт
Упражнения
Проверьте текущую конфигурацию функции LBD
Что вы наблюдаете, запишите:
Посмотрите, обнаружена ли петля на коммутаторе
Что вы наблюдаете, запишите:
Проверьте, выполнил ли коммутатор блокировку порта
Отключите неуправляемый коммутатор с петлей от коммутатора DES-3200-28.
Защита от штормов и петель на коммутаторах SNR
В рамках данной статьи мы рассмотрим функционал для защиты от петель и различных видов штормов на коммутаторах SNR.
Loopback-detection
Для включения функционала необходимо в режиме конфигурирования порта задать VLAN, для которых будет проверяться наличие петли, а также действие при ее обнаружении:
loopback-detection control
loopback-detection specified-vlan
Важно! Настройка двух первых пунктов является обязательным условием. При отсутствии любого из них функционал работать не будет.
В глобальном режиме можно настроить время восстановления после отключения порта по причине петли:
loopback-detection control-recovery timeout
Дефолтное значение 0 (порт не будет включен повторно).
По умолчанию коммутатор отправляет 2 LBD-пакета в каждый specified-vlan в промежуток interval-time. Данные значения можно изменить. Значение interval-time меняется также в глобальном режиме. Сначала указывается интервал отправки LBD-пакетов при обнаружении петли, затем, в случае, если петля отсутствует:
loopback-detection interval-time
Количество отправляемых копий LBD-пакетов можно задать в режиме конфигурирования порта:
loopback-detection send packet number
Также в глобальном режиме можно включить отправку SNMP trap-сообщений при обнаружении петли:
loopback-detection trap enable
При обнаружении петли за каким-либо портом отправляется snmp-trap с OID 1.3.6.1.4.1.40418.7.101.112.1
Storm-control
Для ограничения широковещательного трафика в сети можно воспользоваться функционалом Storm-control, который отбрасывает входящий трафик, превышающий установленный лимит. Функционал полностью аппаратный и выполняется на уровне ASIC без участия CPU, поэтому логирование отсутствует.
Также можно настроить протоколы, на пакеты которых функционал реагировать не будет. Данная настройка также производится в глобальном режиме:
storm-control bypass
Пороговое значение для каждого типа трафика настраивается отдельно для каждого порта в режиме его конфигурирования:
Rate-violation
Расширенные возможности для ограничения широковещательного трафика в сети имеет Rate-violation, который также отбрасывает входящий трафик, превышающий установленный лимит. В отличие от Storm-control, данный функционал задействует ресурсы CPU и является софтовым. При превышении порога действие записывается в лог, отправляется соответствующий snmp-trap.
Все настройки Rate-violation применяются в режиме конфигурирования порта.
Пороговое значение задается для выбранного типа трафика и может быть задано только в pps:
В качестве действия при превышении порога широковещательным трафиком может быть выбрано либо отключение порта, либо блокировка всего трафика на порте. При отключении порта также может быть выбрано время восстановления, после которого порт будет включен обратно:
rate-violation control
Flood-control
Кроме ограничения входящего широковещательного трафика, на коммутаторах SNR существует возможность ограничить исходящий широковещательный трафик. Для этого используется Flood-control. Механизм, как и Storm-control, является аппаратным и полностью ограничивает передачу определенного типа широковещательного трафика в выбранный порт.







