Q-in-Q на Linux и коммутаторах D-Link
Q-in-Q – технология, позволяющая назначать два Vlan-тега Ethernet-фрейму. Активно используется провайдерами для увеличения количества доступных вланов или прозрачного пропускания клиентских тегированных вланов. Принцип работы хорошо виден на схеме:
В Linux настраивается следующим образом:
vconfig add eth0 10
ifconfig eth0.10 up
vconfig add eth0.10 20
ifconfig eth0.10.20 up
В данном случае тег 10 будет соответствовать OuterTag на схеме, а 20 – InnerTag.
Пример настройки коммутаторов D-Link приведу на базе небольшой схемы:
Допустим, маршрутизатор работает под Linux, и мы настроили его аналогично примеру выше. При этом транзитный коммутатор будет пропускать влан с тегом 10 обычным образом, ничего не подозревая про QinQ, агрегационный коммутатор будет заниматься назначением/снятием вторых тегов, а коммутатор доступа, также ничего не подозревая про QinQ будет отдавать агрегационному коммутатору влан с тегом 20. Рассмотрим настройку агрегационного коммутатора подробнее.
Сначала нужно включить QinQ. Это делается командой enable qinq. Учтите, что при этом всем портам будет назначена роль NNI, TPID будет установлен в 88a8, будет автоматически отключен GVRP. Также, перед включением QinQ нужно вручную отключить STP. GVRP и STP можно потом включить вручную, а при перезагрузке коммутатора все будет без проблем подниматься автоматически.
Теперь разберем смысл слов "роль порта", TPID. Роль порта определяет как функция QinQ будет вести себя на этом порту. В коммутаторах D-Link существуют две роли: UNI и NNI. Роль UNI (User Network Interface) назначается обыкновенным портам, откуда приходит нетегированный трафик или портам, откуда приходит трафик с одним тегом. Роль NNI (Network Node Interface) назначается портам, с которых приходит трафик с двойным тегом. Исходящий трафик с порта соответственно должен иметь такую же схему тегирования, как и входящий трафик. TPID – идентификатор протокола тегирования. Его положение в Ethernet-кадре видно на схеме. В нашем случае всегда будет использоваться 8100.
В нашей схеме порту, который связан с транзитным коммутатором, будет назначена роль NNI, а порту, который связан с коммутатором доступа, будет назначена роль UNI. Также для всех портов будет назначен TPID 8100. Делается это следующими командами:
config qinq ports 1 role nni tpid 0x8100
config qinq ports 2 role uni tpid 0x8100
Далее нужно сделать так, чтобы для трафика, приходящего с коммутатора доступа, тегированного одним тегом 20, назначался второй тег 10 и отправлялся далее на транзитный коммутатор. Для этого нужно создать на коммутаторе влан с тегом 10 (20 влан на агрегационном коммутаторе создавать не нужно) и назначить его тегом на 1 и 2 порты, а затем определить правила работы со вторыми тегами при помощи vlan_translation. Синтаксис команды vlan_translation выглядит так:
create vlan_translation ports <ports> cvid <cvid> <add|replace> svid <svid>
- ports – указывает порты, на которых нужно модифицировать теги;
- cvid – указывает одиночный тег фреймов, приходящих с определенных выше портов, к которым будет применяться правило;
- add – указывает на необходимость добавления второго тега к фреймам, подходящим под условия ports и cvid;
- replace – указывает на необходимость замены одиночного тега на другой;
- svid – определяет второй тег, который будет добавляться при использовании add, или одиночный тег, который будет подставляться вместо cvid при использовании replace.
В нашем случае нужна будет команда create vlan_translation ports 2 cvid 20 add svid 10. Если же нужно оставить влан с одиночным тегом (например 100) и пропустить на транзитный коммутатор, то нужно будет создать этот влан на агрегационном коммутаторе, назначить тегом на 1 и 2 порты и указать правило create vlan_translation ports 2 cvid 100 add svid 100.
Если вы используете STP, и кольцо замыкается на 2 и 3 портах, то 3 порт нужно настроить абсолютно также, как и 2. Использование vlan_trunk при этом ненужно, что позволяет изолировать кольца друг от друга и уменьшить проблему коллизий MAC-адресов.
4 комментариев
Комментарий от: elve
Нихрена не понятно. Попробуйте объяснить доходчивее =).
Комментарий от: diza
create vlan_translation ports 2 cvid 20 add svid 10.
create vlan_translation ports 2 cvid 100 add svid 100
Почему для разных веще совершенно одинаковые комманды?
не кажется ли, что для тго, чтобы пропустить влан со второго порта в 1-й надо просто:
create vlan 100 tag 100
config vlan 100 add tagged 1,2
А вы создали двойное тегирование влана 100 во втрой влан 100
И работать оно будет только если 100 влан есть на данном коммутаторе
Комментарий от: smithy1208
diza,
К
сreate vlan 100 tag 100
config vlan 100 add tagged 1,2
Еще нужно добавить
create vlan_translation ports 2 cvid 100 replace svid 100
Т.к. на агрегирующем коммутаторе дана команда
enable qinq
Идет загрузка формы...
Комментарий от: ragus
http://www.opennet.ru/tips/info/1381.shtml