СКАТ DPI BRAS
В СКАТ DPI используются RADIUS-атрибуты вендора, которые необходимо добавить в dictionary.xml InetAccess и InetAccounting, если они там отсутствуют:
<
vendor
name
=
"VasExperts"
code
=
"43823"
>
<
attribute
name
=
"VasExperts-Policing-Profile"
code
=
"1"
type
=
"string"
/>
<
attribute
name
=
"VasExperts-Service-Profile"
code
=
"2"
type
=
"string"
/>
<
attribute
name
=
"VasExperts-Enable-Service"
code
=
"3"
type
=
"string"
/>
<
attribute
name
=
"VasExperts-Multi-IP-User"
code
=
"4"
type
=
"octets"
/>
<
attribute
name
=
"VasExperts-UserName"
code
=
"5"
type
=
"string"
/>
<
attribute
name
=
"VasExperts-Service-Type"
code
=
"6"
type
=
"integer"
/>
<
attribute
name
=
"VasExperts-Restrict-User"
code
=
"7"
type
=
"integer"
/>
<
attribute
name
=
"VasExperts-DHCP-RelayRemoteId"
code
=
"38"
type
=
"octets"
/>
<
attribute
name
=
"VasExperts-DHCP-RelayCircuitId"
code
=
"39"
type
=
"octets"
/>
<
attribute
name
=
"VasExperts-DHCP-Option"
code
=
"40"
type
=
"octets"
/>
<
attribute
name
=
"VasExperts-DHCP-DNS"
code
=
"41"
type
=
"ipaddr"
/>
<
attribute
name
=
"VasExperts-DHCP-Gateway"
code
=
"42"
type
=
"ipaddr"
/>
<
attribute
name
=
"VasExperts-BOOTP-SName"
code
=
"43"
type
=
"string"
/>
<
attribute
name
=
"VasExperts-BOOTP-File"
code
=
"44"
type
=
"string"
/>
</
vendor
>
VasExperts-Service-Profile - имя профиля услуги fastDPI,
VasExperts-Enable-Service - включение/выключении услуги по ее коду,
VasExperts-Policing-Profile - имя профиля policy,
VasExperts-Restrict-User - флаг блокировки абонента.
1 - бонусная программа
2 - реклама
3 - блокировка рекламы
4 - черный список
5 - белый список
6 - уведомление
7 - кэширование
8 - пройдена ddos защита
9 - сбор netflow статистики для биллинга
10 - услуга защиты от DDOS
11 – CGNAT
Например, для того, чтобы включить отправку Netflow для сессии, в Access-Accept (radius.realm.default.attributes=) необходимо выдать "VasExperts-Enable-Service=9:on":
radius.realm.default.attributes=Acct-Interim-Interval=
900
;VasExperts-Enable-Service=
9
:on
Если для услуги необходимо включить настроенный профиль, то указываем VasExperts-Service-Profile=<код услуги>:<имя профиля услуги>:
radius.realm.default.attributes=Acct-Interim-Interval=
900
;VasExperts-Enable-Service=
9
:on
;VasExperts-Service-Profile=
11
:nat_profile
;VasExperts-Service-Profile=
5
:white_list
Скорость регулируем, указывая имя профиля policy: VasExperts-Policing-Profile=rate_10M.
InetAccess/InetAccounting не поддерживают запросы RADIUS Status-Server, поэтому в конфигурации СКАТ (radius-main.conf) необходимо указать status_server=0
Настройка типа устройства
Создайте тип устройства "СКАТ DPI", укажите CoAServiceActivator в поле "Обработчик активации сервисов" и CoAProtocolHandler в поле "Обработчик процессора протокола". В конфигурации типа устройства укажите:
# Режим поиска сервиса (аккаунта) договора: 0 (по умолчанию) - по логину, 1 - по интерфейсу на устройстве (в предобработке должны быть
# проставлены опции AGENT_REMOTE_ID и AGENT_CIRCUIT_ID или INTERFACE_ID), 2 - по VLAN на устройстве (в предобработке
# должны быть проставлены опции AGENT_REMOTE_ID и AGENT_CIRCUIT_ID или VLAN_ID), 4 - по VLAN на устройстве или
# дочернем устройстве (в предобработке должны быть проставлены опции AGENT_REMOTE_ID и AGENT_CIRCUIT_ID или VLAN_ID),
# 5 - по MAC-адресу на устройстве (в предобработке должна быть проставлена опция MAC_ADDRESS), 6 - по MAC-адресу на
# устройстве или дочернем устройстве (в предобработке должна быть проставлена опция MAC_ADDRESS).
#radius.servSearchMode=0
# Нужно ли проверять пароль: 0 - нет (например, для IPoE), 1 (по умолчанию) - да.
#radius.password.verification=1
# Хост для отправки PoD и CoA-запросов (по умолчанию - хост, заданный в параметрах устройства Хост/порт)
#radius.host=
# Порт для отправки PoD и CoA-запросов (по умолчанию - порт, заданный в устройстве в поле Хост/порт)
radius.port=
3799
# При выдаче Access-Accept добавлять запись в базу.
# Hеобходимо, если используется Reject-To-Accept и по Start-пакету нельзя определить в каком состоянии соединение
connection.start.fromAccept=
1
# Таймаут перевода соединения в статус suspended при отсутствии радиус пакетов сессии
connection.suspend.timeout=
3600
# Таймаут закрытия соединения при отcутствии радиус пакетов сессии (не складывается с connection.suspend.timeout)
connection.close.timeout=
3600
# При закрытии соединения по таймауту, 0 (по умолчанию) - просто закрыть,
# 1 - попытаться сбросить также на NAS'е (вызвать connectionClose у обработчика активации сервисов)
#connection.close.timeout.forceClose=1
# Атрибуты, выдаваемые при авторизации по реалму default (default - реалм по умолчанию)
# Acct-Interim-Interval - требуемый интервал между Accounting-Update запросами по сессии от NAS'а
radius.realm.default.attributes=Acct-Interim-Interval=
900
#radius.realm.default.attributes=Acct-Interim-Interval=900;VasExperts-Enable-Service=9:on
# Коды ошибок авторизации, при которых отвечать Access-Accept в состоянии disable (rejectToAccept)
radius.disable.accessCodes=
# Какие адреса выдавать при ответе Access-Accept в состоянии disable:
# 0 (по умолчанию) - из radius.disable.ipCategories, 1 - так же, как если бы не было ошибки (в том числе привязанные к сервису в договоре)
#radius.disable.mode=0
# Атрибуты, выдаваемые при ответе Access-Accept в состоянии disable
radius.disable.attributes=Acct-Interim-Interval=
900
;VasExperts-Restrict-User=
1
# Атрибуты, отправляемые в CoA при необходимости ограничить доступ
sa.radius.disable.attributes=VasExperts-Restrict-User=
1
# Атрибуты, отправляемые в CoA при необходимости включить доступ
sa.radius.enable.attributes=VasExperts-Restrict-User=
0
# Id фиктивного сервиса, к которому будут привязываться сессии, по которым нормальный сервис не был найден (код ошибки: 1, логин не найден).
# Необходим, если в radius.disable.accessCodes присутствует код 1
#radius.disable.servId=
# Шаблон опций-параметров сессий (1 - опция-папка, в которой содержатся опции-Service-Profile, 2 - опция-папка, в которой содержаться опции-Policing-Profile)
# В конфигурации опций, соответственно, указано serviceProfile= и policingProfile=
#radius.inetOption.1.template=VasExperts-Service-Profile=$serviceProfile;VasExperts-Policing-Profile=$policingProfile
radius.inetOption.
1
.template=VasExperts-Service-Profile=
$serviceProfile
radius.inetOption.
2
.template=VasExperts-Policing-Profile=
$policingProfile
# Атрибуты сессии, которые отправляются в CoA (для того, чтобы СКАТ идентифицировал, для какой сессии запрос)
sa.radius.connection.attributes=Acct-Session-Id
# Не сбрасывать сессию при включении/отключении доступа (а менять параметры, отправлять CoA)
sa.radius.connection.withoutBreak=
1
# Префикс набора опций для ServiceActivator (используем тот же набор, что используется для выдачи в Access-Accept)
sa.radius.option.attributesPrefix=radius.inetOption.
# Проверка на повторную аутентификацию при Access-Request. Бывает нужна в случаях, когда NAS сбрасывает (теряет) сессию, но
# Stop-пакет не присылает и клиент пытается подключиться повторно, но у него стоит ограничение на максимум одну сессию. При совпадении
# callingStationId с одной из активных сессий и установленным параметром: 1 - осуществляется попытка закрытия старой сессии (connectionClose),
# 2 - попытка закрытия сессии (connectionClose) и завершение ее в базе, не дожидаясь стоп пакета, 3 - завершение в базе.
#radius.connection.checkDuplicate=0
# Должен ли поиск по логину идти без учета регистра. По умолчанию - нет (0).
#radius.username.ignoreCase=0
# Параметры активации сервисов
# длина паузы, если возникла ошибка
#sa.error.pause=60
# количество заданий за раз
#sa.batch.size=20
# время (сек) ожидания завершения всех заданий (при асинхронной работе)
#sa.batch.wait=5
# пауза (сек) после обработки заданий
#sa.batch.pause=0
# время (сек) ожидания новой задачи перед вызовом disconnect.
#sa.batch.waitNext=5
О выдаче IP-адреса и других параметрах при работе с RADIUS читайте здесь.
IPoE
IP Subscriber
Схема аналогична Cisco IP Subscriber c инициацией сессии по IP-пакету - Unclassified source MAC address (For Layer 2-connected IP subscribers, a new IP session is triggered when an IP packet with an unclassified source MAC address (which means that an IP session does not yet exist for that MAC address) is received). Абонент получает динамический или статический адрес по DHCP от InetAccess-сервера биллинга, далее в InetAccess от СКАТ приходит Access-Request с User-Name=<IP-адрес абонента>, биллинг находит по указанному <IP-адрес абонента> и выдает параметры доступа в RADIUS-ответе СКАТ'у.
Для работы необходимо настроить InetDhcpProcessor, чтобы InetAccess выступал DHCP-сервером и абонент получал IP-адрес от биллинга.
В inet-access.xml и inet-accounting.xml необходимо вместо:
<!-- Cоздание процессора radius-пакетов -->
<
bean
name
=
"radiusProcessor"
class
=
"ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor"
/>
указать:
<!-- Cоздание процессора radius-пакетов -->
<
bean
name
=
"radiusProcessor"
class
=
"ru.bitel.bgbilling.modules.inet.radius.InetRadiusHelperProcessor"
/>
В конфигурации корневого устройства указать в параметре radius.key.deviceTypeIds ID типа устройства СКАТ DPI:
radius.key.deviceTypeIds=<
ID
типа устройства СКАТ
DPI
>
Чтобы отключить проверку пароля при RADIUS-аутентификации, в типе устройства "СКАТ DPI" укажите:
# Нужно ли проверять пароль: 0 - нет (например, для IPoE), 1 (по умолчанию) - да.
radius.password.verification=
0
DCHP-RADIUS Proxy
СКАТ может выступать как DHCP-Proxy, конвертируя DHCP-запросы от абонентов в RADIUS-запросы к биллингу:
RADIUS-запрос Access-Request имеет следующие атрибуты:
User-Name - MAC-адрес из DHCP-запроса в формате XX:XX:XX:XX:XX:XX. Для Q-in-Q-сетей в качестве User-Name возможно использовать QinQ-теги, см. ниже.
User-Password - значение fastpcrf.conf-параметра dhcp_user_psw. Этот параметр задает пароль именно для DHCP Radius proxy режима. Если параметр не задан - используется параметр user_password Radius-сервера.
NAS-IP-Address - если DHCP-запрос содержит IP-адрес Relay-агента, то в данный атрибут подставляется этот адрес. Если Relay-агента нет - атрибут содержит виртуальный IP-адрес СКАТ из fastdpi.conf-параметра bras_arp_ip. По значению данного атрибута можно определить, из какой подсети пришел Radius-запрос (от какого Relay-агента).
NAS-Port-Type - содержит значение fastpcrf.conf-параметра radius_attr_nas_port_type для данного Radius-сервера.
NAS-Port - только для VLAN-сетей (с одним VLAN): номер VLAN.
NAS-Port-Id: только для QinQ-сетей (с двойным VLAN): содержит VLAN-ы в строковом виде через '/', например: «123/67».
Framed-IP-Address - этот атрибут содержит IP-адрес абонента, присутствует только если IP-адрес абонента известен.Session-Timeout – опциональный атрибут, задает время действия авторизации в секундах. Значение 0 игнорируется. По истечении этого времени статус авторизации пользователя устанавливается в “неизвестен”, что приводит к отправке запроса на авторизацию Access-Request.
При этом в Access-Accept необходимо выдать User-Name, который далее будет передаваться в RADIUS-Accounting от СКАТ. Поэтому в типе сервиса необходимо установить галочку "логин", чтобы у сервиса было какое-то значение в поле Логин (автоматически сгенерированное или указанное вручную).
При использовании Q-in-Q СКАТ может передавать VLAN-ы в поле User-Name, поэтому в поле Логин можно просто указывать значение которое он присылает, например, 123.1000. Справочник ресурсов VLAN при этом не используется, проверяется только уникальность логинов.
# Поддержка Access-Request для активного соединения
radius.connection.accessRequest=
1
# Поиск по логину
radius.servSearchMode=
0
radius.realm.default.attributes=Acct-Interim-Interval=
60
;VasExperts-Enable-Service=
9
:on
;
MS
-Primary-
DNS
-Server=
8
.
8
.
8
.
8
;
MS
-Secondary-
DNS
-Server=
8
.
8
.
4
.
4
radius.realm.default.attributes.macros=User-Name=
$login
;VasExperts-
DHCP
-Gateway=
$ipGate
;Framed-
IP
-Netmask=
$ipSubnetMask
;VasExperts-
DHCP
-
DNS
=
$ipDns
Если же в биллинге Вы указываете SVLAN в дереве устройств, а VLAN - в сервисе (используя VLAN-ресурсы), то можно настроить поиск по SVLAN (указанный в устройстве дерева) агентского устройства и по VLAN - сервиса договора (абонента). Для извлечения номера VLAN из Access-Request в типе устройства в поле Обработчик процессора протокола должен быть указан CoAProtocolHandler, а в RADIUS-Accounting будет использоваться поиск по логину:
# Поддержка Access-Request для активного соединения
radius.connection.accessRequest=
1
# Поиск по VLAN, при неудачном поиске - поиск по логину
radius.servSearchMode=
4
,
0
# Атрибуты, выдаваемые в Access-Accept
# статические атрибуты
radius.realm.default.attributes=Acct-Interim-Interval=
60
;Session-Timeout=
86400
;VasExperts-Enable-Service=
9
:on
;
MS
-Primary-
DNS
-Server=
8
.
8
.
8
.
8
;
MS
-Secondary-
DNS
-Server=
8
.
8
.
4
.
4
# динамические атрибуты
radius.realm.default.attributes.macros=User-Name=
$login
;VasExperts-
DHCP
-Gateway=
$ipGate
;Framed-
IP
-Netmask=
$ipSubnetMask
;VasExperts-
DHCP
-
DNS
=
$ipDns
# Извлечение VLAN
# vendor radius-атрибута
radius.vlan.vendor=-
1
# тип атрибута (Nas-Port-Id)
radius.vlan.type=
87
# префикс, если есть
radius.vlan.prefix=
# regex
radius.vlan.pattern=^\d+/(\d+)
# Извлечение SVLAN
radius.agentSvlan.vendor=
87
radius.agentSvlan.type=-
1
radius.agentSvlan.prefix=
radius.agentSvlan.pattern=^(\d+)/\d+
При использовании VLAN (без Q-in-Q) можно настроить поиск сервиса по VLAN (для извлечения номера VLAN из RADIUS-пакета в типе устройства в поле Обработчик процессора протокола должен быть указан CoAProtocolHandler):
# Поддержка Access-Request для активного соединения
radius.connection.accessRequest=
1
# Поиск по VLAN, при неудачном поиске - поиск по логину
radius.servSearchMode=
4
,
0
# Атрибуты, выдаваемые в Access-Accept
# статические атрибуты
radius.realm.default.attributes=Acct-Interim-Interval=
60
;Session-Timeout=
86400
;VasExperts-Enable-Service=
9
:on
;
MS
-Primary-
DNS
-Server=
8
.
8
.
8
.
8
;
MS
-Secondary-
DNS
-Server=
8
.
8
.
4
.
4
# динамические атрибуты
radius.realm.default.attributes.macros=User-Name=
$login
;VasExperts-
DHCP
-Gateway=
$ipGate
;Framed-
IP
-Netmask=
$ipSubnetMask
;VasExperts-
DHCP
-
DNS
=
$ipDns
# Извлечение VLAN
# vendor radius-атрибута
radius.vlan.vendor=-
1
# тип атрибута (Nas-Port)
radius.vlan.type=
5
# префикс, если есть
#radius.vlan.prefix=
# regex
#radius.vlan.pattern=
При выдаче Access-Accept можно использовать макросы $login, $identifier, $ipGate, $ipSubnetMask, $ipDns:
radius.realm.default.attributes.macros=VasExperts-
DHCP
-Gateway=
$ipGate
;Framed-
IP
-Netmask=
$ipSubnetMask
;VasExperts-
DHCP
-
DNS
=
$ipDns
В случае, если абонент сам назначил себе адрес, то в Access-Request придет c атрибутом Framed-IP-Address. Для того, чтобы биллинг проверил, что данный адрес есть в сервисе абонента и выдал в Access-Accept его же, укажите в конфигурации устройства:
# выдавать в Access-Accept адрес из Framed-IP-Address Access-Request'а, если присутствует
radius.address.fromRequest=
1
# выполнять проверку адреса из Framed-IP-Address Access-Request'а
radius.address.fromRequest.check=
1
Session-Timeout – опциональный атрибут, задает время действия авторизации в секундах. Значение 0 игнорируется. По истечении этого времени статус авторизации пользователя устанавливается в “неизвестен”, что приводит к отправке запроса на авторизацию Access-Request.
Для поддержки Access-Request для активного соединения в конфигурации необходимо указать:
# Поддержка Access-Request для активного соединения
radius.connection.accessRequest=
1
Статический IP-адрес
Если абонентам назначается статический IP-адрес, то в этом случае биллинг не обязательно должен быть DHCP-сервером (но может им быть и выдавать одни и те же адреса, указанные в сервисе договора). Адрес (или подсеть) должен быть указан в сервисе на договоре абонента. Для того, чтобы для сервисов работал поиск по IP-адресу, в конфигурации типа сервиса нужно указать:
# Для сервисов данного типа работает поиск по статическому IP-адресу при аутентификации
serv.search.address=
1
При добавлении этого параметра в уже существующий тип сервиса, требуется перезапуск Access и Accounting, чтобы уже созданные сервисы подгрузились и находились по их IP-адресу.
Чтобы при RADIUS-аутентификации поиск происходил по IP-адресу, в конфигурации типа устройства СКАТ DPI укажите:
# Поиск сервиса по IP-адресу
radius.servSearchMode=
7
PPPoE и IPoE одновременно
В этом режиме СКАТ будет присылать RADIUS-пакеты для обоих режимов с одними и теми же NAS-Identifier и NAS-IP-Address, но скорее всего для разных типов доступа Вам нужно будет выдавать разные RADIUS-атрибуты и использовать разные настройки биллинга.
Чтобы решить эту проблему, мы предлагаем настроить два типа доступа как два разных устройства-NAS'а. Создайте три типа устройства, например, FastDPI, FastDPI.IPoE и FastDPI.PPPoE. Для типа устройства FastDPI укажите обработчик процессора протокола SkatOverrideNasProtocolHandler. Создайте устройство данного типа, укажите в поле Хост IP-адрес NAS'а, в поле Идентификатор - NAS-Identifier (например, VasExperts.FastDPI ). Запрос будет приходить на это устройство, а далее, в зависимости от типа услуги обрабатываться устройством с Идентификатором равным идентификатору данного устройства плюс суффикс (.IPoE или .PPPoE).
Создайте два устройства-NAS'а, настройте их, как описано выше, но поле Хост в них оставьте пустым, а в поле Идентификатор укажите идентификатор с соответсвующим суффиксом (.IPoE или .PPPoE). Т.е., если Nas-Identifier у нас VasExperts.FastDPI , то в устройстве типа FastDPI в поле Идентификатор указано VasExperts.FastDPI , в устройстве типа FastDPI.IPoE - VasExperts.FastDPI.IPoE , в устройстве типа FastDPI.PPPoE - VasExperts.FastDPI.PPPoE .
Т.к. поле Хост мы оставляем пустым (чтобы не было путаницы с одинаковыми NAS-IP при обработке RADIUS-пакета), чтобы CoA/PoD запросы отправлялись - в конфиге устройст в FastDPI.IPoE и FastDPI.PPPoE нужно указать IP-адрес СКАТ в параметре :
# Хост для отправки PoD и CoA-запросов (по умолчанию - хост, заданный в параметрах устройства Хост/порт)
radius.host=x.x.x.x
Чтобы по RADIUS-Accounting атрибутам также можно было определить тип услуги, в Access-Accept устройства FastDPI.IPoE дополнительно выдаем атрибут class="IPoE":
# статические атрибуты
radius.realm.default.attributes=
Class
=IPoE;Acct-Interim-Interval=
60
;VasExperts-Enable-Service=
9
:on
;
MS
-Primary-
DNS
-Server=
8
.
8
.
8
.
8
;
MS
-Secondary-
DNS
-Server=
8
.
8
.
4
.
4
Теперь для биллинга запросы будут обрабатываться как от двух разных NAS'ов и настройки для них могут быть абсолютно разными. Устройствам FastDPI.IPoE и FastDPI.PPPoE в дереве не обязательно быть потомками устройства FastDPI.
Так как NAS-Identifier мы подменяем, а в CoA для СКАТ он не нужен, указываем также:
# Атрибуты CoA, идентифицирующие соединение
sa.radius.connection.attributes=
NAS
-Port, Acct-Session-Id, User-Name, Framed-
IP
-Address