Строим отказоустойчивую сетевую инфраструктуру предприятия.
PortFast - этот режим предназначен для того, что бы "ускорить" инициализацию портов которые подключены к серверам или пользовательским станциям. В нормальном состоянии, без PortFast, порт на котором работает Spanning Tree перед включением в режим передачи данных проходит несколько довольно долгих фаз: blocked, listening, learning и только потом, где-то через 40-50 секунд после включения кабеля, он переходит в состояние forwarding и начинает передавать данные. Делается это для того, что бы если на порту окажется дублирующий линк, то Spanning Tree успел бы это понять, и в сети не возникло петли и наша сеть не "сломалась" пусть даже на короткое время. В случае, если на порту находится рабочая станция или сервер, нам не нужно, что бы все включалось с такой осторожностью, даже вернее это вообще может оказаться вредно для работы рабочей станции или сервера, компьютер может например не суметь получить адрес по DHCP, если грузится быстрее, чем инициализируется порт.
Итак, когда мы включаем PortFast, порт минует состояния listening и learning, и сразу становится forwarding. При включении этого режима, Spanning Tree продолжает работать на этих портах, он не отключается! BPDU принимаются и отправляются. Более того, если на порт в режиме PortFast придёт сообщение BPDU, он моментально потеряет свой статус PortFast не смотря на настройки. Но тем не менее, не стоит включать PortFast на портах ведущих к другому сетевому оборудованию, так как это все-таки может привести к появлению петель маршрутизации пусть и на короткое время.
Cisco:
На Cisco этот режим включается двумя способами: локально на конкретных портах либо глобально в режиме конфигурации.
глобально:
spanning-tree portfast default
Эта команда включает PortFast на всех портах которые находятся в режиме access.
Включается это так:
spanning-tree A1-A2 admin-edge-port
В sh run это будет выглядеть так:
spanning-tree A1 admin-edge-port
spanning-tree A2 admin-edge-port
В sh run это будет выглядеть так:
no spanning-tree A1 auto-edge-port
no spanning-tree A2 auto-edge-port
Часть 3: Тюнинг настроек пограничных портов и портов доступа на Cisco и HP ProCurve.
Итак, сегодня подготовимся к подведению черты под настройкой нашей сети. Черта эта будет проведена между сетевым оборудованием и пользователями этого оборудования. А точнее, разберемся, что можно сделать, что бы обезопасить нашу STP топологию на портах доступа, а так же на пограничных портах с другими сетями. Начнем с самых базовых настроек, таких как PortFast, BPDUGuard, BPDUFilter и PVST-Filter на ProCurve.
PortFast
PortFast - этот режим предназначен для того, что бы "ускорить" инициализацию портов которые подключены к серверам или пользовательским станциям. В нормальном состоянии, без PortFast, порт на котором работает Spanning Tree перед включением в режим передачи данных проходит несколько довольно долгих фаз: blocked, listening, learning и только потом, где-то через 40-50 секунд после включения кабеля, он переходит в состояние forwarding и начинает передавать данные. Делается это для того, что бы если на порту окажется дублирующий линк, то Spanning Tree успел бы это понять, и в сети не возникло петли и наша сеть не "сломалась" пусть даже на короткое время. В случае, если на порту находится рабочая станция или сервер, нам не нужно, что бы все включалось с такой осторожностью, даже вернее это вообще может оказаться вредно для работы рабочей станции или сервера, компьютер может например не суметь получить адрес по DHCP, если грузится быстрее, чем инициализируется порт.
Итак, когда мы включаем PortFast, порт минует состояния listening и learning, и сразу становится forwarding. При включении этого режима, Spanning Tree продолжает работать на этих портах, он не отключается! BPDU принимаются и отправляются. Более того, если на порт в режиме PortFast придёт сообщение BPDU, он моментально потеряет свой статус PortFast не смотря на настройки. Но тем не менее, не стоит включать PortFast на портах ведущих к другому сетевому оборудованию, так как это все-таки может привести к появлению петель маршрутизации пусть и на короткое время.
Cisco:
На Cisco этот режим включается двумя способами: локально на конкретных портах либо глобально в режиме конфигурации.
глобально:
spanning-tree portfast default
Эта команда включает PortFast на всех портах которые находятся в режиме access.
локально на портах:
interface GigabitEthernet0/1
spanning-tree portfast
При активной глобальной настройке PortFast его можно отключить на портах где он не нужен:
interface GigabitEthernet0/1
spanning-tree portfast disable
Так же в некоторых случаях может понадобиться включить PortFast на trunk линках, например если данный транк ведёт к серверу, который принимает из него несколько VLAN'ов:
interface GigabitEthernet0/1
spanning-tree portfast trunk
Проверить включен ли PortFast на интерфейса можно при помощи команды:
sh spanning-tree int gi0/1 portfast
MST0 enabled
MST2 enabled
либо:
sh spanning-tree int gi0/1 detail
Port 1 (GigabitEthernet0/1) of MST0 is designated forwarding
Port path cost 20000, Port priority 128, Port Identifier 128.1.
Designated root has priority 4096, address 001b.3fc1.a800
Designated bridge has priority 32768, address 001d.e691.2800
Designated port id is 128.1, designated path cost 0
Timers: message age 0, forward delay 0, hold 0
Number of transitions to forwarding state: 3
The port is in the portfast mode by default
Link type is point-to-point by default, Internal
Bpdu guard is enabled by default
Loop guard is enabled by default on the port
BPDU: sent 174100, received 0
Port 1 (GigabitEthernet0/1) of MST2 is designated forwarding
Port path cost 20000, Port priority 128, Port Identifier 128.1.
Designated root has priority 2, address 0018.71b6.a000
Designated bridge has priority 32770, address 001d.e691.2800
Designated port id is 128.1, designated path cost 22000
Timers: message age 0, forward delay 0, hold 0
Number of transitions to forwarding state: 2
The port is in the portfast mode by default
Link type is point-to-point by default, Internal
Bpdu guard is enabled by default
Loop guard is enabled by default on the port
BPDU: sent 174100, received 0
Тут будет видно, если порт потерял свой статус PortFast, для возвращения порту статуса PortFast нужно его положить и поднять:
interface GigabitEthernet0/1
shutdown
no shutdown
HP ProCurve:
На ProCurve это называется edge-port, и насильно включается командой admin-edge-port для каждого порта, но по-умолчанию глобально работает функция auto-edge-port, которая сама определят, нужно на этом порту инициализироваться "по-быстрому" или нужно идти по полному циклу. И надо отметить, что на HP эта автоматическая функция работает очень хорошо! Порты без всякого тюнинга инициализируются быстро там, где стоят рабочие станции и сами переходят в EDGE режим, и так же теряют EDGE статус даже при активном admin-edge-port, если на порт приходят сообщение BPDU снаружи.Включается это так:
spanning-tree A1-A2 admin-edge-port
В sh run это будет выглядеть так:
spanning-tree A1 admin-edge-port
spanning-tree A2 admin-edge-port
И можно насильно отключить авто определение EDGE порта, что бы он всегда инициализировался по долгому и безопасному сценарию:
no spanning-tree A1-A2 auto-edge-port
В sh run это будет выглядеть так:
no spanning-tree A1 auto-edge-port
no spanning-tree A2 auto-edge-port
Вернуть статус auto-edge-port и отключить admin-edge-port можно командами:
spanning-tree A1-A2 auto-edge-port
и
no spanning-tree A1-A2 admin-edge-port
Проверить статус порта можно при помощи команд:
sh spanning-tree A1
Port Type | Cost rity State | Bridge Time PtP Edge
------ ---------- + --------- ---- ------------ + ------------- ---- --- ----
A1 100/1000T | 20000 128 Forwarding | 001b3f-582100 2 Yes No
либо
sh spanning-tree A1 detail
AdminEdgePort : No
Auto Edge Port : Yes
Switch is in mst mode (IEEE Standard)
Root bridge for: none
Extended system ID is enabled
Portfast Default is enabled
PortFast BPDU Guard Default is enabled
Portfast BPDU Filter Default is disabled
Loopguard Default is enabled
EtherChannel misconfig guard is enabled
UplinkFast is disabled
BackboneFast is disabled
На Cisco BPDUGuard включается локально на интерфейсе и глобально. Ведет себя он независимо от способа включения, абсолютно одинаково. При приёме входящего BPDU на порту с активированным BPDUGuard, порт просто блокируется.
Cisco:
Локально:
interface GigabitEthernet 0/1
spanning-tree bpduguard enable / disable
Как и в случае Portfast, disable отключает глобальную настройка для конкретного порта.
Глобально (автоматически включает BPDUGuard на всех PortFast интерфейсах):
spanning-tree portfast bpduguard default
В следующий раз добавлю про loop-guard, loop-protect, udld и дополнительно скомпоную в одну статью все что связано с борьбой против петель на управляемом и неуправляемом оборудовании. На этом закончим со Spanning Tree и петлями и пойдём дальше к резервированию каналов доступа и кластерам :)
sh spanning-tree A1
Port Type | Cost rity State | Bridge Time PtP Edge
------ ---------- + --------- ---- ------------ + ------------- ---- --- ----
A1 100/1000T | 20000 128 Forwarding | 001b3f-582100 2 Yes No
sh spanning-tree A1 detail
AdminEdgePort : No
Auto Edge Port : Yes
OperEdgePort : No
BPDUFilter
Эта функция отключает прием и передачу BPDU на конкретных портах. Это может применяться для разных целей, например для защиты от "чужого" Spanning Tree на линках к провайдеру или к иным соседям, с которыми у вас гарантировано один линк. Для защиты от атак на основе BPDU и как следствие, нестабильность работы вашей топологии.
Cisco:
На Cisco BPDUFilter как и PortFast включается двумя способами: локально на интерфейсе и глобально. Но в отличие от PortFast, у BPDUFilter от способа включения меняется поведение.
Локально:
interface GigabitEthernet 0/1
spanning-tree bpdufilter enable / disable
Как и в случае Portfast, disable отключает глобальную настройка для конкретного порта.
Глобально (автоматически включает BPDUFilter на всех PortFast интерфейсах):
spanning-tree portfast bpdufilter default
При локальном включении BPDUFilter работает как "стена", это равносильно отключению Spanning Tree на интерфейсе вообще. Никакие BPDU не проходят ни в одну сторону. В некоторых случаях это может быть опасно, например соединив случайно такой порт с соседним вы получите петлю, которую не устранит Spanning Tree, и если у вас не настроено других средств борьбы с петлями, то у вас рухнет сеть. Так что будьте внимательны и осторожны использую эту функцию локально на интерфейсе.
При глобальном включении этой функции, она не настолько опасна, потому что включается на PortFast портах, и блокирует только отправку BPDU, а не приём. И как и PortFast, глобальный BPDUFilter снимается с порта при приёме первого же BPDU пакета снаружи. Эта функция используется скорее для маскировки вашего BPDU от соседей, но в случае если от соседей придёт BPDU, то вы начнете с ними работать по Spanning Tree.
Причем при глобальном включении BPDUFilter, через порт на этапе инициализации будут отправлены несколько сообщений BPDU для того, что бы спровоцировать возможно расположенное за этим портом оборудование на ответ, или чтоб удостовериться, что там никого нет способного взаимодействовать по STP. При локальном включении через порт не будет отправляться и приниматься вообще никаких BPDU.
Узнать включен ли у вас BPDUFilter глобально:
sh spanning-tree summary Switch is in mst mode (IEEE Standard)
Root bridge for: none
Extended system ID is enabled
Portfast Default is enabled
PortFast BPDU Guard Default is enabled
Portfast BPDU Filter Default is disabled
Loopguard Default is enabled
EtherChannel misconfig guard is enabled
UplinkFast is disabled
BackboneFast is disabled
Узнать активен ли он на порту:
sh spanning-tree int gi0/1 detail
Port 1 (GigabitEthernet0/1) of MST0 is designated forwarding
Port path cost 20000, Port priority 128, Port Identifier 128.1.
Designated root has priority 4096, address 001b.3fc1.a800
Designated bridge has priority 32768, address 001d.e691.2800
Designated port id is 128.1, designated path cost 0
Timers: message age 0, forward delay 0, hold 0
Number of transitions to forwarding state: 3
The port is in the portfast mode by default
Link type is point-to-point by default, Internal
Bpdu guard is enabled by default
Bpdu filter is enabled
Loop guard is enabled by default on the port
BPDU: sent 174100, received 0
Port 1 (GigabitEthernet0/1) of MST2 is designated forwarding
Port path cost 20000, Port priority 128, Port Identifier 128.1.
Designated root has priority 2, address 0018.71b6.a000
Designated bridge has priority 32770, address 001d.e691.2800
Designated port id is 128.1, designated path cost 22000
Timers: message age 0, forward delay 0, hold 0
Number of transitions to forwarding state: 2
The port is in the portfast mode by default
Link type is point-to-point by default, Internal
Bpdu guard is enabled by default
Bpdu filter is enabled
Bpdu filter is enabled
Loop guard is enabled by default on the port
BPDU: sent 174100, received 0
Если BPDUFilter не включен, то этой строки не будет вообще.
HP ProCurve:
На ProCurve BPDUFilter включается для каждого порта:
spanning-tree A1-A2 bpdu-filter
В su run это будет выглядеть так:
spanning-tree A1 loop-guard bpdu-filter
spanning-tree A2 loop-guard bpdu-filter
Узнать список портов с включенным BPDUFilter:
sh spanning-tree | i Filter
BPDU Filtered Ports : A1-A2
На ProCurve BPDUFilter включается для каждого порта:
spanning-tree A1-A2 bpdu-filter
В su run это будет выглядеть так:
spanning-tree A1 loop-guard bpdu-filter
spanning-tree A2 loop-guard bpdu-filter
Узнать список портов с включенным BPDUFilter:
sh spanning-tree | i Filter
BPDU Filtered Ports : A1-A2
либо:
sh spanning-tree A1 detail
BPDU Filtering : Yes
Так же на HP есть еще одна хорошая функция, которая полезна в случае использования MSTP, и описанного мной в Часть 2: "Соединяем Cisco и ProCurve при помощи MSTP" случая, когда Cisco сходила с ума от приёма PVST пролетавшего сквозь топологию ProCurve.
PVST-Filter! Включается так же, как и BPDUFilter:
spanning-tree A1-A2 pvst-filter
В sh run выглядит так:
spanning-tree A1 pvst-filter
spanning-tree A2 pvst-filter
посмотреть статус PVST-Filter:
sh spanning-tree | i PVST
PVST Filtered Ports : A1-A2
либо:
sh spanning-tree a1 det
PVST Filtering : Yes
Возможно, если вы используете MSTP, эту функцию стоит активировать на всех портах, так как ничего хорошего от приёма чужого PVST не будет. Как минимум MSTP и PVST несовместимы, а как максимум может произойти крах всей сети, похуже описанного мной случая в Часть 2: "Соединяем Cisco и ProCurve при помощи MSTP"...
BPDUGuard
Cisco:
Локально:
interface GigabitEthernet 0/1
spanning-tree bpduguard enable / disable
Как и в случае Portfast, disable отключает глобальную настройка для конкретного порта.
Глобально (автоматически включает BPDUGuard на всех PortFast интерфейсах):
spanning-tree portfast bpduguard default
При блокировке порта восстановить его работоспособность можно выключением и включением:
interface GigabitEthernet0/1
shutdown
no shutdown
Либо настроив автоматическое включение при помощи механизма errdisable recovery:
errdisable recovery cause bpduguard
errdisable recovery interval 60
Включен ли BPDUGuard глобально:
sh spanning-tree summary
PortFast BPDU Guard Default is enabled
Узнать активен ли он на порту:
sh spanning-tree int gi0/1 detail
Port 1 (GigabitEthernet0/1) of MST0 is designated forwarding
Port path cost 20000, Port priority 128, Port Identifier 128.1.
Designated root has priority 4096, address 001b.3fc1.a800
Designated bridge has priority 32768, address 001d.e691.2800
Designated port id is 128.1, designated path cost 0
Timers: message age 0, forward delay 0, hold 0
Number of transitions to forwarding state: 3
The port is in the portfast mode by default
Link type is point-to-point by default, Internal
Bpdu guard is enabled by default
Loop guard is enabled by default on the port
BPDU: sent 174100, received 0
Port 1 (GigabitEthernet0/1) of MST2 is designated forwarding
Port path cost 20000, Port priority 128, Port Identifier 128.1.
Designated root has priority 2, address 0018.71b6.a000
Designated bridge has priority 32770, address 001d.e691.2800
Designated port id is 128.1, designated path cost 22000
Timers: message age 0, forward delay 0, hold 0
Number of transitions to forwarding state: 2
The port is in the portfast mode by default
Link type is point-to-point by default, Internal
Bpdu guard is enabled by default
Loop guard is enabled by default on the port
BPDU: sent 174100, received 0
HP Procurve:
На ProCurve он включается и мониторится абсолютно аналогично BPDU-Filter и PVST-Filter, но называется BPDU-Protection:
spanning-tree A1-A2 bpdu-protection
В sh run будет так:
spanning-tree A1 loop-guard bpdu-protection
spanning-tree A2 loop-guard bpdu-protection
Статус BPDU-Protection:
sh spanning-tree | i Protect
BPDU Protected Ports : A1-A16,A18-A24,B1-B24,C1-C24,D1-D24,G...
sh spanning-tree a1 detail | i Protect
BPDU Protection : Yes
На мой взгляд BPDUGuard черезвычайно полезная штука, так как позволяет узнать, когда в порт несанкционированно воткнули сетевое оборудование, а так же BPDUGuard моментально спасает от большинства петель. Но с BPDUGuard можно поймать и проблемы, например активировав его на интерфейсе который смотрит к провайдеру. От провайдеров, по моему опыту, частенько прилетает STP, что моментально приведёт к блокировке порта. Я, конечно весьма осмотрительно, но на интерфейсах к провайдерам с которыми у нас нет дополнительных линков, обычно включаю BPDUFIlter :)
В следующий раз добавлю про loop-guard, loop-protect, udld и дополнительно скомпоную в одну статью все что связано с борьбой против петель на управляемом и неуправляемом оборудовании. На этом закончим со Spanning Tree и петлями и пойдём дальше к резервированию каналов доступа и кластерам :)