Информация к новости
  • Просмотров: 2196
  • Автор: sulicompany
  • Дата: 10-01-2014, 03:01
 (голосов: 0)
10-01-2014, 03:01

Q-in-Q на Linux и коммутаторах D-Link

Категория: IT » Сети


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-адресов.