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