14 Трансляция VLAN

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

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

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

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

Если трансляция 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 в следующих случаях:

если абонент не является L2-абонентом (то есть для абонента неизвестны L2-свойства);

если терминация VLAN отключена (то есть bras_vlan_terminate=0);

в режиме подмены bras_vlan_terminate=2: если абонент не имеет свойства outVLAN и есть запись трансляции для VLAN-тега пакета;

в режиме трансформации 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.txt. Если файла нет - режим трансляции VLAN выключается. СКАТ периодически (раз в минуту) проверяет наличие и изменение файла /etc/dpi/vlan_translation.txt, но этой командой можно принудительно заставить СКАТ перечитать этот файл немедленно.

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