...
Поиск NAS'а для пришедшего пакета производится сначала по атрибуту NAS-Identifier с поиском по идентификатору устройства, затем, если устройство не найдено, по NAS-IP-Address с поиском по хостам устройств. Сессия сервиса привязывается к устройству, представляющему NAS.
Поиск сервиса/логина
При авторизации поиск сервиса Inet может осуществляться как по логину, так и по интерфейсу или VLAN'у. Для указания режима поиска необходимо прописать в конфигурации устройства-NAS'а или в конфиге любого его устройства-предка параметр:
...
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
# Включение (1, по умолчанию) или отключение (0) проверки пароля для NAS'а
#radius.password.verification=1 |
RADIUS-атрибуты
Когда сервис определён, определяется набор атрибутов сессии, последовательным добавлением:
- - атрибутов, определённых для реалма;-
- атрибутов, определенных для сервиса(логина);
- атрибутов, определённых для опций.
Атрибуты задаются перечислением <имя атрибута>=<значение> через точку с запятой, если в значении атрибута должна присутствовать точка с запятой (т.е. это не разделение двух разных атрибутов), то её нужно указать два раза: ";;".
Атрибуты реалма
Атрибуты реалма определяются в конфигурации устройства-NASа следующим образом:
...
Якорь |
---|
| inet_radius_inet_option |
---|
| inet_radius_inet_option |
---|
|
Есть возможность добавлять динамические атрибуты, с помощью макросов:
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
radius.realm.<realm>.attributes.macros=<attributes>
radius.realm.default.attributes.macros=Interface-Name=$ipParam(ifaceName) |
Запись атрибутов производится в таком же виде, как и в параметрах radius.realm.<realm>.attributes, однако здесь поддерживаются макросы вида $имя или $имя(параметр1,параметр2), например:
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
radius.realm.default.attributes.macros=Interface-Name=$ipParam(ifaceName) |
Поддерживаются следующие макросы:
- $ipGate - значение поля "Роутер" IP-ресурса, из которого выдан IP-адрес;
- $ipDns - значение поля "DNS" IP-ресурса, из которого выдан IP-адрес;
- $ipSubnetMask - значение поля "Маска подсети" IP-ресурса, из которого выдан IP-адрес;
- $ipParam(name) - значение параметра конфигурации IP-ресурса, из которого выдан IP-адрес, аргумент макроса - имя параметра, например $ipParam(ifaceName) вернет значение параметра ifaceName= конфигурации IP-ресурса;
- $param($device,name,default) - значение параметра конфигурации устройства-NAS'а или агентского устройства (коммутатора), указывается так: $param($device,myParam,myDefault) или $param($agentDevice,myParam,myDefault)
Атрибуты опций
Полный набор опций сессии определяется объединением опций, указанных в самом сервисе и опций из тарифного плана. Соответствие кодов опций атрибутам определяется в конфигурации устройства-NASа следующим образом:
Якорь |
---|
| inet_radius_inet_option |
---|
| inet_radius_inet_option |
---|
|
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
radius.inetOption.<option_id>.attributes=<attributes> |
Где:
- <option_id> - числовой код опции;
- <attributes> - RADIUS атрибуты.
Пример конфигурации, где определены атрибуты для реалмов и опций:
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
radius.realm.default.attributes=Service-Name:1=RSE-SVC-EXT;Service-Options:1=1
radius.inetOption.1.attributes=Service-Parameter:1=Rate=100000 Burst=12500000
radius.inetOption.2.attributes=Service-Parameter:1=Rate=100000 Burst=12500000 |
Атрибуты сервиса/логина
Атрибуты специфичные для типа сервиса можно прописать в конфигурации типа сервиса:
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
serv.radius.<realm>.default.attributes= |
При необходимости выдавать специфичные атрибуты (значения) индивидуально для сервиса, в конфигурации типа сервиса укажите
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
param.myParam.title=Мой параметр |
Теперь на вкладке "Дополнительно" в редакторе сервиса на договоре можно будет добавить данный параметр, указав его значение. Теперь этот параметр можно использовать при выдаче RADIUS-атрибутов, прописав в конфигурации типа сервиса, в том же параметре serv.radius.<realm>.default.attributes атрибут с помощью макроса:
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
serv.radius.<realm>.default.attributes=My-Attribute=$myParam |
Выдача IP-адреса
Якорь |
---|
| inet_radius_realm_ip |
---|
| inet_radius_realm_ip |
---|
|
Выдача IP-адреса производится через атрибут Framed-IpIP-Address, либо из диапазона (адреса), указанного в самом сервисе, либо, если он не указан или занят - из пула, определённого в конфигурации устройства параметром
Якорь |
---|
| inet_radius_realm_ip |
---|
| inet_radius_realm_ip |
---|
|
radius.realm.<realm>.ipCategories=<cat_codes>, где:
...
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
radius.realm.default.ipCategories=4 |
Reject-To-Accept
В случае ошибки авторизации высылается пакет AUTHENTICATION_REJECT с отображением ошибки и её кода в мониторе модуля. Допустимые коды ошибок данного процессора.
...
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
# Атрибуты, выдаваемые при ошибке авторизации
radius.disable.attributes=
# атрибуты, выдаваемые при ошибке авторизации с кодом 1 (сервис/логин не найден), 2 или 3#radius3
#radius.disable.1,2,3.attributes=
# атрибуты с использованием макросов
#radius.disable.attribute.macros= |
Атрибуты из опций Inet в данном режиме не выдаются.
Для поддержки Reject-To-Accept при ошибке с кодом 1 (Логин не найден), т.е. для предоставления гостевого доступа, необходимо создать договор с балансом меньше лимита и сервисом модуля Inet со статусом закрыт, а id сервиса прописать в конфигурации устройства:
...
При превышении числа сессий над ограничением, установленным для сервиса, генерируется ошибка авторизации. Данная ошибка также может быть обработана механизмом Reject-To-Accept с выдачей адреса из пула фиктивных адресов.
MAC-адрес и идентификатор
При RADIUS Access-Request можно также использовать MAC-адрес, чтобы авторизовывать запросы только с определенным MAC-адресом. MAC-адрес из Access-Request пакета устанавливается в Обработчике процессора протокола, в методе preprocessAccessRequest: request.setOption( InetRadiusProcessor.MAC_ADDRESS, macAddress ). Стандартные обработчики процессора протокола, поставляемые с модулем уже реализуют этот функционал, нужно только прописать в конфигурации устройства или типа устройства:
...
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
# Нужно ли автоматически проставлять в сервис идентификатор, если его еще нет.
# Можно указать в конфигурации модуля, конфигурации устройства, конфигурации типа сервиса.
# 0 - не привязывать, 1 - привязывать, если поле сервиса пустое, 2 - перетирать новым значением, 3 - добавлять
# (в последних двух случаях отказа в авторизации по идентификатору не будет)
serv.identifier.auto=1 |
Привязка сервиса к NAS'у или ветке NAS'ов
Для привязки сервиса к устройству - т.е. для того, чтобы клиент мог авторизоваться только на устройстве (NAS'е), привязанному к сервису, или являющимся дочерним по отношению к нему (устройству), необходимо указать в конфигурации устройства/типа устройства/типа сервиса:
Блок кода |
---|
language | ruby |
---|
linenumbers | false |
---|
|
# Привязка авторизации сервиса к устройству, указанному в сервисе договора
# 0 - клиент может авторизоваться на любом устройстве (NAS'е), 1 - клиент может авторизоваться только на прописанном в сервисе устройстве,
# или являющимся дочерним по отношению к нему
serv.device.link=1 |
Действие при получении Access-Request при наличии активной сессии
При подключении абонента может быть ситуация, когда в биллинге сессия еще активнаяактивна, а клиент на самом деле уже отключился и пытается подключиться заново. Это может произойти при потере связи с NAS'ом (т.е. STOP-пакет не пришел, но connection.close.timeout еще не произошел), или, например, при использовании IPoE с Cisco/Redback (когда абонент подключил другое устройство, а Cisco/Redback по таймауту DHCP-lease еще не поняли, что старое соединение можно закрывать). Для обработки такой ситуации можно использовать параметр конфигурации radius.connection.checkDuplicate. Он работает в связке с Calling-Station-Id - если происходит попытка авторизации, а количество активных соединений превышено и среди активных соединений есть соединение с таким же Calling-Station-Id, то при указании radius.connection.checkDuplicate:
...