Данный материал подходит для 6-й версии routerOS (начиная с 6.41), и для 7-й версии (принципиальных отличий не нашёл).
Хочу разобрать тему коммутации в mikrotik и на базе BVF и через switch chip, но не в рамках одного свитча (сферическая настройка в вакууме), а показать рабочий пример со шлюзовым роутером, уровнями дистрибуции и доступа, множеством сетей. В рамках одной статьи получается очень громоздко, потому разобью тему на три статьи: настройка BVF на коммутаторе (эта статья), настройка схемы "router on a stick" и BVF на маршрутизаторе, настройка коммутации через switch chip (но без коммутаторов сотой и двухсотой серий). Будет ещё четвёртая статья в этой серии, про настройку CAPsMAN, на базе созданной схемы коммутации.
Затронем следующие темы:
- Непосредственно настройку bridge vlan filtering на коммутаторе (транковые, access и гибридные порты, интерфейс управления);
- Настройка роутера в режиме router on a stick (BVF на роутере, vlan интерфейсы, фильтрация трафика, dhcp на интерфейсах), маршрутизацию настраивать не будем, т.к. по схеме у нас роутер один, все сети будут заведены на нём, поэтому всё ограничится connected маршрутами;
- Немного пройдёмся по bonding интерфейсам.
- Настроим IP телефон Linksys на работу с гибридным интерфейсом коммутатора (в следующей статье).
В качестве шлюзового роутера будем использовать hAP ac2, условным коммутатором дистрибуции будет crs328-24p, коммутатором доступа будет hAPac lite.
Коммутатор дистрибуции обычно распределяет трафик между коммутаторами доступа и шлюзом, но в нашем случае упростим, и он ещё будет выполнять функции пользовательского коммутатора доступа и серверного коммутатора доступа.
Схему будем собирать такую:
Таблица с описанием подсетей и vlan-ов:
Таблицы с режимами работ портов на оборудовании:
IP план для сети управления (в других сетях у нас устройства не планируются):
Предварительно, на всех устройствах произведем настройку в соответствии с этой статьёй, дополню только, что для коммутаторов имеет смысл отключить следующие пакеты: dhcp, hotspot, ipv6, ppp, routing, wireless (т.к. они не используются). Сервером времени у нас будет шлюзовой роутер, так что в поле "SNTP Client" на коммутаторах ставим его адрес. Брандмауэр пока трогать не будем, настроим его после задания IP адресов на интерфейсах.
Перед настройкой коммутаторов, кратко пройдёмся по терминам, а именно, какие бывают типы портов:
- транковый (или тегированный, или магистральный) - порт, в котором фреймы передаются только с тегами; транковыми портами обычно соединены коммутаторы с коммутаторами, или коммутаторы дистрибуции/ядра с маршрутизаторами, или коммутаторы\маршрутизаторы с серверами (особенное если это гипервизоры);
- доступа (или не тегированный) - порт, который принадлежит к какому то vlan, но фреймы из этого порта выходят без тега (коммутатор удаляет тег, когда передает фрейм через этот порт), а когда фреймы в этот порт приходят, коммутатор добавляет соответствующий тег фрейму;
- гибридный - порт, который настроен как порт доступа для какого либо одного vlan, и как транковый для других vlan (их м.б. несколько), как пример использования гибридного порта - подключение IP телефона и ПК через один порт коммутатора, если эти устройства находятся в разных подсетях, настраиваем для такого порта передачу фреймов с тегом для vlan ip телефонии, а для пользовательской сети настраиваем порт как порт доступа.
Настроим BVF на коммутаторе LABS-CRS328-SW1, по схеме он у нас является коммутатором дистрибуции.
Для начала создадим bonding интерфейсы, до создания бриджа, чтобы потом поместить их в бридж. Заходим в меню Interfaces, выбираем вкладку Bonding и нажимаем "+", появится меню создания интерфейсов
Основные настройки нового интерфейса расположены на вкладке "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
На вкладке "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".
Добавляем в созданный бридж все порты, на которых будем настраивать коммутацию, я покажу два варианта добавления портов, через GUI и через скрипт (если у вас 48 портовый коммутатор, то руками добавлять 48 портов грустно, лучше это автоматизировать).
Чтобы видеть в общем списке добавленных в бридж портов, настройки связанные с vlan, на вкладке "Ports" добавим дополнительные колонки, нажимаем справа стрелку "вниз", в выпадающем меню выбираем пункт "Show Columns"
В меню "Columns" ставим галки в чекбоксах "Frame Types", "Ingres Filtering", "PVID".
"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), и указываем к какому бриджу должен относиться наш интерфейс, т.к. бриджей м.б. несколько
В том же меню переходим на вкладку "VLAN"
Ставим галку в чекбоксе напротив "Ingress Filtering", режим работы порта выбираем "admit only VLAN tagged", т.к. bonding интерфейсы у нас транковые, значение в поле "PVID" при транковом режиме порта игнорируется и м.б. любым, оставляем его значение по умолчанию.
Нажимаем кнопку "OK" для добавления интерфейса.
У bonding2 настройки аналогичны, так что копируем этот порт и на вкладке "General" просто выбираем интерфейс bonding2.
Добавим интерфейс Ether1, в соответствии со схемой это гибридный интерфейс, который должен пропускать тегированный трафик кадров с тегом 115 и быть портом "доступа" для vlan 111.
В меню добавления порта, на вкладке "General" выбираем интерфейс Ether1, а на вкладке "VLAN" в поле "PVID" указываем номер 111, режим работы порта выбираем "admit all", ставим галку в чекбоксе напротив "Ingress Filtering".
Добавим интерфейc Ether13, который должен работать в режиме доступа для vlan 114.
В меню добавления порта, на вкладке "General" выбираем интерфейс Ether13, а на вкладке "VLAN" в поле "PVID" указываем номер 114, режим работы порта выбираем "admit only untagged and priority tagged", ставим галку в чекбоксе напротив "Ingress Filtering".
Если перед настройкой коммутатора, спланировать какие порты в каких режимах будут работать, и для множества портов параметры будут однотипные, то для массового добавления портов в бридж с нужными параметрами, можно воспользоваться скриптом.
Добавление и настройка портов с 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 указываем с какого по какой интерфейс мы настраиваем, и задаём соответствующие параметры.
Скрипт можно выполнить прямо в терминале, и если система не вернула ошибки, то в списках интерфейсов бриджа увидим добавленные интерфейсы с нужными настройками
Осталось задать сами vlan-ы на бридже.
Важное замечание - для каждого vlan-a должна быть отдельная запись.
В меню Bridge переходим на вкладку VLANs, и нажимаем "+"
Попадаем в диалоговое окно создания vlan-ов:
- в поле "bridge" выбираем бридж к которому относится vlan;
- в поле "VLAN IDs" указываем номер vlan-а (значение тега);
- в поле "Tagged" выбираем интерфейсы, через которые разрешаем прохождение тегированных кадров с заданным выше тегом;
- в поле "Untagged" выбираем интерфейсы, через которые разрешаем прохождение нетегированных кадров, принадлежащих заданному vlan-у;
Для нашей схемы настройки vlan выглядят так:
После задания vlan-ов, они будут отображаться на вкладке "VLANs", если выставить отображение колонок Tagged и Untagged, будут видны настройки каждого vlan-a
Обратите внимание, что порты 1-12 гидридные и для vlan115 разрешено прохождение кадров с данным тегом в этих портах.
Мы задали все настройки в коммутаторе для работы с vlan-ами, но ещё не включили механизм bridge vlan filtering. Включается BVF в меню настройки самого бриджа, на вкладке "Bridge", кликаем два раза на нашем бридже, в открывшемся меню переходим на вкладку "VLAN"
Ставим галку в чекбоксе "VLAN Filtering", в появившемся поле "Frame Types" выбираем "admit only vlan tagged", ставим галку в чекбоксе напротив "Ingress Filtering" и нажимаем OK.
После этого наш коммутатор начинает работать в режиме BVF.
Создадим и настроим служебный интерфейс для управления коммутатором.
В меню "Interfaces" перейдём на вкладку "VLAN" и нажмём "+"
В появившемся окне, на вкладке "General", в поле "Name" задаём имя интерфейса (я обычно указываю номер vlan), в поле "VLAN ID" указываем номер vlan-а, в поле "interface" укажем родительский интерфейс (в нашем случае это будет созданный нами бридж). И нажимаем "OK".
Созданный интерфейс будет отображаться на вкладке "VLAN" в меню "Interfaces"
Для того, чтобы наш коммутатор распознавал трафик, относящийся к созданному интерфейсу vlan110, нам нужно в глобальных настройках бриджей, а именно на вкладке VLANs, для vlan-a, в котором создан интерфейс, добавить наш бридж как интерфейс, через который может проходить тегированный трафик.
После данных манипуляций, интерфейс vlan110 заработает полноценно. Если в других vlan-ах требуются интерфейсы vlan, то для каждого такого vlan-a надо будет в меню bridge => VLAN добавить созданный бридж-интерфейс в список интерфейсов, для которых разрешёно прохождение тегированных кадров в соответствующем vlan. Я это объясняю тем, что такие логические структуры как бридж-интерфейс и vlan-интерфейс управляются CPU коммутатора, а за глобальные настройки портов в бридже и настройки vlan-ов ответственен switch-chip, и разрешение на прохождение тегированных кадров для бридж-интерфейса связывает CPU и switch-chip в единую систему коммутации.
Зададим на интерфейсе vlan110 ip адрес (по нашей схеме это 192.168.110.10)
Заходим в меню "IP" => "Adresses"
В появившемся окне нажимаем кнопку "+"
В поле Address указываем адрес с маской, в формате 192.168.110.10/24, в поле Interface выбираем интерфейс vlan110, нажимаем "OK".
Т.к. интерфейс vlan110, принадлежит к управляющей подсети, то имеет смысл включить на нём MNDP протокол, это позволит видеть коммутатору соседей по управляющей сети. Для этого добавляем его в группу интерфейсов MAC-Services (как сделать группу интерфейсов, и разрешить для неё протокол MDNP, рассказываю в этой статье, в пятом пункте). Заходим в меню Interfaces и на вкладке Interface List нажимаем кнопку +, в появившемся меню в поле List выбираем нашу группу (я её обычно называю MAC-Services, но вы можете обозвать её по своему усмотрению), в поле Interface выбираем интерфейс vlan110.
На скриншоте видно, что у меня в эту группу добавлено ещё 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 завершена.
Если дочитали до этого момента, и возможно будете использовать данный материал в качестве черновика, просьба подписаться на канал, мне будет очень приятно. А если по тексту статьи возникли вопросы, добро пожаловать в комментарии.