На днях задали интересный вопрос по поводу q-in-q, и родилась идея описать простыми словами, как настраивать q-in-q на bridge без каких-либо костылей в виде саб интерфейсов vlan.

Прежде чем начать, обговорим топологию сети.

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

Vasilev Kirill mikrotik q-in-q

Пояснительная записка к нашей сети.

Коммутаторы, которые имеют имя SW-# это коммутаторы «уровня доступа» к ним подключается конечное оборудование.

Коммутаторы QSW-# - коммутаторы, которые должны оборачивать весь трафик в 88a8 q-in-q с портов от коммутаторов «уровня доступа».

Номер метки STAG 100 q-in-q.

  • Зелёным цветом - сервера, которые находятся в vlan 200
  • Красным цветом - сервера, которые находятся в vlan 300

Всё сервера подключены в access порты, т.е. фреймы сервера отправляют без тега.

Синий vlan 400 управления, он должен быть на каждом коммутаторе как логический интерфейс, а также тэгом отправляться на SRV-4 предполагаем, что на данном сервере запущенна система мониторинга, которая собирает какие-то метрики с коммутаторов или там живёт наш админ =).

И так начнём с самого простого на всех коммутаторах создадим bridge и добавим в него порты, указанные на схеме, естественно я не буду показывать, как это делать на каждом коммутаторе так как процедура однотипная, все делаем по дефолту.

/interface bridge add name=br
/interface bridge port add bridge=br interface=ether1
/interface bridge port add bridge=br interface=ether2
/interface bridge set vlan-filtering=yes

И так далее на каждом коммутаторе, меняем только количество и имена интерфейсов.

На всех коммутаторах подготовим интерфейс управления отдельный и единственный sub interface vlan

/interface vlan add name=br.400 vlan-id=400 interface=br comment=Mgmt

Да, да, я именую интерфейсы vlan через точку, где перед номером тега указываю имя интерфейса родителя.

Ну а теперь начнём, настраивать коммутаторы с пояснением.

SW-1

Vasilev Kirill mikrotik q-in-q

Нам необходимо, указать, следующее:

При входе (ingress-filter) трафика без тега с первого интерфейса мы должны на такой трафик повесить метку 200 При выходе (egress-filter) трафика с 200 меткой c ether1, мы эту метку должны снять и отправить обычный ethernet.

Делается это одной командой просто устанавливаем pvid на данный интерфейс.

/interface bridge port 
set pvid=200 [find interface=ether1]

Далее нам необходимо, 200 vlan отправить с тегом в ether2, опять же делается одной командой.

/interface bridge vlan 
add bridge=br vlan-ids=200 tagged=ether2

Также на этом коммутаторе у нас есть 400 vlan управления, так как получить доступ надо к IP (читай CPU) указываем помимо ether2 также порт сам bridge. А также так как мы должны в первой порт отправлять данный трафик с тегом, указываем ещё и ether1

/interface bridge vlan 
add bridge=br vlan-ids=400 tagged=ether2,br,ether1

SW-2

По аналогии с SW-1

Vasilev Kirill mikrotik q-in-q

Создаём access порты доступа или просто untagged

/interface bridge port 
set pvid=200 [find interface=ether2]
set pvid=300 [find interface=ether1]

Заполняем таблицу VLAN тегированным портами.

/interface bridge vlan 
add bridge=br vlan-ids=200 tagged=ether3
add bridge=br vlan-ids=300 tagged=ether3
add bridge=br vlan-ids=400 tagged=ether3,br

SW-3

Vasilev Kirill mikrotik q-in-q

По аналогии с SW-1 и SW-2 Создаём access порты доступа или просто untagged

/interface bridge port 
set pvid=300 [find interface=ether1]

Заполняем таблицу VLAN тегированным портами.

/interface bridge vlan 
add bridge=br vlan-ids=300 tagged=ether2
add bridge=br vlan-ids=400 tagged=ether2,br

Переходим непосредственно к Q-in-Q

На всех коммутаторах QSW сменим тип ethernet

/interface bridge set ether-type=0x88a8

А теперь по всем коммутаторам

QSW-3

Заполним таблицу vlan

Vasilev Kirill mikrotik q-in-q

/interface bridge vlan 
add bridge=br vlan-ids=200 tagged=ether2
add bridge=br vlan-ids=300 tagged=ether2
add bridge=br vlan-ids=400 tagged=ether2,br
add bridge=br vlan-ids=100 tagged=ether1

обратите внимание, что мы добавили, 100 vlan.

Но появляется проблема, в том, что SW-2 нам шлёт трафик с типом ethernet 8100, а наш коммутатор (bridge) работает 88a8, мы должны каким-то образом указать коммутатору, что в данном порту что-то другое.

Нам необходимо указать, что весь трафик с ether2 оборачивать меткой 100, мы уже знаем, что это делается с помощью pvid, но для того, что коммутатор понимал, что он должен ожидать не 88a8, а 8100 мы должны указать tag-stacking=yes

Делаем

/interface bridge port
set pvid=100 tag-stacking=yes [find interface=ether2]

QSW-2

Вообще без комментариев, так как всё понятно

Vasilev Kirill mikrotik q-in-q

/interface bridge vlan 
add bridge=br vlan-ids=200 tagged=ether2
add bridge=br vlan-ids=300 tagged=ether2
add bridge=br vlan-ids=400 tagged=ether2,br
add bridge=br vlan-ids=100 tagged=ether1,ether3

/interface bridge port 
set pvid=100 tag-stacking=yes [find interface=ether2]

QSW-1

Так же без комментариев.

Vasilev Kirill mikrotik q-in-q

/interface bridge vlan 
add bridge=br vlan-ids=200 tagged=ether2
add bridge=br vlan-ids=400 tagged=ether2,br
add bridge=br vlan-ids=100 tagged=ether1

/interface bridge port
set pvid=100 tag-stacking=yes [find interface=ether2]

Management на QSW

И осталось небольшой момент, который надо исправить у нас management трафик в 400 vlan бегает только между SW коммутаторами, но не доступны QSW, дело в том, что тот интерфейс который мы создавали пытается «поймать» 400ую метку на интерфейсе CPU, но она обёрнута 100 меткой и чтобы наш 400ый мог достучаться, нам надо отправить трафик без метки в CPU т.е в сам bridge, делается это с помощью всё того же пресловутого pvid на самом интерфейсе бриджа и естественно мы должны указать как pvid 100, метка которая оборачивает наш 400ый vlan.

На всех коммутаторах QSW выполняем

/interface bridge set pvid=100 [find name=br]

Соответственно если у вас в разрыве будет стоять коммутаторы, которые будет через себя «таскать» только q-in-q ваша задача перевести коммутатор в 88a8 и работать как с обычным vlan, но только с верхней меткой, в нашем случае 100, а на внутренние метки не обращать внимания.

Я знаю, я много не договорил и многое не описал, многие термины я специально упустил и постарался объяснить простыми словами.

Рассказать друзьям

Чатик телеграм

@mikrotikme