5. VLAN
Ethernet
Необходимо напомнить об особенностях оригинального Ethernet, которые во многом определяют принципы работы коммутации в современных сетях.
В оригинальном Ethernet все терминальные узлы подключены к общему коаксиальному проводу - одной физической среде. Сигнал распространялся одновременно до всех участников или не распространялся, если среда не работала. Домен коллизий совпадал с широковещательным доменом, условно "честный" L2.
Весь современный коммутируемый Ethernet по сути является эмуляцией оригинального Ethernet. Разные домены коллизий в нем объединены в общий широковещательный домен.
Сегмент L2 по сути "виртуальный": для терминального узла на MAC-подуровне неотличим от "честного" L2 и количество или вообще наличие транзитных свитчей определить невозможно. На самом деле коммутация - задача L3, не решаемая в рамках IEEE 802.3.
Коммутация с VLAN
Эмуляция нескольких несвязанных сегментов Ethernet:
VLAN - виртуальный широковещательный домен.
Домены коллизий объединены в несколько широковещательных доменов
Обычно VLAN нумеруется с 1 по 4094
На устройстве запускаются несколько таблиц коммутации:
Людой кадр коммутируется только по одной из них
Максимально поддерживаемое число таблиц обычно меньше 4094
Просмотр базы и добавление нового VLAN:
SWITCH#show vlan brief
VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
1239 VLAN1239 active Gi0/21
1259 VLAN1259 active Gi0/22
1273 Switches_MgMnt active Gi0/23
SWITCH(conf)#vlan 10
SWITCH(conf-vlan)#name TEST
SWITCH(conf-vlan)#exit
Для создания VLAN важно выйти из контекста config-vlan, потому что только при выходе из контекста VLAN фактически создается.
Локальное отключение VLAN:
SWITCH(conf-vlan)#shutdown
SWITCH(conf-vlan)#do show vlan brief
VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
1239 VLAN1239 act/lshut Gi0/21
1259 VLAN1259 active Gi0/22
Suspended VLAN - VLAN будет отключен для всего домена VTP:
SWITCH(conf-vlan)#state suspend
SWITCH(conf-vlan)#do show vlan brief
VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
1239 VLAN1239 suspended Gi0/21
1259 VLAN1259 active Gi0/22
Access-порты
Обычные абоненты ничего не знают про VLAN. В заголовке Ethernet нет указания на VLAN.
В таком случае возникает вопрос как определить принадлежность кадра к VLAN. По информации из содержимого - небезопасно и немасштабируемо. В таком случае проще всего назначить один VLAN всем кадрам на приходящем порту, как правило сделать это лучше статически.
Стоит помнить о такой технологии, как Cisco Dynamic VLAN, требует Membership Policy Server (VMPS) на CatOS.
Trunk-порты
ISL-транки (Inter-Switch Link). По таким портам передаются кадры разных VLAN. Для определения принадлежности кадра к VLAN изменяется формат кадра.
Метки VLAN
Есть несколько способов добавить в кадр информацию о VLAN:
Cisco ISL. Инкапсуляция в другой протокол. Протокол этот проприетарный. Номер VLAN указывается в заголовке ISL. Оверхед при этом занимает 30 байт (26 байт заголовка и 4 - трейлер)
IEEE 802.10. Изменение кадра, возможно с шифрованием.
IEEE 802.1Q. Добавление нового поля в кадр. Поддерживается всеми вендорами. Оверхед занимает 4 байта.
Формат кадра 802.1Q
Особенности кадра 802.1Q
Максимальный размер кадра (MAC Client Data) вырастает до 1504 байт
Формат как у кадра Ethernet II c EtherType 0x8100. TPID по сути заменяет собой Ethertype. Благодаря этому коммутаторы без поддержки 802.1Q могут коммутировать такие кадры. Обычные абоненты вложение 0x8100 не обрабатывают.
У кадра меняется заголовок и, как следствие, FCS. При добавлении метки контрольная сумма пересчитывается.
В поле TCI есть следующая информация:
Priority Code Point (3 бита) - поле для стандарта 802.1p
Drop Eligible Indicator - расширение PCP или самостоятельное поле (до 802.1Q-2011 Сanonical Format Identifier в 1 бит, "0" в Ethernet и "1" в TokenRing)
VLAN Identifier (12 бит) - собственно номер VLAN
Кадры с метками и без
На портах доступа передаются кадры одного VLAN без метки:
untagged - тот самый абонентский VLAN
tagged - не передаются
На транках 802.1Q кадры могут передаваться с меткой и без:
untagged - не более одного VLAN, в терминологии Cisco - Native VLAN
tagged - все остальные VLAN
На транках ISL допустимы только кадры формата ISL
Состояния порта
Порт может быть в одном из состояний:
Static Access: порт принимает только обычные кадры и относит их все к определенному VLAN (характерно для абонентских портов)
Trunk: порт принимает обычные или модифицированные кадры и относит их к определенному VLAN исходя из заголовка кадра (характерно для межкоммутаторных линков)
В зависимости от настроек для определения номера VLAN для кадра могут читаться заголовки 802.1Q или ISL
Если заголовок отсутствует (только для транков 802.1Q), используется преднастроенный номер Native VLAN
SWITCH(config-if)#switchport mode ?
access Set trunking mode to ACCESS unconditionally
dot1q-tunnel set trunking mode to TUNNEL unconditionally
dynamic set trunking mode to dynamically negotiate access or trunk mode
private-vlan Set private-vlan mode
trunk Set trunking mode to TRUNK unconditionally
Настройки приводят интерфейс к одному из состояний:
Access - обрабатываются только untagged кадры одного VLAN
Trunk - обрабатываются как untagged, так и tagged кадры
Просмотр состояния коммутации:
SWITCH#show interface g0/0 switchport
Name: Gi0/0
Switchport: Enabled
Administrative Mode: static access !как настроил администратор
Operational Mode: static access !как по факту работает
Administrative Trunking Encapsulation: negotiate
Operational Trunking Encapsulation: native
Negotiation of Trunking: Off
Access Mode VLAN: 10 (TEST)
Trunking Native Mode VLAN: 1 (default)
Administrative Native VLAN tagging: enabled
Voice VLAN: none
!
cutted-info
!
Operational private-vlan: none
Trunking VLANs Enabled: ALL
Pruning VLANs Enabled: 2-1001
Capture Mode Disabled
Capture VLANs Allowed: ALL
Protected: false
Appliance trust: none
Switchport mode trunk:
Обрабатывает кадры с указанием метки VLAN.
На некоторых платформах поддерживается проприетарный стандарт ISL
На всех новых платформах есть 802.1Q
Команда switchport trunk encapsulation <#> задает тип транка
Команда switchport mode trunk включает режим транка
В 802.1Q поддерживаются untagged-кадры.
Команда switchport trunk native vlan <#> помечает Native VLAN
Кадры без метки коммутируются по таблице Native VLAN
Кадры Native VLAN отправляются без метки
Команда глобальной конфигурации vlan dot1q tag native изменяет поведение отправки и получения кадров Native VLAN на коммутаторе: кадры, относящиеся к Native VLAN и приходящие без метки, отбрасываются; любые кадры, в том числе относящиеся к Native VLAN, отправляются с меткой.
Настройки транка должны быть одинаковыми с двух сторон (нужно и для CDP, STP)
В качестве Native VLAN крайне рекомендуется вешать несуществующий VLAN
Ограничения VLAN в транке
Команда switchport trunk allowed vlan <list> указывает список VLAN, кадры которых могут отправляться или приниматься через интерфейс (при условии, что VLAN присутствует в базе).
Можно задать список явно или внести в него только изменения макросами
Самый распространенная ошибка при настройке коммутаторов
Иногда называется manual pruning
SWITCH(config-if)#switchport trunk allowed vlan ?
WORD VLAN IDs of the allowed VLANs when this port is in trunking mode
add add VLANs to the current list
all all VLANs
except all VLANs except the following
none no VLANs
remove remove VLANs from the current list
SWITCH(config-if)#do sh int g0/0 sw
Name: Gi0/0
Switchport: Enabled
Administrative Mode: trunk
Operational Mode: trunk
Administrative Trunking Encapsulation: dot1q
Operational Trunking Encapsulation: dot1q
Negotiation of Trunking: On
Access Mode VLAN: 10 (TEST) !не применяется, так как порт в транке
Trunking Native Mode VLAN: 30 (Inactive) !назначен отсутствующий в базе VLAN
Administrative Native VLAN tagging: enabled
Voice VLAN: none
Protected: false
Appliance trust: none
Сводная таблица транков:
SWITCH#show interfaces trunk
Port Mode Encapsulation Status Native vlan
Gi0/0 on 802.1q trunking 30
Gi0/1 desirable n-isl int gi0/1ште trunking 1
Gi0/2 on 802.1q trunking 1
Port Vlans allowed on trunk
Gi0/0 10,20,30
Gi0/1 1-4094
Gi0/2 1-4094
Port Vlans allowed and active in management domain
Gi0/0 10
Gi0/1 1,10
Gi0/2 1,10
Port Vlans in spanning tree forwarding state and not pruned
Gi0/0 10
Gi0/1 1,10
Gi0/2 1,10
Native VLAN
Изначально концепция Native VLAN предлагалась для поддержки абонентов в сегментах, соединяющих коммутаторы с 802.1Q
Сегодня причин ее использовать больше нет
Более того, на Native VLAN есть несколько атак
Рекомендуется использовать в качестве Native VLAN недоступный VLAN - отсутствующий в базе, выключенный или Honeypot (намеренно созданный VLAN терминирующийся на устройстве безопасности типа IDS)
Атака VLAN Hopping (switch spoofing):
Главная идея атаки - согласование транка между портом коммутатора и атакующим с помощью протокола DTP, получение доступа к VLAN и направление трафика до цели с нужно меткой
VLAN Hopping с двойной меткой:
Атака осуществима, если атакающий может послать кадр с двойной меткой: общей с Native VLAN и целевой VLAN. Промежуточный порт снимает метку Native VLAN и в транк отправляет кадр с нижней меткой до цели атаки.
Voice VLAN
Порт на коммутаторах Catalyst может быть настроен с использованием Voice VLAN, когда к этому порту подключается IP-телефон.
Используется режим на порту static access, кадры телефона помечаются Voice VLAN
IP-телефон может быть настроен автоматически с помощью CDP (свитч использует CDP для сообщения телефону, как тегировать кадры)
Сisco определяет данный тип порта как MultiVLAN, нежели как транк
Задать VLAN для голоса:
SWITCH(config-if)#switchport access vlan 10
SWITCH(config-if)#switchport voice vlan 20
Никак не помечать кадры (по сути трафик будет смешан с хостовым):
SWITCH(config-if)#switchport access vlan 10
SWITCH(config-if)#switchport voice vlan untagged
Задает в метке 802.1Q "5" в Priority Code point, а номер VLAN будет нулевой (по сути отсутствовать):
SWITCH(config-if)#switchport access vlan 10
SWITCH(config-if)#switchport voice vlan dot1p
Свитч не будет сообщать телефону условия тегирования кадров:
SWITCH(config-if)#switchport access vlan 10
SWITCH(config-if)#switchport voice vlan none
Транки на маршрутизаторах
VLAN - обособленный широковещательный домен. В транке приходят обычно несколько VLAN
Настройки IP обычно назначаются на интерфейсе. Каждому VLAN нужен отдельный интерфейс для соответствующих настроек маршрутизатора. Физический интерфейс остается один, но к нему создаются дочерние субинтерфейсы.
Switch(config)#interface gi0/0
Switch(config)#no shutdown
Switch(config)#interface gi0/0.10
Switch(config-subif)#encapsulation dot1Q 10
Switch(config-subif)#interface gi0/0.20
Switch(config-subif)#encapsulation dot1Q 20
Работа с сабинтерфейсами:
Если родительский (физический) интерфейс выключен, субинтерфейсы работать не будут
Можно выключить отдельный субинтерфейс
Все настройки, относящиеся к конкретному VLAN, выполняются на соответствующих субинтерфейсах
Два способа работать с NativeVLAN.
Использовать настройки родительского интерфейса
создать отдельный субинтерфейс и пометить его VLAN параметром native: encapsulation dot1Q <#> native - будут обрабатываться кадры без меток
L3 на коммутаторах Cisco Catalyst
Routed Interface - физический интерфейс, кадры на котором пересылаются напрямую на/от Routing Engine
Создается internal VLAN из начала/конца диапазона Extended VLAN
По большому счету тоже SVI, но они не отражаются в списке VLAN и running-config
Switch(config)#interface g0/0
Switch(config-if)#ip address 192.168.2.100 255.255.255.0
Switch(config-if)#do show vlan internal usage
VLAN Usage
---- --------------------
1006 GigabitEthernet0/0
Можно поменять нумерацию VLAN для SVI, создаваемых для RI
Switch(config)#vlan internal allocation policy descending
Switch(config)#interface gi0/0
Switch(config-if)#shutdown
Switch(config-if)#no shutdown
Switch(config-if)#do show vlan internal usage
VLAN Usage
---- --------------------
4094 GigabitEthernet0/0
SVI - Switch Virtual Interface - виртуальный интерфейс Routing Engine, подключенный к VLAN как терминальный узел.
SVI переходит в Up при выполнении условий:
Соответствующий VLAN в базе существует и активен
На коммутаторе должен быть хотя бы один порт, на котором одновременно:
Разрешена коммутация кадров соответствующего VLAN (хоть access, хоть trunk)
Форвардинг соответствующего VLAN не блокируется STP или VTP Pruning
Состояние порта up/down меняется с задержкой порядка 10 мс
Switch(config)#vlan 99
Switch(config-vlan)#exit
Switch(config)#interface vlan 99
Switch(config-if)#no shutdown
Switch(config-if)#ip address 192.168.1.100 255.255.255.0
Если задан
Switch(config-if)#switchport autostate exclude
то SVI сам не поднимется
L3 интерфейсы могут менять состояние с большой задержкой. Команда carrier-delay msec <#> сокращает ее почти до нуля, но не рекомендуется, так в случае флаппинга порт зафлудит лог
Switch(config)#interface gi0/0
Switch(config-if)#carrier-delay msec 0
Особенности использования VLAN
До IOS 12.4(15)T пользователю были доступны VLAN c 1 по 1001:
1 - служебный VLAN
2 - 1001 - Normal range VLAN
1002 - 1005 - VLAN TokenRing/FDDI
1006 - 4094 - Extended VLAN
Команды show vlan и show vlan brief не показывают транки.
Однако show vlan id <#> показывает
Catalyst под каждый no switchport порт занимает отдельный VLAN.
Internal allocation policy определит порядок назначения VLAN
Extended VLAN
VTP должен быть в режиме Transparent
VTPv3 может распространять все VLAN, но большинство свитчей начального уровня не поддерживают Extended VLAN
Хранится не в vlan.dat
Если VTP переводится в режим Client или Server, VLANы должны быть вручную удалены
Необходимо вручную перенастраивать порты, которые были в Extended VLAN
Multilayer Switch
Multilayer Switch - коммутатор, который умеет работать с заголовками протоколов разных уровней
При этом он не обязательно может быть с поддержкой маршрутизации
Для обеспечения маршрутизации используются SVI
Switched Virtual Interface
Интерфейс SVI ассоциируется с VLAN
Как правило, минимум один SVI на коммутаторе всегда есть, обычно их не меньше двух


Макросы Interface Range
При необходимости часто настраивать один и тот же набор интерфейсов, можно прибегнуть к использованию макроса для этой группы портов.
Создание группы:
Switch(config)#define interface-range MACRONAME Fast0/1 – 4
Использование группы:
Switch(config)#interface range macro MACRONAME
Last updated