====== Трансляция VLAN ======
{{indexmenu_n>9}}
В СКАТ 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 ====
{{anchor:l2_bras_compat}}
Трансляция VLAN применяется также в режиме L2 BRAS, но с учетом того, что L2 BRAS СКАТ уже умеет выполнять [[dpi:bras_bng:bras_l2_vlan_term|замену VLAN-тегов]], немного по другим правилам.
Таблица трансляций VLAN применяется в L2 BRAS при терминации трафика sub->inet в следующих случаях:
- если абонент не является L2-абонентом (то есть для абонента неизвестны [[dpi:bras_bng:cli:bras_l2_vlan_ctl|L2-свойства]]);
- если терминация VLAN отключена (то есть ''bras_vlan_terminate=0'');
- в режиме [[dpi:bras_bng:bras_l2_vlan_term:bras_l2_vlan_term_zero|подмены]] ''bras_vlan_terminate=2'': если абонент не имеет свойства [[dpi:bras_bng:bras_l2_vlan_term#outvlan|outVLAN]] и есть запись трансляции для VLAN-тега пакета;
- в режиме [[dpi:bras_bng:bras_l2_vlan_term:bras_l2_vlan_term_trans|трансформации 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-команды ====
{{anchor:cli}}
Имеется несколько [[dpi:bras_bng: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 на указанном пути:
* ''subs'' - трансляция subs-VLAN ''''
* ''inet'' - трансляция inet-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