Метка: mtcswe

  • Настройка VLAN в RouterOS: bridge, trunk и access

    Настройка VLAN в RouterOS через bridge VLAN filtering объединяет порты в один bridge и задаёт разрешённые VLAN в таблице. Trunk передаёт теги, access добавляет PVID входящим нетегированным кадрам.

    Включение vlan-filtering перестраивает bridge и может разорвать управление. Подготовьте отдельный порт, консоль или Safe Mode, сначала настройте management VLAN и только затем включайте фильтрацию.

    С чего начать

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

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

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

    • Коммутатор сброшен в чистую конфигурацию.
    • На bridge обязательно назначен mac адрес.
    • Вы определились, как вы будете настраивать management сеть untagged или tagged vlan.
    • Таблица vlan egress коммутации должна быть настроена перед добавлением портов.
    • Не обобщайте одной записью несколько vlan в таблице коммутации egress vlan.
    • Все Access\untagged добавляться ИСКЛЮЧИТЕЛЬНО через интерфейс листы.
    • Trunk порты добавляются вручную.
    • Порты коммутации в bridge добавляются на самом последнем этапе в режиме safe mode.
    • Настройка обнаружения соседства включается только после проверки работоспособности всей коммутации, т.е. после добавления портов.

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

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

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

    /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

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

    • Egress – Выход (Трафик уходит с коммутатора)
    • Ingress – Вход (Трафик пришёл в коммутатор)

    Когда фрейм без тэга прилетает на порт коммутатора, коммутатору необходимо понять среди какого 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.

    • Tagged — Установить ТЭГ
    • Untagged — Снять ТЭГ

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

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

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

    • Ether1 и ether2 (vlan 3) — access/untagged
    • Ether3 и ether4 (vlan 4) — access/untagged

    Как я указывал ваше, только 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.

    Как проверить результат

    • Проверьте current-tagged/current-untagged и PVID каждого порта.
    • Убедитесь, что access-порт получает только свой VLAN, а trunk передаёт нужные теги.
    • Проверьте управление через отдельный management VLAN и отсутствие доступа из клиентских VLAN.

    Источники и связанные материалы

    Команды в статье меняют сетевую конфигурацию. Перед работой сохраните экспорт, подготовьте способ восстановления доступа и применяйте изменения сначала в тестовой среде.