UPD 2019.01.18: Добавлен синтаксис настройки VLAN с учетом изменений RouterOS 6.41+.
В данной статье мы настроим VLAN’ы на коммутаторе MikroTik CRS125-24G-1S и транковое соединение с коммутатором Cisco Catalyst 2960. Best Practices по настройке VLAN’ов на оборудовании обоих вендоров обсуждать не будем, поскольку цель — понять принципы. Начнем как всегда с постановки задачи.
Имеется:
— коммутатор MikroTik CRS125-24G-1S-RM с заводскими настройками;
— коммутатор Cisco Catalyst WS-C2960CG-8TC-L;
Требуется:
— настроить схему сети:
— в транковом соединении:
а) трафик VLAN1 передается без тега;
б) трафик VLAN10 передается тегированным;
Настройка.
— Сбрасываем предварительные настройки коммутатора:
/system reset-configuration skip-backup=yes no-defaults=yes Dangerous! Reset anyway? [y/N]: y system configuration will be reset
— Задействуем чип коммутации.
Для RouterOS 6.41+
Создаем бриджевый интерфейс BR_MAIN на который CPU будет принимать трафик.
/interface bridge add name=BR_MAIN protocol-mode=none
Добавляем интерфейсы в данный бридж.
/interface bridge port add bridge=BR_MAIN interface=ether1 add bridge=BR_MAIN interface=ether2 add bridge=BR_MAIN interface=ether3 add bridge=BR_MAIN interface=ether4 add bridge=BR_MAIN interface=ether5 add bridge=BR_MAIN interface=ether6 add bridge=BR_MAIN interface=ether7 add bridge=BR_MAIN interface=ether8 add bridge=BR_MAIN interface=ether9 add bridge=BR_MAIN interface=ether10 add bridge=BR_MAIN interface=ether11 add bridge=BR_MAIN interface=ether12 add bridge=BR_MAIN interface=ether13 add bridge=BR_MAIN interface=ether14 add bridge=BR_MAIN interface=ether15 add bridge=BR_MAIN interface=ether16 add bridge=BR_MAIN interface=ether17 add bridge=BR_MAIN interface=ether18 add bridge=BR_MAIN interface=ether19 add bridge=BR_MAIN interface=ether20 add bridge=BR_MAIN interface=ether21 add bridge=BR_MAIN interface=ether22 add bridge=BR_MAIN interface=ether23 add bridge=BR_MAIN interface=ether24 add bridge=BR_MAIN interface=sfp1
Проверяем, что чип коммутации задействован.
[admin@MikroTik] > /interface bridge port print Flags: X - disabled, I - inactive, D - dynamic, H - hw-offload # INTERFACE BRIDGE HW PVID PRIORITY PATH-COST INT-PATH-COST HORIZON 0 H ether1 BR_MAIN yes 1 0x80 10 10 none 1 I H ether2 BR_MAIN yes 1 0x80 10 10 none 2 H ether3 BR_MAIN yes 1 0x80 10 10 none 3 H ether4 BR_MAIN yes 1 0x80 10 10 none 4 I H ether5 BR_MAIN yes 1 0x80 10 10 none 5 I H ether6 BR_MAIN yes 1 0x80 10 10 none 6 I H ether7 BR_MAIN yes 1 0x80 10 10 none 7 I H ether8 BR_MAIN yes 1 0x80 10 10 none 8 I H ether9 BR_MAIN yes 1 0x80 10 10 none 9 I H ether10 BR_MAIN yes 1 0x80 10 10 none 10 I H ether11 BR_MAIN yes 1 0x80 10 10 none 11 I H ether12 BR_MAIN yes 1 0x80 10 10 none 12 I H ether13 BR_MAIN yes 1 0x80 10 10 none 13 I H ether14 BR_MAIN yes 1 0x80 10 10 none 14 I H ether15 BR_MAIN yes 1 0x80 10 10 none 15 I H ether16 BR_MAIN yes 1 0x80 10 10 none 16 I H ether17 BR_MAIN yes 1 0x80 10 10 none 17 I H ether18 BR_MAIN yes 1 0x80 10 10 none 18 I H ether19 BR_MAIN yes 1 0x80 10 10 none 19 I H ether20 BR_MAIN yes 1 0x80 10 10 none 20 I H ether21 BR_MAIN yes 1 0x80 10 10 none 21 I H ether22 BR_MAIN yes 1 0x80 10 10 none 22 I H ether23 BR_MAIN yes 1 0x80 10 10 none 23 I H ether24 BR_MAIN yes 1 0x80 10 10 none 24 I H sfp1 BR_MAIN yes 1 0x80 10 10 none
Флаг «Н» напротив интерфейсов указывает на поддержку аппаратной обработки трафика.
Для RouterOS pre-6.41
Для упрощения настройки выведем номера интерфейсов:
/interface ethernet print Flags: X - disabled, R - running, S - slave # NAME MAC-ADDRESS MASTER-PORT SWITCH 0 ether1 6C:11:11:11:11:C4 none switch1 1 ether2 6C:11:11:11:11:C5 none switch1 2 ether3 6C:11:11:11:11:C6 none switch1 3 ether4 6C:11:11:11:11:C7 none switch1 4 ether5 6C:11:11:11:11:C8 none switch1 5 ether6 6C:11:11:11:11:C9 none switch1 6 ether7 6C:11:11:11:11:CA none switch1 7 ether8 6C:11:11:11:11:CB none switch1 8 ether9 6C:11:11:11:11:CC none switch1 9 ether10 6C:11:11:11:11:CD none switch1 10 ether11 6C:11:11:11:11:CE none switch1 11 ether12 6C:11:11:11:11:CF none switch1 12 ether13 6C:11:11:11:11:D0 none switch1 13 ether14 6C:11:11:11:11:D1 none switch1 14 ether15 6C:11:11:11:11:D2 none switch1 15 ether16 6C:11:11:11:11:D3 none switch1 16 ether17 6C:11:11:11:11:D4 none switch1 17 ether18 6C:11:11:11:11:D5 none switch1 18 ether19 6C:11:11:11:11:D6 none switch1 19 ether20 6C:11:11:11:11:D7 none switch1 20 ether21 6C:11:11:11:11:D8 none switch1 21 ether22 6C:11:11:11:11:D9 none switch1 22 ether23 6C:11:11:11:11:DA none switch1 23 ether24 6C:11:11:11:11:DB none switch1 24 sfp1 6C:11:11:11:11:DC none switch1
Настроим интерфейс sfp1 в качестве Master Port’а:
/interface ethernet set master-port=sfp1 numbers=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
Проверяем произведенные настройки:
/interface ethernet print Flags: X - disabled, R - running, S - slave # NAME MAC-ADDRESS MASTER-PORT SWITCH 0 S ether1 6C:11:11:11:11:C4 sfp1 switch1 1 S ether2 6C:11:11:11:11:C5 sfp1 switch1 2 S ether3 6C:11:11:11:11:C6 sfp1 switch1 3 S ether4 6C:11:11:11:11:C7 sfp1 switch1 4 S ether5 6C:11:11:11:11:C8 sfp1 switch1 5 S ether6 6C:11:11:11:11:C9 sfp1 switch1 6 S ether7 6C:11:11:11:11:CA sfp1 switch1 7 S ether8 6C:11:11:11:11:CB sfp1 switch1 8 S ether9 6C:11:11:11:11:CC sfp1 switch1 9 S ether10 6C:11:11:11:11:CD sfp1 switch1 10 S ether11 6C:11:11:11:11:CE sfp1 switch1 11 S ether12 6C:11:11:11:11:CF sfp1 switch1 12 RS ether13 6C:11:11:11:11:D0 sfp1 switch1 13 S ether14 6C:11:11:11:11:D1 sfp1 switch1 14 RS ether15 6C:11:11:11:11:D2 sfp1 switch1 15 S ether16 6C:11:11:11:11:D3 sfp1 switch1 16 S ether17 6C:11:11:11:11:D4 sfp1 switch1 17 S ether18 6C:11:11:11:11:D5 sfp1 switch1 18 S ether19 6C:11:11:11:11:D6 sfp1 switch1 19 S ether20 6C:11:11:11:11:D7 sfp1 switch1 20 S ether21 6C:11:11:11:11:D8 sfp1 switch1 21 S ether22 6C:11:11:11:11:D9 sfp1 switch1 22 S ether23 6C:11:11:11:11:DA sfp1 switch1 23 S ether24 6C:11:11:11:11:DB sfp1 switch1 24 R sfp1 6C:11:11:11:11:DC none switch1
Поскольку интерфейс sfp1 указан в качестве Master Port’а, его состояние всегда активное — «R», причем с соответствующей индикацией на панели коммутатора:
Далее для RouterOS ВСЕХ версий
— Объединим порты ether13 и ether15 в агрегированный канал, он же Trunk, он же EtherChannel в терминологии Cisco:
/interface ethernet switch trunk> add member-ports=ether13,ether15 name=ETHCH-PORT
Больше никаких настроек транк на коммутаторе MikroTik CRS в момент публикации статьи не поддерживает. Функционирует он в статическом режиме. Балансировщик загрузки рассчитывает хэш на основе МАС адресов источника и назначения, IP адресов источника и назначения, а также TCP/UDP портов источника и назначения — ссылка.
— Настроим принадлежность портов коммутатора VLAN’ам:
Укажем порты принадлежащие VLAN10:
/interface ethernet switch vlan> add vlan-id=10 ports=ether1,ether2,ether3,ether4,ether13,ether15,switch1-cpu,ETHCH-PORT
Укажем порты принадлежащие VLAN1:
/interface ethernet switch vlan> add vlan-id=1 ports=ether5,ether6,ether7,ether8,ether9,ether10,ether11,ether12,ether13,ether14,ether15,ether16,ether17,ether18,ether19,ether20,ether21,ether22,ether23,ether24,switch1-cpu,ETHCH-PORT
Проверяем настройки:
/int ethernet switch vlan print Flags: X - disabled, I - invalid, D - dynamic # VLAN-ID PORTS SVL LEARN FLOOD INGRESS-MIRROR QOS-GROUP 0 10 ETHCH-PORT no yes no no none ether1 ether2 ether3 ether4 switch1-cpu 1 D 4095 switch1-cpu no no no no none 2 1 ETHCH-PORT no yes no no none ether5 ether6 ether7 ether8 ether9 ether10 ether11 ether12 ether14 ether16 ether17 ether18 ether19 ether20 ether21 ether22 ether23 ether24 switch1-cpu
Видим, что агрегируемые порты ether13 и ether15 не отображаются, вместо них указан ETHCH-PORT.
VLAN4095 — технологическая VLAN, которая создается после указания Master Port’а на интерфейсах.
В Wiki указано, что данная VLAN требуется для функционирования процессов внутри коммутаторов CRS и имеет меньший приоритет обработки, чем пользовательские VLAN’ы. Могу догадываться, что таким образом MikroTik и реализовал поддержку нескольких Master Port’ов на коммутаторах CRS, но не факт.
— Настроим на портах доступа добавление тегов VLAN для входящего нетегированного трафика:
Для VLAN10 портами доступа являются ether1…4.:
/interface ethernet switch ingress-vlan-translation> add ports=ether1,ether2,ether3,ether4 customer-vid=0 new-customer-vid=10
Для VLAN1 портами доступа являются ether5…24. Порты ether13 и ether15 в составе транка ETHCH-PORT передают трафик принадлежащий VLAN1 также нетегированный:
/interface ethernet switch ingress-vlan-translation> add ports=ether5,ether6,ether7,ether8,ether9,ether10,ether11,ether12,ether13,ether14,ether15,ether16,ether17,ether18,ether19,ether20,ether21,ether22,ether23,ether24,ETHCH-PORT customer-vid=0 new-customer-vid=1
Проверим настройки:
/interface ethernet switch ingress-vlan-translation print Flags: X - disabled, I - invalid, D - dynamic 0 ports=ether1,ether2,ether3,ether4 service-vlan-format=any customer-vlan-format=any customer-vid=0 new-customer-vid=10 pcp-propagation=no sa-learning=yes 1 ports=ether5,ether6,ether7,ether8,ether9,ether10,ether11,ether12,ether13,ether14,ether15,ether16,ether17,ether18,ether19,ether20,ether21,ether22,ether23,ether24,ETHCH-PORT service-vlan-format=any customer-vlan-format=any customer-vid=0 new-customer-vid=1 pcp-propagation=no sa-learning=yes 2 D ports="" service-vlan-format=any customer-vlan-format=any new-customer-vid=4095 pcp-propagation=no sa-learning=no
Заметим, что в этом выводе конфигурации порты ether13 и ether15 указываются вместе с транком ETHCH-PORT.
— Указываем порты, где исходящие кадры будут содержать теги:
VID 10 тегируется исходящий трафик на портах ether13, ether15 в составе транка ETHCH-PORT и switch1-cpu:
/interface ethernet switch egress-vlan-tag> add tagged-ports=ether13,ether15,switch1-cpu,ETHCH-PORT vlan-id=10
VID 1 тегируется исходящий трафик на порту switch1-cpu чипа коммутации:
/interface ethernet switch egress-vlan-tag> add tagged-ports=switch1-cpu vlan-id=1
На портах ether13 и ether 15 в составе транка ETHCH-PORT исходящий трафик принадлежащий VLAN1 передается без тега, поэтому эти порты не указываем.
Проверка конфигурации:
/interface ethernet switch egress-vlan-tag> print Flags: X - disabled, I - invalid, D - dynamic # VLAN-ID TAGGED-PORTS 0 1 switch1-cpu 1 D 4095 2 10 ETHCH-PORT switch1-cpu
Здесь же порты ether13 и ether15 не указываются, только транк ETHCH-PORT.
— Постольку нам потребуются различные сервисы предоставляемые RouterOS, для каждой VLAN настраиваем интерфейсы vlan1 и vlan10:
Для RouterOS 6.41+
/interface vlan add name=vlan1 vlan-id=1 interface=BR_MAIN /interface vlan add name=vlan10 vlan-id=10 interface=BR_MAIN
Для RouterOS pre-6.41
/interface vlan add name=vlan1 vlan-id=1 interface=sfp1 /interface vlan add name=vlan10 vlan-id=10 interface=sfp1
— Перед выполнением следующего пункта рекомендую проверить правильную работу собранной схемы: обмен трафика внутри каждой VLAN, изоляцию трафика разных VLAN, удаленное управление коммутатора MikroTik CRS из разных VLAN и т.д.
— После того, как убедились в корректной настройке коммутатора глобально запрещаем передачу тегов VLAN не указанных в настройках. Как я понимаю — это некий аналог Secure mode чипа коммутации на маршрутизаторах MikroTik.
/interface ethernet switch set forward-unknown-vlan=no
PS
В процессе настройки лабораторной работы я столкнулся с фичей/особенностью/багом.
После настройки правил обработки тегов VLAN чипом коммутации терялось управление по MAC адресу, хотя подключение по IP происходило успешно. Данное поведение наблюдалось только на версиях RouterOS 6.41+. На более ранних версиях проблем с подключением не наблюдалось.
Для решения проблемы доступа по MAC адресу я создал новый список интерфейсов, добавил в него интерфейсы управления и в настройках MAC-Server’а указал данный список.
/interface list add name=IFLIST_MGMT /interface list member add list=IFLIST_MGMT interface=vlan1 add list=IFLIST_MGMT interface=vlan10 /tool mac-server set allowed-interface-list=IFLIST_MGMT /tool mac-server mac-winbox set allowed-interface-list=IFLIST_MGMT