...
СКАТ может выступать как 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=10 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,10 # Атрибуты, выдаваемые в 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,10 # Атрибуты, выдаваемые в 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-адресу, в конфигурации типа сервиса нужно указать:
...
Чтобы решить эту проблему, мы предлагаем настроить два типа доступа как два разных устройства-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 |