Трансляция VLAN [Документация VAS Experts]

Трансляция VLAN

В СКАТ 9.4 добавлена возможность трансляции VLAN: входящий VLAN пакета заменяется на заданный исходящий VLAN. Трансляция VLAN задается в текстовом файле /etc/dpi/vlan_translation.txt, имеющем следующую структуру:

# subs VLAN    inet VLAN
123            1123
124            1124
125            1125
# и так  далее

Каждая строка файла задает соответствие входящего и исходящего VLAN. Строка, начинающаяся с #, является комментарием. Начальные пробелы/табуляции строки игнорируются.

Текстовый файл трансляций должен быть сконвертирован в бинарный /etc/dpi/vlan_translation.bin утилитой vlan2bin из состава dpiutils:

cat vlan_translation.txt|vlan2bin /etc/dpi/vlan_translation.bin
[СКАТ v13+] во входных файлах утилиты vlan2bin появилась возможность добавлять комментарии (#) и пустые линии.

Обратная конвертация из бинарного вида в текстовый производится утилитой bin2vlan:

bin2vlan /etc/dpi/vlan_translation.bin >vlan_translation.txt

Режим трансляции VLAN включается просто наличием файла /etc/dpi/vlan_translation.bin: если этот файл есть, режим трансляции включен. Отсутствие файла является признаком выключения режима трансляции VLAN. Содержимое файла трансляции можно менять в процессе работы: СКАТ периодически проверяет наличие файла и если он изменился, - перечитывает таблицу трансляции. Выключить режим трансляции на лету можно просто удалив или переименовав файл трансляций /etc/dpi/vlan_translation.bin.

Если трансляция VLAN включена, она применяется при любом режиме работы СКАТ, а не только в режиме BRAS.

При включенном режиме трансляции VLAN СКАТ делает следующее:

  • пакет от абонента в интернет (subs → inet): ищем в таблице трансляции входящий VLAN пакета (subs VLAN); если VLAN найден - заменяем его на исходящий inet VLAN. В примере выше subs VLAN=123 будет заменен на inet VLAN=1123.
  • пакет inet → subs: ищем в таблице трансляций входящий VLAN пакета (inet VLAN); если VLAN найден - заменяем его на исходящий subs VLAN. В примере выше inet VLAN=1124 будет заменен на subs VLAN=124.
  • Если входящий VLAN не найден в таблице трансляций - он не изменяется (такая ситуация не является ошибкой). Таким образом, таблица трансляций не обязательно должна быть полной и перечислять все VLAN.
  • Для пакета passthrough (например, если для AS установлен признак pass) трансляция VLAN не применяется.

Трансляция VLAN применяется только для пакетов с одним VLAN-тегом. Для QinQ трансляция не применяется. Если пакет не имеет VLAN-тега, трансляция также не применяется, - пакет отправляется "как есть", без изменений.

Соответствие должно быть взаимно-однозначным; следующее задание недопустимо:

# subs VLAN    inet VLAN
   # Ошибка: два subs VLAN (64 и 65) транслируются в один VLAN=200
64             200
65             200

   # Аналогичная ошибка: inet VLAN 202 и 203 транслируются в один subs VLAN=2067
2067           202
2067           203
# ...

В конце файла можно добавить записи трансляции по умолчанию:

# subs VLAN    inet VLAN
123            1123
124            1124
125            1125
# далее перечисляем все прочие трансляции ...

# Запись "все прочие subs VLAN на пути subs->inet транслировать в inet VLAN 4012"
# В файле может быть только одна такая запись!
*              4012

# Запись "все прочие inet VLAN на пути inet->subs транслировать в subs VLAN 2089"
# В файле может быть только одна такая запись!
2089           *

# конец файла трансляций

Совместимость с режимом L2 BRAS

Трансляция VLAN применяется также в режиме L2 BRAS, но с учетом того, что L2 BRAS СКАТ уже умеет выполнять замену VLAN-тегов, немного по другим правилам. Таблица трансляций VLAN применяется в L2 BRAS при терминации трафика sub→inet в следующих случаях:

  1. если абонент не является L2-абонентом (то есть для абонента неизвестны L2-свойства);
  2. если терминация VLAN отключена (то есть bras_vlan_terminate=0);
  3. в режиме подмены bras_vlan_terminate=2: если абонент не имеет свойства outVLAN и есть запись трансляции для VLAN-тега пакета;
  4. в режиме трансформации VLAN bras_vlan_terminate=3: если абонент не имеет свойства outVLAN и есть запись трансляции для VLAN-тега пакета.

Проще говоря, в режимах bras_vlan_terminate=2 или 3 наивысший приоритет при терминации трафика subs→inet имеет свойство outVLAN абонента, далее (если абонент не имеет свойства outVLAN и если пакет имеет только один VLAN-тег) следует поиск в таблице трансляций VLAN, далее, если трансляции не найдено, применяются конфигурационные параметры, как описано в режимах bras_vlan_terminate (см. ссылки выше).

При приземлении трафика inet→subs таблица трансляций VLAN в режиме L2 BRAS применяется только для неизвестных абонентов, то есть когда СКАТ не находит L2-свойства абонента.

CLI-команды

Имеется несколько CLI-команд для работы с таблицей трансляций VLAN.

fdpi_cli vlan translation

Выводит текущие таблицы трансляций subs→inet и inet→subs. В выводе этой команды записи "по умолчанию" вида * N и N * развернуты. Если трансляций нет, команда сообщит об этом.

fdpi_cli vlan translation reload

Немедленная загрузка файла /etc/dpi/vlan_translation.bin. Если файла нет - режим трансляции VLAN выключается. СКАТ периодически (раз в минуту) проверяет наличие и изменение файла /etc/dpi/vlan_translation.bin, но этой командой можно принудительно заставить СКАТ перечитать этот файл немедленно.

fdpi_cli vlan translation test [subs|inet] <vlan>

Проверка трансляции VLAN на указанном пути:

  • subs - трансляция subs-VLAN <vlan>
  • inet - трансляция inet-VLAN <vlan>

Примеры:

  # в какой VLAN транслируется VLAN=123 на пути subs->inet
fdpi_cli vlan translation test subs 123
  # выхлоп команды:
VLAN=123 translation subs->inet: 123 -> 1123

  # в какой VLAN транслируется VLAN=1124 на пути inet->subs
fdpi_cli vlan translation test inet 1124
  # выхлоп команды:
VLAN=1124 translation inet->subs: 1124 -> 124

  # Если трансляции для указанного VLAN нет, команда ответи ошибкой вида:
No translation for VLAN=666 for subs->inet