Строим QinQ между Dlink, Zyxel, RouterOS и Linux

Очередная шпаргалка.
Попробуем решить следующую задачу:
Из точки А в точку В необходимо подать три VLAN - 22 (пусть это будет менеджмент) и 21,23 (пользовательские инкапсулируемые в 100-й)
<img src="https://nklug.org.ua/files/q-in-q.png" width="100%" alt="поставленная задача">
В моем распоряжении есть два коммутатора - Dlink DGS-3420,  Zyxel GS-4012F, маршрутизатор Mikrotik RB1100 и машина с Debian Linux.
Начнем с пары Dlink и Zyxel
<img src="https://nklug.org.ua/files/dlink-zyxel-qinq-gr.png" width="100%" alt="QinQ dlink-zyxel">
Как мы видим на схеме на порт 23 Dlink мы получаем тегированные VLAN 21,22,23, с порта 24 на порт 9 Zyxel мы отдаем duble vlan 100 и обычный 22-й и клиенту  B с порта 12 Zyxel мы возвращаем обычные VLAN 21,22,23.
Теперь приведу конфигурацию устройств:
1) Dlink
<code>
# VLAN
enable pvid auto_assign
config vlan default delete 1-28
config vlan default add forbidden 1-28
config vlan default advertisement enable
create vlan 21 tag 21
config vlan 21 add tagged 23-24
config vlan 21 add untagged 21
config vlan 21 add forbidden 1-20,22,25-28 advertisement disable
create vlan 23 tag 23
config vlan 23 add tagged 23-24
config vlan 23 add untagged 21
config vlan 23 add forbidden 1-20,22,25-28 advertisement disable
create vlan mgmt tag 22                                                         
config vlan mgmt add tagged 23-24                                            
config vlan mgmt add untagged 22                                                
config vlan mgmt add forbidden 1-21,25-28 advertisement disable                 
create vlan qinq_vlan tag 100                                                   
config vlan qinq_vlan add tagged 24                                             
config vlan qinq_vlan add untagged 23                                        
config vlan qinq_vlan add forbidden 1-22,25-28 advertisement disable            
enable qinq                                                                     
disable gvrp                                                                    
config gvrp nni_bpdu_addr dot1ad                                                
disable asymmetric_vlan                                                         
disable vlan_trunk                                                              
config port_vlan 1-20,24-27 gvrp_state disable ingress_checking enable acceptable_frame admit_all pvid 1
config port_vlan 23 gvrp_state disable ingress_checking enable acceptable_frame admit_all pvid 100
# QINQ
config qinq ports 1-23 role uni missdrop disable outer_tpid 0x8100
config qinq ports 24 role nni missdrop disable outer_tpid 0x8100
create vlan_translation ports 23 replace cvid 22 svid 22
</code>
В данной конфигурации на все VLAN приходящие в 23-й порт будет навешиваться дополнительный тэг 100. Но согласно правилу "vlan_translation ports 23 replace cvid 22 svid 22" 22-й VLAN уйдет дальше без изменений.

2) Zyxel
<code>
vlan 100
  name qinq
  normal ""
  fixed 9-10
  forbidden 1-8,11-12
  untagged 1-8,10-12
exit
vlan 21
  name 21
  normal ""
  fixed 11-12
  forbidden 1-10
  untagged 1-10
exit
vlan 22
  name mgmt
  normal ""
  fixed 9,12
  forbidden 1-8,10-11
  untagged 1-8,10-11
exit
vlan 23
  name 23
  normal ""
  fixed 11
  forbidden 1-10,12
  untagged 1-10,12
exit
interface port-channel 9  
  vlan-stacking role normal
exit
interface port-channel 10  
  pvid 100
  vlan-stacking SPVID 100
exit
interface port-channel 11  
  vlan-stacking role normal
exit
interface port-channel 12  
  vlan-stacking role normal
exit
vlan-stacking
</code>
В данной конфигурации все входящие VLAN в порт 10 получают дополнительный тэг 100. Поэтому VLAN 21,23 мы передаем на этот порт, а 22-й передаем напрямую с 12-го в 9-й порт. Zyxel 4012 не поддерживает selective VLAN поэтому пришлось сделать петлю - соеденить 9-й и 10-й порты.


<b>Строим QinQ между Dlink и Mikrotik</b>
<img src="https://nklug.org.ua/files/dlink-mikrotik-qinq-gr.png" width="100%" alt="QinQ dlink-mikrotik">
Конфигурация Dlink остается прежней, рассмотрим конфигурацию Mikrotik
<code>
/interface vlan
add interface=ether1 name=100-qiniq vlan-id=100
add interface=ether1 name=22-in vlan-id=22
add interface=100-qinq name=21-in vlan-id=21
add interface=100-qinq name=23-in vlan-id=23
add interface=ether2 name=21-out vlan-id=21
add interface=ether2 name=22-out vlan-id=22
add interface=ether2 name=23-out vlan-id=23
/interface bridge
add name=21
add name=22
add name=23
/interface bridge port
add bridge=21 interface=21-in
add bridge=21 interface=21-out
add bridge=22 interface=22-in
add bridge=22 interface=22-out
add bridge=23 interface=23-in
add bridge=23 interface=23-out
</code>
Вот собственно и вся конфигурация.
<br>
<b>QinQ между Dlink и Linux Debian</b>
<img src="https://nklug.org.ua/files/dlink-linux-qinq-gr.png" width="100%" alt="QinQ dlink-linux">
По сути конфигурация аналогична с Mikrotik, не секрет, что RouterOS базируется на Linux - создается VLAN 100 который используется как родительский для VLAN 21 и 23, после чего, с помощью бриджей они передаются на второй интерфейс.
<code>
vconfig set_name_type DEV_PLUS_VID
vconfig add eth0 100
vconfig add eth0 22
vconfig add eth0.0100 21
vconfig add eth0.0100 23
vconfig add eth1 22
vconfig add eth1 21
vconfig add eth1 23
brctl addbr 21
brctl addbr 22
brctl addbr 23
brctl addif 21 eth0.0100.0021
brctl addif 21 eth1.0021
brctl addif 22 eth0.0022
brctl addif 22 eth1.0022
brctl addif 23 eth0.0100.0023
brctl addif 23 eth1.0023
</code>