Настройка Q-in-Q

Не стоит забывать про MTU на портах перед настройкой QinQ. Тут всё работает из-за того, что на vMX-ах MTU по-умолчанию равен 1522
1. Настройка Bridge-Domains (MX) и VLANs (QFX)
1.1. Bridge-Domains (MX)
Чтобы настроить вланы на MX нам нужно сбриджевать интерфейсы. Иными словами объединить юниты в один Bridge-Domain. Так будут выглядеть домены на PE-1:
set bridge-domains v400 description Customer-1 vlan-id 400
set bridge-domains v800 description Customer-2 vlan-id 800
Если на PE-устройствах мы настраивали S-TAG, то на клиентских добавляем туда C-TAG's:
set bridge-domains v100 vlan-id 100
set bridge-domains v110 vlan-id 110
Таким образом настраиваем все MX. На ISP2 не забываем сменить S-TAG на 410 и 810 соответственно.
1.2. VLANS (QFX)
Просто указываем VLAN's на QFX. CE:
set vlans v210 vlan-id 210
set vlans v200 vlan-id 200
2. Настройка CE-устройств
2.1. Настройка MX
Тут всё довольно просто. Всё настраивается под Family Bridge:
ge-0/0/0 {
unit 0 {
family bridge {
interface-mode trunk;
vlan-id-list [ 100 110 ];
}
}
}
ge-0/0/1 {
unit 0 {
family bridge {
interface-mode access;
vlan-id 100;
}
}
}
ge-0/0/2 {
unit 0 {
family bridge {
interface-mode access;
vlan-id 110;
}
}
}
Аналогично настраиваем порты и на других MX. Теперь видно какому Bridge-Domain какие интерфейсы принадлежат:
root@MX-CE1-1# run show bridge domain
Routing instance Bridge domain VLAN ID Interfaces
default-switch v100 100
ge-0/0/0.0
ge-0/0/1.0
default-switch v110 110
ge-0/0/0.0
ge-0/0/2.0
2.2. Настройка QFX
Тут всё тоже довольно просто. Можно настроить порты под Family Ethernet-Switching. Конфигурация другая, но схожа с MX:
xe-0/0/0 {
unit 0 {
family ethernet-switching {
interface-mode trunk;
vlan {
members [ 100 110 ];
}
}
}
}
xe-0/0/1 {
unit 0 {
family ethernet-switching {
interface-mode access;
vlan {
members 100;
}
}
}
}
xe-0/0/2 {
unit 0 {
family ethernet-switching {
interface-mode access;
vlan {
members 110;
}
}
}
}
Пропингуем c 210-2 210-1 и посмотрим таблицу MAC-адресов.
210-2> ping 192.168.210.1
84 bytes from 192.168.210.1 icmp_seq=1 ttl=64 time=101.063 ms
84 bytes from 192.168.210.1 icmp_seq=2 ttl=64 time=101.207 ms
84 bytes from 192.168.210.1 icmp_seq=3 ttl=64 time=100.697 ms
84 bytes from 192.168.210.1 icmp_seq=4 ttl=64 time=100.949 ms
84 bytes from 192.168.210.1 icmp_seq=5 ttl=64 time=101.252 ms
Всё ОК:
root@QFX-CE2-2# run show ethernet-switching table
MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static, C - Control MAC
SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)
Ethernet switching table : 2 entries, 2 learned
Routing instance : default-switch
Vlan MAC MAC Age Logical NH RTR
name address flags interface Index ID
v210 00:50:79:66:68:08 D - xe-0/0/2.0 0 0
v210 00:50:79:66:68:0a D - xe-0/0/
3. Настройка PEB-устройств
Тут всё настраивается аналогично CE-устройствам:
ge-0/0/0 {
unit 0 {
family bridge {
interface-mode access;
vlan-id 400;
}
}
}
ge-0/0/1 {
unit 0 {
family bridge {
interface-mode access;
vlan-id 800;
}
}
}
ge-0/0/2 {
unit 0 {
family bridge {
interface-mode trunk;
vlan-id 400;
}
}
}
ge-0/0/3 {
unit 0 {
family bridge {
interface-mode trunk;
vlan-id-list [ 400 800 ];
}
}
}
4. Настройка CORE-устройств
root@ISP1-CORE# show | compare
[edit]
+ interfaces {
+ ge-0/0/1 {
+ flexible-vlan-tagging;
+ encapsulation flexible-ethernet-services;
+ unit 0 {
+ family bridge {
+ interface-mode trunk;
+ vlan-id-list 400;
+ }
+ }
+ }
+ ge-0/0/3 {
+ flexible-vlan-tagging;
+ encapsulation flexible-ethernet-services;
+ unit 0 {
+ family bridge {
+ interface-mode trunk;
+ vlan-id-list 800;
+ }
+ }
+ }
+ }
"flexible-vlan-tagging" - позволяет на данном интерфейсе работать как с 802.1Q, так и с 802.1AD трафиком, так и не тегированным трафиком, вообще.
"encapsulation flexible-ethernet-services" - позволяет на разных unit'ах использовать различные family и различные типы ethernet-инкапсуляций.
5. Настройка VLAN-Translation
Позволяет сменить Outter-Tag на другую метку, чтобы клиент мог, например, подключиться через разных ISP:
system {
host-name ISP1-CORE;
root-authentication {
encrypted-password "$6$9HLYARCe$zxX2imOZPHG4/x.ZtRdeyQdDK6PJSNXZYRQUD0IpTZ8fV33SaIzLn8GP0by6o/pohB3vu.cxWKN8fJI3eFNQy."; ## SECRET-DATA
}
}
interfaces {
ge-0/0/0 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 0 {
encapsulation vlan-bridge;
family bridge {
interface-mode trunk;
vlan-id-list [ 800 400 ];
vlan-rewrite {
translate 410 400;
translate 810 800;
}
}
}
}
ge-0/0/1 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 0 {
family bridge {
interface-mode trunk;
vlan-id-list 400;
}
}
}
ge-0/0/3 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 0 {
family bridge {
interface-mode trunk;
vlan-id-list 800;
}
}
}
}
bridge-domains {
v400 {
description Customer-1;
vlan-id 400;
}
v800 {
description Customer-2;
vlan-id 800;
}
}
Т.е. тут мы указываем на интерфейсе наш список VLAN'ов, затем указываем, что входящие фреймы с метками 410 и 810 мы принимаем и переписываем метки на свои: 400 и 800 соответственно. Аналогично делать на ISP2-CORE не нужно, так как на ISP1-CORE мы уже настроили смену метки. Если настроить зеркальную подмену метки, то трафик не пойдёт, так как от ISP1-CORE будет ожидаться метка 400, но приходить будет уже 410 и наоборот.
Теперь трафик проходит:

Также можно вручную сбриджевать интерфейсы, только тут логика будет немного отличаться, но об этом далее:
system {
host-name ISP1-CORE;
root-authentication {
encrypted-password "$6$9HLYARCe$zxX2imOZPHG4/x.ZtRdeyQdDK6PJSNXZYRQUD0IpTZ8fV33SaIzLn8GP0by6o/pohB3vu.cxWKN8fJI3eFNQy."; ## SECRET-DATA
}
}
interfaces {
ge-0/0/0 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 400 {
encapsulation vlan-bridge;
vlan-id 410;
input-vlan-map {
swap;
vlan-id 400;
}
output-vlan-map swap;
}
unit 800 {
encapsulation vlan-bridge;
vlan-id 810;
input-vlan-map {
swap;
vlan-id 800;
}
output-vlan-map swap;
}
}
ge-0/0/1 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 0 {
encapsulation vlan-bridge;
vlan-id 400;
}
}
ge-0/0/3 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 0 {
encapsulation vlan-bridge;
vlan-id 800;
}
}
}
bridge-domains {
v400 {
interface ge-0/0/0.400;
interface ge-0/0/1.0;
}
v800 {
interface ge-0/0/3.0;
interface ge-0/0/0.800;
}
}
Тут, если посмотреть на конфигурацию интерфейса ge-0/0/0, видно, что мы настраиваем и принимаем VLAN стороннего провайдера. И уже только потом меняем его на свой. Именно поэтому в unit 400 прописан vlan-id 410, после чего при помощи input-vlan-map мы поменяли его на 400 и пустили трафик в нашу сеть. Результат:

6. Приём определённых C-TAGs (MX)
Как видно на топологии, на PE4 yет смысла принимать 210 C-TAG, учить лишние маки и забивать сеть лишним трафиком. Как это выглядит сейчас:

Соответственно нам нужно исправить это.
interfaces {
ge-0/0/0 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 0 {
encapsulation vlan-bridge;
vlan-id 200;
}
}
ge-0/0/1 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 0 {
encapsulation vlan-bridge;
vlan-tags outer 800 inner 200;
input-vlan-map pop;
output-vlan-map push;
}
}
}
bridge-domains {
v800 {
description Customer-2;
interface ge-0/0/1.0;
interface ge-0/0/0.0;
}
}
Тут мы вручную настроили то, что мы принимаем VLAN 200 с клиентского порта и запаковываем его в 800 влан перед отправкой к ядру сети. По-другому сделать нельзя. При этом можно от разных клиентов принимать одинаковые VLANы, но они будут смешиваться из-за того, что мы вручную внесём разные юниты в разные Bridge-Domains.
7. Приём одного и того же C-TAG от разных клиентов
7.1 MX

Схема тут такая же.
Вот настройка для ISP (Идентична для обоих MX, разница только в Host-Name). Настройка на CE была разобрана в предыдущих пунктах.
system {
host-name ISP1;
root-authentication {
encrypted-password "$1$nvv3N0AP$Hc98hi9InXERva/3lwwZL."; ## SECRET-DATA
}
}
interfaces {
ge-0/0/0 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 200 {
encapsulation vlan-bridge;
vlan-tags outer 200 inner 100;
input-vlan-map pop;
output-vlan-map push;
}
unit 300 {
encapsulation vlan-bridge;
vlan-tags outer 300 inner 100;
input-vlan-map pop;
output-vlan-map push;
}
}
ge-0/0/1 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 200 {
encapsulation vlan-bridge;
vlan-id 100;
}
}
ge-0/0/2 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 300 {
encapsulation vlan-bridge;
vlan-id 100;
}
}
}
bridge-domains {
Cus1 {
interface ge-0/0/0.200;
interface ge-0/0/1.200;
}
Cus2 {
interface ge-0/0/2.300;
interface ge-0/0/0.300;
}
}
Теперь смотрим как проходит трафик:

Тут наглядно видно, что трафик ходит куда надо и не приходит к другому клиенту.
Для справки, вот так выглядить трафик с двойным тэгом:

7.2 QFX
На QFX всё делается аналогично, только настройки вносятся не Bridge-Domain, а в секцию настроек VLAN.

Настройка CE расматривалась уже ранее. Вот так выглядит настройка со стороны ISP:
system {
host-name ISP1;
root-authentication {
encrypted-password "$6$dtWw6f9v$.pxa66SoxZzbpeZ5kPmMHFmE6MYb4nO9FPMPm9k5MUdf.W2qCTiWeTBU3xZ8fbJZ9mj7ZL7mF1X1CVqUl2iFx."; ## SECRET-DATA
}
}
interfaces {
xe-0/0/0 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 10 {
encapsulation vlan-bridge;
vlan-tags outer 10 inner 5;
input-vlan-map pop;
output-vlan-map push;
}
unit 20 {
encapsulation vlan-bridge;
vlan-tags outer 20 inner 5;
input-vlan-map pop;
output-vlan-map push;
}
}
xe-0/0/1 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 0 {
encapsulation vlan-bridge;
vlan-id 5;
}
}
xe-0/0/2 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 0 {
encapsulation vlan-bridge;
vlan-id 5;
}
}
em1 {
unit 0 {
family inet {
address 169.254.0.2/24;
}
}
}
}
vlans {
v10 {
description Customer-1;
interface xe-0/0/0.10;
interface xe-0/0/1.0;
}
v20 {
description Customer-2;
interface xe-0/0/0.20;
interface xe-0/0/2.0;
}
}
8. Приём определённых C-TAG и запаковка их в S-TAG одним действием
Можно также принять от клиента определённый C-TAG и упаковать его в S-TAG.

Тут всё описано на картинке. S-TAG будет 100. Принимаем от клиента только 10 VLAN.
interfaces {
ge-0/0/0 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 100 {
encapsulation vlan-bridge;
vlan-id 10;
input-vlan-map {
push;
vlan-id 100;
}
output-vlan-map pop;
}
}
ge-0/0/1 {
stacked-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 100 {
encapsulation vlan-bridge;
vlan-tags outer 100 inner 10;
}
}
}
bridge-domains {
v100 {
interface ge-0/0/1.100;
interface ge-0/0/0.100;
}
}
Тут видно, что от клиента мы приняли на порту ge-0/0/0 VLAN 10 и тут же упаковали его в 100 VLAN, после чего передали дальше по сети.
На ISP2, как пример, указана другая конфигурация с запаковкой при отправке:
interfaces {
ge-0/0/0 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 100 {
family bridge {
interface-mode trunk;
vlan-id-list 10;
}
}
}
ge-0/0/1 {
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 100 {
encapsulation vlan-bridge;
vlan-id 100;
family bridge {
interface-mode trunk;
inner-vlan-id-list 10;
}
}
}
}
bridge-domains {
v100 {
vlan-id 10;
}
}
Тут мы принимаем от клиента 10 VLAN и запаковывем его в 100 при отправке. Хотя, применимо скорее больше в том случае, если от аплинка Q-in-Q распаковывем к себе в сеть. Если использовать для приёма клиентских тэгов, то придётся создавать Virtual-Switch, чтобы VLANы не пересекались.
Last updated
Was this helpful?