Настройка VLAN в RouterOS

Жуём по 20-му разу.

Глядишь кому-нибудь поможет. Своё видение того, как всю эту кухню настраивать.

Рассматривать мы будем настройку только на bridge в RouterOS, и я предполагаю, что вы в курсе какие есть аппаратные возможности у вашего маршрутизатора, так как такие возможности могут сказаться сильно на производительность, но в данной статье про настройку, а не про возможности чипа коммутации.

С чего начать

Одной из главных проблем или нюансов заключается в том, что обычно мы настраиваем все порты, в том числе и тот порт, через который производится текущая настройка.

Хорошее решение заключается в том, чтобы временно отказаться от настройки, того порта через которые мы подключены. К сожалению, это не всегда возможно, так как часто нас просят расширить текущую топологию коммутации, и мы находимся в работающей сети. И часто коммутатор подключают будущими Trunk портами в текущую сеть.

Чтобы все прошло удачно, и мы не отстрелили себе хвост, я использую следующие подходы.

А теперь по порядку

Коммутатор сброшен в чистую конфигурацию

Не испытывайте судьбу, выполните и забудьте

/system reset-configuration no-defaults=yes 

На bridge обязательно назначен mac адрес

Не испытывайте судьбу, пусть mac адрес у коммутатора будет всегда статичен, а не зависеть от поднятого порта на момент запуска коммутатора.

Я предпочитаю устанавливать такой же mac адрес, как и у первого порта.

На ваш закономерный вопрос почему первый, а не последний или какой-то другой? Ответ в любом коммутаторе\устройстве MikroTik всегда есть ether1, а вот второго может и не быть, вспомните sfp коммутаторы.

/interface/bridge/add name=br0 admin-mac="$[/interface ethernet get value-name=mac-address ether1]" auto-mac=no vlan-filtering=yes

Сеть Управления

Я предпочитаю использовать отдельный логический интерфейс для всяких штук management. Однако если вы не хотите добавлять логические интерфейсы, а хотите апеллировать интерфейсом bridge тогда в настройках bridge укажите значения pvid вашего management vlan.

Например, если ваш management vlan это VID 2, то используйте следующую команду:

/interface/bridge/set pvid=2 br0

Я предпочитаю использовать отдельный логический интерфейс.

/interface/vlan/add name=br0.2 vlan=2 interface=br0 comment=”mgmt”

Обратите внимания, что логический интерфейс назначается не на физический интерфейс, а на сам bridge. Также нам потребуется в случае логического интерфейса добавить vlan в таблицу коммутации egress, однако в случае с pvid, делать этого не нужно.

/interface/bridge/vlan add bridge=br0 tagged=br0 vlan-ids=2

Некоторые из вас наверняка спросят, что за чертовщина тут происходит, похоже на заклинание voodoo.=)

Все дело в контексте или в понимании уровня обструкции работы коммутатора.

Что такое Bridge

Для того чтобы понять «и простить» =), что такое и как работать с bridge, необходимо ознакомиться с простой схемой.

Перед вами схема.

Васильев Кирилл MikroTik Vasilev Kirill vlan

Самый нижний блок, это непосредственно чип коммутации и присоединенные к нему физические интерфейсы. Бывают разные схемы, несколько чипов коммутации или бывает какие-то порты подключены напрямую к CPU, а какие-то к Switch. Нижний блок — это аппаратная составляющая, сам чип коммутации соединен с CPU внутренним интерфейсом и обычно скорость данного интерфейса 1Gbps хотя есть и 2.5Gbps по-разному.

При этом необходимо помнить, что вы можете «натыкать» в настройках Bridge всякие ништяки, но эти ништяки могут не поддерживаться аппаратным (HW) чипом коммутации (например horizon), в таком случае те порты, на которых настроен неподдерживаемый аппаратным чипом функционал переводиться в режим passtruth, и фреймы с такого порта отправляются напрямую в CPU через «узкий» интерфейс. Бывают конфигурации, которые сразу отключает на всех портах HW, например mstp.

Хотя какой-то функционал и не поддерживается аппаратным чипом коммутации, он может и будет запросто поддерживаться программной реализацией в RouterOS (читай Linux). Соответственно чего бы вы «не натыкали» в настройках коммутатора, коммутация работать будет, просто может поменяться контекст исполнения это коммутации HW или Soft.

А теперь непосредственно про вот эту запись.

/interface/bridge/vlan add bridge=br0 tagged=br0 vlan-ids=2

Что на HW или что на Soft коммутаторе всегда присутствует ещё один интерфейс, который соединяет непосредственно с CPU или L3 CPU (логикой). Предположим, у вас пяти портовый коммутатор MikroTik c HW, к switch чипу подключено не пять интерфейсов, а на один больше - шесть. Шестой интерфейс — это тот самый интерфейс, которым подключен сам чип коммутации к CPU.

Такою топологию проще воспринимать как отдельно стоящий маршрутизатор и отдельно стоящий коммутатор соединенные каким-то линком.

В некоторых моделях вы можете найти отдельный раздел switch специально для настройки ТОЛЬКО аппаратной части Switch и в некоторых настройках вы можете увидеть такие порты

[mgm@test] > /interface ethernet switch rule add ports=
ether...    sfp-sfpplus1  sfp-sfpplus3  switch1-cpu
qsfpplus... sfp-sfpplus2  sfp-sfpplus4  switch2-cpu

Обратите внимание на switch1-cpu это и есть интерфейс, которым соединён аппаратный коммутатор с CPU. Если с аппаратной коммутацией стало немного проще, то что делать с программной реализацией, где нам взять этот самый интерфейс cpu?

В первых реализациях vlan-ов на bridge был такой интерфейс to-cpu (не вспомнил правильное название).

А далее такой порт переименовали в имя самого Bridge, ведь именно на нём вы поднимаете логический интерфейс, именно с него (от CPU) будут уходить в коммутатор трафик, который необходимо будет коммутировать.

Т.е сам Bridge это ещё и интерфейс, который соединяет L3 CPU с коммутацией, вот и всё.

При этом, в зависимости от уровня абстракции он может быть одновременно и switch1-cpu и L3 CPU.

Таблица vlan коммутации

Существует таблица коммутации процессом обучения каким-то образом заполнена информация, о том в каком vlan в каком интерфейсе находиться определённый мак адрес. Я не буду объяснять, как работает процесс обучения, там всё просто. Однако нужно понять каким образом происходит коммутация с vlan.

В таблице fdb мы видим все три основных параметра обучения mac,vlan,port и прочее

Васильев Кирилл MikroTik Vasilev Kirill vlan fdb

Существует два типа фильтрации

Когда фрейм без тэга прилетает на порт коммутатора, коммутатору необходимо понять среди какого vlan тега необходимо искать интерфейс выхода в таблице fdb, для этого используется Ingress фильтр и настраивается он на самом порту bridge-а во вкладке vlan, значение pvid.

Для примера

/interface bridge port add bridge=br0 interface=ether2 pvid=3

В примере выше мы настроили Ingress фильтр таким образом, трафик без тег-a будет искать интерфейс по таблице fdb vlan тег-a 3.

Когда коммутатор поймёт, что необходимо отправить фрейм допустим в пятый порт, он посмотрит в таблицу Egress и поймёт, что необходимо сделать с фреймом, установить тег или убрать из фрейма тег. Непосредственно Egress фильтр находится во вкладке vlan в разделе bridge.

В RouterOS используется технология симметричного vlan, когда мы указываем Ingress pvid=2, RouterOS автоматически и без необходимости создаст запись untagged=port в Egress фильтре.

Настраиваем Trunk

Предположим, что наш коммутатор имеет 6 портов Коммутатор проходной, 5 и 6 порт - Trunk остальные четыре порта, это порты доступа (access/untagged) 3 и 4 vlan соответственно, и да у нас есть vlan2 для управления.

Как я указывал ваше, только Trunk мы описываем в egress фильтре. Trunk порт – интерфейс, подключенный к другим устройствам, которые поддерживают технологию vlan, обычно коммутаторы.

Заполняем egress

/interface bridge vlan
add bridge=br0 vlan-ids=2 tagged="br0,ether5,ether6”    
add bridge=br0 vlan-ids=3 tagged="ether5,ether6” 
add bridge=br0 vlan-ids=4 tagged="ether5,ether6”    

Обратите внимания, что никакие untagged мы не указываем, когда мы укажем pvid, RouterOS сам всё сделает. Также так как нам нет необходимости вытаскивать на CPU 3 и 4 vlan br0 не указываем как теггированный.

Да, да я знаю, что мы можем сделать так:

/interface bridge vlan
add bridge=br0 vlan-ids=3,4 tagged="ether5,ether6”    

Такая запись подходит ТОЛЬКО, если данные теги идут транзитом через коммутатор и не будет сниматься тег иначе «жди беды» особенно если это будет vlan управления. Так как переделать такую контракцию «на живую» под safe-mode не так просто, придётся манипулировать с MAC адресами, чтобы вас не выкинуло.

Настраиваем access/untagged

Я не претендую на идеальную конфигурацию. Просто показываю как можно настроить и использовать функционал. Держите в голове, что у вас может быть сеть не из 6 портов, а и 500 и тогда такая конфигурация не покажется чересчур запутанная.

Так как у нас два тега будут access, то подготовим два интерфейса листа, например vlan3 и vlan4

/interface list
add name=vlan3
add name=vlan4

Далее добавим данный ЛИСТЫ в порты brdige при этом, к примеру включим PBDU Guard. Да вы можете настраивать и другие параметры, я же привел просто как пример.

/interface bridge port
add bridge=br0 bpdu-guard=yes interface=vlan3 pvid=3
add bridge=br0 bpdu-guard=yes interface=vlan4 pvid=4

Почти всё

Осталось дело за малым, добавим Trunk в бридж

/interface bridge port
add bridge=br0 interface=ether5
add bridge=br0 interface=ether6

А Accees порты вы добавляете в интерфейсы листы соответствующему номеру vlan, тем самым обеспечиваете безошибочную конфигурацию портов, относительно разных параметров. Вы не забудете включить bpdu-guard и не забудете указать pvid, так как он и все другие параметры копируется с настроек интерфейс листа. Также если вы решите поменять номер тега или какой-то параметр вам достаточно сделать это на интерфейс лист и настройки тут же будут перенесены на все порты.

Васильев Кирилл MikroTik Vasilev Kirill vlan fdb

Суть

Если ты до сюда дочитал и всё ровно нечего не понял =), вот тебе краткий ликбез.

  1. Хочешь сделать Access\untaged то укажи pvid на порту необходимого vlan.
  2. Хочешь сделать trunk, то укажи tagged порт в bridge->vlan.
  3. Хочешь сделать hybrid (Есть такое наименование) то выполни для порта первое и второе правила из этого списка естественно с разными тегами.
/interface bridge port 
add bridge=br0 interface=ether1 pvid=3
add bridge=br0 interface=ether2 

/interface bridge vlan
add bridge=br0 vlan-ids=3 tagged="ether2”  

В примере выше ether1 - untaged для vlan 3 и ether2 - tagged для этого же vlan.

Поделиться

Обсуждение