Найти в Дзене
knowledge base

Настройка bridge vlan filtering на коммутаторах mikrotik трёхсотой серии (серия - коммутация в mikrotik).

Данный материал подходит для 6-й версии routerOS (начиная с 6.41), и для 7-й версии (принципиальных отличий не нашёл). Хочу разобрать тему коммутации в mikrotik и на базе BVF и через switch chip, но не в рамках одного свитча (сферическая настройка в вакууме), а показать рабочий пример со шлюзовым роутером, уровнями дистрибуции и доступа, множеством сетей. В рамках одной статьи получается очень громоздко, потому разобью тему на три статьи: настройка BVF на коммутаторе (эта статья), настройка схемы "router on a stick" и BVF на маршрутизаторе, настройка коммутации через switch chip (но без коммутаторов сотой и двухсотой серий). Будет ещё четвёртая статья в этой серии, про настройку CAPsMAN, на базе созданной схемы коммутации. Затронем следующие темы: В качестве шлюзового роутера будем использовать hAP ac2, условным коммутатором дистрибуции будет crs328-24p, коммутатором доступа будет hAPac lite. Коммутатор дистрибуции обычно распределяет трафик между коммутаторами доступа и шлюзом, но в

Данный материал подходит для 6-й версии routerOS (начиная с 6.41), и для 7-й версии (принципиальных отличий не нашёл).

Хочу разобрать тему коммутации в mikrotik и на базе BVF и через switch chip, но не в рамках одного свитча (сферическая настройка в вакууме), а показать рабочий пример со шлюзовым роутером, уровнями дистрибуции и доступа, множеством сетей. В рамках одной статьи получается очень громоздко, потому разобью тему на три статьи: настройка BVF на коммутаторе (эта статья), настройка схемы "router on a stick" и BVF на маршрутизаторе, настройка коммутации через switch chip (но без коммутаторов сотой и двухсотой серий). Будет ещё четвёртая статья в этой серии, про настройку CAPsMAN, на базе созданной схемы коммутации.

Затронем следующие темы:

  1. Непосредственно настройку bridge vlan filtering на коммутаторе (транковые, access и гибридные порты, интерфейс управления);
  2. Настройка роутера в режиме router on a stick (BVF на роутере, vlan интерфейсы, фильтрация трафика, dhcp на интерфейсах), маршрутизацию настраивать не будем, т.к. по схеме у нас роутер один, все сети будут заведены на нём, поэтому всё ограничится connected маршрутами;
  3. Немного пройдёмся по bonding интерфейсам.
  4. Настроим IP телефон Linksys на работу с гибридным интерфейсом коммутатора (в следующей статье).

В качестве шлюзового роутера будем использовать hAP ac2, условным коммутатором дистрибуции будет crs328-24p, коммутатором доступа будет hAPac lite.

Коммутатор дистрибуции обычно распределяет трафик между коммутаторами доступа и шлюзом, но в нашем случае упростим, и он ещё будет выполнять функции пользовательского коммутатора доступа и серверного коммутатора доступа.

Схему будем собирать такую:

Таблица с описанием подсетей и vlan-ов:

-2

Таблицы с режимами работ портов на оборудовании:

-3

IP план для сети управления (в других сетях у нас устройства не планируются):

-4

Предварительно, на всех устройствах произведем настройку в соответствии с этой статьёй, дополню только, что для коммутаторов имеет смысл отключить следующие пакеты: dhcp, hotspot, ipv6, ppp, routing, wireless (т.к. они не используются). Сервером времени у нас будет шлюзовой роутер, так что в поле "SNTP Client" на коммутаторах ставим его адрес. Брандмауэр пока трогать не будем, настроим его после задания IP адресов на интерфейсах.

Перед настройкой коммутаторов, кратко пройдёмся по терминам, а именно, какие бывают типы портов:

  • транковый (или тегированный, или магистральный) - порт, в котором фреймы передаются только с тегами; транковыми портами обычно соединены коммутаторы с коммутаторами, или коммутаторы дистрибуции/ядра с маршрутизаторами, или коммутаторы\маршрутизаторы с серверами (особенное если это гипервизоры);
  • доступа (или не тегированный) - порт, который принадлежит к какому то vlan, но фреймы из этого порта выходят без тега (коммутатор удаляет тег, когда передает фрейм через этот порт), а когда фреймы в этот порт приходят, коммутатор добавляет соответствующий тег фрейму;
  • гибридный - порт, который настроен как порт доступа для какого либо одного vlan, и как транковый для других vlan (их м.б. несколько), как пример использования гибридного порта - подключение IP телефона и ПК через один порт коммутатора, если эти устройства находятся в разных подсетях, настраиваем для такого порта передачу фреймов с тегом для vlan ip телефонии, а для пользовательской сети настраиваем порт как порт доступа.

Настроим BVF на коммутаторе LABS-CRS328-SW1, по схеме он у нас является коммутатором дистрибуции.

Для начала создадим bonding интерфейсы, до создания бриджа, чтобы потом поместить их в бридж. Заходим в меню Interfaces, выбираем вкладку Bonding и нажимаем "+", появится меню создания интерфейсов

-5

Основные настройки нового интерфейса расположены на вкладке "Bonding"

  • в поле "Slaves" указываем интерфейсы, которые будут объединены в этом логическом интерфейсе, добавить физический интерфейс можно нажав стрелку вниз, всего можно добавить до 8 физических интерфейсов в логический интерфейс (если задействовать аппаратную агрегацию), если аппаратная разгрузка не нужна, то можно добавить неограниченное количество интерфейсов;
  • поле "Mode" позволяет выбрать режим работы, я всегда ставлю 802.3ad, это обычный LACP, и соответственно такой режим агрегации совместим с оборудованием других вендоров, аппаратная разгрузка работы bonding интерфейса через switch chip доступна на коммутаторах трёхсотой серии и только в режимах 802.3ad или balance-xor;
  • в поле "Link Monitoring" задаётся способ проверки канала, оставляем по умолчанию "mii" (интерфейс проверяет сам себя с помощью драйвера MII).
  • поле "Transmit Hash Policy" задаёт способ хэширования для режимов 802.3ad и balance-xor, тут совет такой: если используем режим 802.3, то ставим layer-2-and-3, полностью совместимый вариант хэширования с данным режимом, если у нас режим работы balance-xor, то ставим layer-3-and-4 (работать будет быстрее).

Вот так выглядят настройки для порта bonding1

-6

На вкладке "General" можно задать имя интерфейса, но нам подходят дефолтные названия. Не забываем нажать кнопку "Comment", и поставить комментарий, для всех магистральных портов нужно ставить комментарии, в которых будет информация к какому оборудованию эти порты подключаются и к каким портам оборудования будет подключение, в нашем случае, для интерфейса bonding1 комментарий будет такой "to LABS-hAPac2-GW1 (to ether4,5)", для физических портов, этого интерфейса агрегации, так же прописываем комментарии "to LABS-hAPac2-GW1 (to ether4)" и "to LABS-hAPac2-GW1 (to ether5)".

Аналогичным образом создаём магистральный агрегированный интерфейс bonding2, который будет подключён к коммутатору доступа LABS-hAPaclite-SW2

Наши созданные интерфейсы
Наши созданные интерфейсы
Физические магистральные интерфейсы с комментариями
Физические магистральные интерфейсы с комментариями

Теперь создадим бридж, заходим в меню "Bridge", и на вкладке "Bridge" нажимаем кнопку "+", в появившемся меню оставляем все параметры по умолчанию, и нажимаем "OK".

-9

Добавляем в созданный бридж все порты, на которых будем настраивать коммутацию, я покажу два варианта добавления портов, через GUI и через скрипт (если у вас 48 портовый коммутатор, то руками добавлять 48 портов грустно, лучше это автоматизировать).

Чтобы видеть в общем списке добавленных в бридж портов, настройки связанные с vlan, на вкладке "Ports" добавим дополнительные колонки, нажимаем справа стрелку "вниз", в выпадающем меню выбираем пункт "Show Columns"

-10

В меню "Columns" ставим галки в чекбоксах "Frame Types", "Ingres Filtering", "PVID".

-11

"PVID" - показывает номер vlan-тега на порту, настроенном в режиме "доступа";

"Ingres Filtering" - включает или выключает проверку наличия записи о vlan id кадра в таблице vlan для входящего интерфейса;

"Frame Types" - задаёт режим работы порта (какие типы кадров будет пропускать порт):

  • "admit all" - разрешает любые кадры (гибридный порт);
  • "admit only vlan tagged" - разрешает только кадры с vlan тегом (транковый порт);
  • "admit only untagged and priority tagged" - разрешает только кадры без vlan тега или с меткой приоритета (порт доступа).

Для примера настройки портов через GUI, добавим порты ether1, ether13 и оба bonding порта в бридж.

Начнём с интерфейсов bonding1 и bonding2 - это транковые интерфейсы, на обоих нужно настроить прохождение тегированных кадров всех объявленных vlan-ов, т.о. данные порты настраиваются одинаково.

На вкладке "Ports", и нажимаем кнопку "+", попадаем в меню добавления порта, на вкладке "General", в поле "Interface" указываем нужный физический или логический интерфейс (в нашем случае bonding1), и указываем к какому бриджу должен относиться наш интерфейс, т.к. бриджей м.б. несколько

-12

В том же меню переходим на вкладку "VLAN"

Ставим галку в чекбоксе напротив "Ingress Filtering", режим работы порта выбираем "admit only VLAN tagged", т.к. bonding интерфейсы у нас транковые, значение в поле "PVID" при транковом режиме порта игнорируется и м.б. любым, оставляем его значение по умолчанию.

-13

Нажимаем кнопку "OK" для добавления интерфейса.

У bonding2 настройки аналогичны, так что копируем этот порт и на вкладке "General" просто выбираем интерфейс bonding2.

Добавим интерфейс Ether1, в соответствии со схемой это гибридный интерфейс, который должен пропускать тегированный трафик кадров с тегом 115 и быть портом "доступа" для vlan 111.

В меню добавления порта, на вкладке "General" выбираем интерфейс Ether1, а на вкладке "VLAN" в поле "PVID" указываем номер 111, режим работы порта выбираем "admit all", ставим галку в чекбоксе напротив "Ingress Filtering".

-14

Добавим интерфейc Ether13, который должен работать в режиме доступа для vlan 114.

В меню добавления порта, на вкладке "General" выбираем интерфейс Ether13, а на вкладке "VLAN" в поле "PVID" указываем номер 114, режим работы порта выбираем "admit only untagged and priority tagged", ставим галку в чекбоксе напротив "Ingress Filtering".

-15

Если перед настройкой коммутатора, спланировать какие порты в каких режимах будут работать, и для множества портов параметры будут однотипные, то для массового добавления портов в бридж с нужными параметрами, можно воспользоваться скриптом.

Добавление и настройка портов с 1 по 12 сведётся к такой строчке:

for a from=1 to=12 do={/interface bridge port add interface="ether$a" bridge=bridge1 frame-types=admit-all ingress-filtering=yes pvid=111}

, а портов с 13 по 20 к такой:

for a from=13 to=20 do={/interface bridge port add interface="ether$a" bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged ingress-filtering=yes pvid=114}

В данных скриптах в цикле for указываем с какого по какой интерфейс мы настраиваем, и задаём соответствующие параметры.

Скрипт можно выполнить прямо в терминале, и если система не вернула ошибки, то в списках интерфейсов бриджа увидим добавленные интерфейсы с нужными настройками

-16

Осталось задать сами vlan-ы на бридже.

Важное замечание - для каждого vlan-a должна быть отдельная запись.

В меню Bridge переходим на вкладку VLANs, и нажимаем "+"

-17

Попадаем в диалоговое окно создания vlan-ов:

  • в поле "bridge" выбираем бридж к которому относится vlan;
  • в поле "VLAN IDs" указываем номер vlan-а (значение тега);
  • в поле "Tagged" выбираем интерфейсы, через которые разрешаем прохождение тегированных кадров с заданным выше тегом;
  • в поле "Untagged" выбираем интерфейсы, через которые разрешаем прохождение нетегированных кадров, принадлежащих заданному vlan-у;

Для нашей схемы настройки vlan выглядят так:

-18

-19
-20
-21
-22
-23

После задания vlan-ов, они будут отображаться на вкладке "VLANs", если выставить отображение колонок Tagged и Untagged, будут видны настройки каждого vlan-a

-24

Обратите внимание, что порты 1-12 гидридные и для vlan115 разрешено прохождение кадров с данным тегом в этих портах.

Мы задали все настройки в коммутаторе для работы с vlan-ами, но ещё не включили механизм bridge vlan filtering. Включается BVF в меню настройки самого бриджа, на вкладке "Bridge", кликаем два раза на нашем бридже, в открывшемся меню переходим на вкладку "VLAN"

-25

Ставим галку в чекбоксе "VLAN Filtering", в появившемся поле "Frame Types" выбираем "admit only vlan tagged", ставим галку в чекбоксе напротив "Ingress Filtering" и нажимаем OK.

-26

После этого наш коммутатор начинает работать в режиме BVF.

Создадим и настроим служебный интерфейс для управления коммутатором.

В меню "Interfaces" перейдём на вкладку "VLAN" и нажмём "+"

-27

В появившемся окне, на вкладке "General", в поле "Name" задаём имя интерфейса (я обычно указываю номер vlan), в поле "VLAN ID" указываем номер vlan-а, в поле "interface" укажем родительский интерфейс (в нашем случае это будет созданный нами бридж). И нажимаем "OK".

-28

Созданный интерфейс будет отображаться на вкладке "VLAN" в меню "Interfaces"

-29

Для того, чтобы наш коммутатор распознавал трафик, относящийся к созданному интерфейсу vlan110, нам нужно в глобальных настройках бриджей, а именно на вкладке VLANs, для vlan-a, в котором создан интерфейс, добавить наш бридж как интерфейс, через который может проходить тегированный трафик.

Так у нас было настроено
Так у нас было настроено
Разрешаем интерфейсу bridge1 передавать тегированный трафик для 110 vlan-а
Разрешаем интерфейсу bridge1 передавать тегированный трафик для 110 vlan-а
Фиксируем настройку, видно, что в поле Tagged для vlan110 появился интерфейс bridge1
Фиксируем настройку, видно, что в поле Tagged для vlan110 появился интерфейс bridge1

После данных манипуляций, интерфейс vlan110 заработает полноценно. Если в других vlan-ах требуются интерфейсы vlan, то для каждого такого vlan-a надо будет в меню bridge => VLAN добавить созданный бридж-интерфейс в список интерфейсов, для которых разрешёно прохождение тегированных кадров в соответствующем vlan. Я это объясняю тем, что такие логические структуры как бридж-интерфейс и vlan-интерфейс управляются CPU коммутатора, а за глобальные настройки портов в бридже и настройки vlan-ов ответственен switch-chip, и разрешение на прохождение тегированных кадров для бридж-интерфейса связывает CPU и switch-chip в единую систему коммутации.

Зададим на интерфейсе vlan110 ip адрес (по нашей схеме это 192.168.110.10)

Заходим в меню "IP" => "Adresses"

-33

В появившемся окне нажимаем кнопку "+"

В поле Address указываем адрес с маской, в формате 192.168.110.10/24, в поле Interface выбираем интерфейс vlan110, нажимаем "OK".

-34

Т.к. интерфейс vlan110, принадлежит к управляющей подсети, то имеет смысл включить на нём MNDP протокол, это позволит видеть коммутатору соседей по управляющей сети. Для этого добавляем его в группу интерфейсов MAC-Services (как сделать группу интерфейсов, и разрешить для неё протокол MDNP, рассказываю в этой статье, в пятом пункте). Заходим в меню Interfaces и на вкладке Interface List нажимаем кнопку +, в появившемся меню в поле List выбираем нашу группу (я её обычно называю MAC-Services, но вы можете обозвать её по своему усмотрению), в поле Interface выбираем интерфейс vlan110.

-35

На скриншоте видно, что у меня в эту группу добавлено ещё 2 интерфейса, я обычно перестраховываюсь, и как минимум на одном физическом интерфейсе включаю MNDP, причём этот интерфейс не будет принадлежать к какому либо бриджу или вилану, нужен он только, чтобы в случае потери доступа к устройству (мало ли какие обстоятельства, например админ случайно через drag&drop в фильтре, правило drop all поставил выше правила разрешающего доступ админу в цепочке input), в этом случае всегда можно воспользоваться консольным портом, но это если у вас под рукой будет рабочий консольный кабель, а так же рабочий кабель COM to USB, да и доступ получится только к терминалу, а мне удобнее работать через WinBox, так что рекомендую оставлять себе эту лазейку.

Финальным штрихом, настроим межсетевой экран на коммутаторе, чтобы доступ к управлению коммутатора был только из подсетей или с адресов, разрешённых администратором (в нашем случае это будет подсеть 192.168.110.0/24). Настройки firewall будут один в один как в этой статье.

Вся конфигурация коммутатора будет выглядеть так:

/interface bridge

add frame-types=admit-only-vlan-tagged name=bridge1 vlan-filtering=yes

/interface ethernet

set [ find default-name=ether21 ] comment="to LABS-hAPaclite-SW2 (to ether1)"

set [ find default-name=ether22 ] comment="to LABS-hAPaclite-SW2 (to ether2)"

set [ find default-name=ether23 ] comment="to LABS-hAPac2-GW1 (to ether4)"

set [ find default-name=ether24 ] comment="to LABS-hAPac2-GW1 (to ether5)"

/interface vlan

add interface=bridge1 name=vlan110 vlan-id=110

/interface bonding

add comment="to LABS-hAPac2-GW1 (to ether4,5)" mode=802.3ad name=bonding1 slaves=ether23,ether24 transmit-hash-policy=layer-2-and-3

add comment="to LABS-hAPaclite-SW2 (to ether1,2)" mode=802.3ad name=bonding2 slaves=ether21,ether22 transmit-hash-policy=layer-2-and-3

/interface list

add name=MAC-Services

/interface bridge port

add bridge=bridge1 frame-types=admit-only-vlan-tagged ingress-filtering=yes interface=bonding1

add bridge=bridge1 frame-types=admit-only-vlan-tagged ingress-filtering=yes interface=bonding2

add bridge=bridge1 ingress-filtering=yes interface=ether1 pvid=111

add bridge=bridge1 ingress-filtering=yes interface=ether2 pvid=111

add bridge=bridge1 ingress-filtering=yes interface=ether3 pvid=111

add bridge=bridge1 ingress-filtering=yes interface=ether4 pvid=111

add bridge=bridge1 ingress-filtering=yes interface=ether5 pvid=111

add bridge=bridge1 ingress-filtering=yes interface=ether6 pvid=111

add bridge=bridge1 ingress-filtering=yes interface=ether7 pvid=111

add bridge=bridge1 ingress-filtering=yes interface=ether8 pvid=111

add bridge=bridge1 ingress-filtering=yes interface=ether9 pvid=111

add bridge=bridge1 ingress-filtering=yes interface=ether10 pvid=111

add bridge=bridge1 ingress-filtering=yes interface=ether11 pvid=111

add bridge=bridge1 ingress-filtering=yes interface=ether12 pvid=111

add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged ingress-filtering=yes interface=ether13 pvid=114

add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged ingress-filtering=yes interface=ether14 pvid=114

add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged ingress-filtering=yes interface=ether15 pvid=114

add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged ingress-filtering=yes interface=ether16 pvid=114

add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged ingress-filtering=yes interface=ether17 pvid=114

add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged ingress-filtering=yes interface=ether18 pvid=114

add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged ingress-filtering=yes interface=ether19 pvid=114

add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged ingress-filtering=yes interface=ether20 pvid=114

/ip neighbor discovery-settings

set discover-interface-list=MAC-Services

/interface bridge vlan

add bridge=bridge1 tagged=bonding1,bonding2,bridge1 vlan-ids=110

add bridge=bridge1 tagged=bonding1,bonding2 untagged=ether1,ether2,ether3,ether4,ether5,ether6,ether7,ether8,ether9,ether10,ether11,ether12 vlan-ids=111

add bridge=bridge1 tagged=bonding1,bonding2 vlan-ids=112

add bridge=bridge1 tagged=bonding1,bonding2 vlan-ids=113

add bridge=bridge1 tagged=bonding1,bonding2 untagged=ether13,ether14,ether15,ether16,ether17,ether18,ether19,ether20 vlan-ids=114

add bridge=bridge1 tagged=bonding1,bonding2,ether1,ether2,ether3,ether4,ether5,ether6,ether7,ether8,ether9,ether10,ether11,ether12 vlan-ids=115

/interface list member

add interface=sfp-sfpplus4 list=MAC-Services

add interface=sfp-sfpplus3 list=MAC-Services

add interface=vlan110 list=MAC-Services

/ip address

add address=192.168.110.10/24 interface=vlan110 network=192.168.110.0

/ip firewall address-list

add address=192.168.110.0/24 comment="MGMNT Net" list=admins

/ip firewall filter

add action=accept chain=forward comment=Statefull connection-state=established,related

add action=accept chain=input connection-state=established,related

add action=drop chain=forward comment="Drop Invalid" connection-state=invalid

add action=drop chain=input connection-state=invalid

add action=accept chain=input comment=Admins dst-port=42022,48291 protocol=tcp src-address-list=admins

add action=accept chain=input protocol=icmp src-address-list=admins

add action=drop chain=forward comment="Drop all"

add action=drop chain=input

/ip service

set telnet disabled=yes

set ftp disabled=yes

set www disabled=yes

set ssh port=42022

set api disabled=yes

set winbox port=48291

set api-ssl disabled=yes

/system identity

set name=LABS-CRS328-SW1

/system ntp client

set enabled=yes primary-ntp=192.168.110.1

/system routerboard settings

set boot-os=router-os

/system script

add dont-require-permissions=no name=script1 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\

"for a from=3 to=12 do={/interface bridge port add interface=\"ether\$a\" bridge=bridge1 frame-types=admit-all ingress-filtering=yes pvid=122}"

/tool mac-server

set allowed-interface-list=MAC-Services

/tool mac-server mac-winbox

set allowed-interface-list=MAC-Services

/tool mac-server ping

set enabled=no

На этом настройка нашего коммутатора через механизм BVF завершена.

Если дочитали до этого момента, и возможно будете использовать данный материал в качестве черновика, просьба подписаться на канал, мне будет очень приятно. А если по тексту статьи возникли вопросы, добро пожаловать в комментарии.