Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

  • 0 - поиск по логину из атрибута User-Name;
  • 1 - поиск по интерфейсу на (найденном) устройстве;
  • 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);
  • 7 - поиск по адресу, указанному в User-Name, из диапазона адресов сервиса (в типе сервиса должно быть указано serv.search.address=1);
  • 9 - поиск по адресу, указанному в User-Name, из диапазона адресов сервиса (в типе сервиса должно быть указано serv.search.address=1) на агентских (дочерних) устройствах;
  • 10 - поиск по MAC-адресу на всех устройствах;
  • 16 - поиск по VLAN + IP (атрибута User-Name) (8.2201+);

Также возможен дополнительный поиск дочернего сервиса:

...

Блок кода
languageruby
linenumbersfalse
# Включение (1, по умолчанию) или отключение (0) проверки пароля для NAS'а
#radiusradius.password.verification=0

Проверку пароля также можно отключить для определенного типа сервиса, указав в его конфигурации:

Блок кода
languageruby
linenumbersfalse
# Включение (1, по умолчанию) или отключение (0) проверки пароля для NAS'а
serv.radius.password.verification=0
Примечание

При отключенной проверке пароля и MS-CHAPv2 аутентификации биллинг не будет отдавать в ответе Access-Accept подпись, т.к. для генерации правильной подписи требуется, чтобы пароль у обеих сторон совпадал.

RADIUS-атрибуты

Когда сервис определён, определяется набор атрибутов сессии, последовательным добавлением:

...

Блок кода
languageruby
titleПример
radius.realm.default.attributes=Acct-Interim-Interval=300;Session-Timeout=604800

 

Якорь
inet_radius_inet_option
inet_radius_inet_option

...

Поддерживаются следующие макросы:

  • $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);
  • $requestAttribute(vendor,type) или $requestAttribute(name) - значение атрибута из запроса, например $requestAttribute(User-Name);
  • $login - логин сервиса (поле Логин);
  • $identifier - идентификатор сервиса (поле Идентификатор);
  • $inetServId - ID сервиса;
  • $contractId - ID договора;
  • $contractTitle - название договора.

Последние макросы также можно использовать для подмены User-Name в аккаунтинге для схем IPoE или для добавления информационного атрибута Class, который затем будет передаваться в RADIUS-аккаунтинге:

Блок кода
languageruby
linenumbersfalse
radius.realm.default.attributes.macros=User-Name=$login;Class=IPoE/$contractId/$inetServId

Или, если User-Name для поиска сервиса мы совсем не используем, можем указать там номер договора для информации или для СОРМ (см. также Пересылка RADIUS-запросов).

Блок кода
languageruby
linenumbersfalse
radius.realm.default.attributes.macros=User-Name=$contractTitle

Атрибуты опций

Полный набор опций сессии определяется объединением опций, указанных в самом сервисе и опций из тарифного плана. Соответствие кодов опций атрибутам определяется в конфигурации устройства-NASа следующим образом:

Якорь
inet_radius_inet_option
inet_radius_inet_option

...

В конфигурации опций-скоростей необходимо указать необходимые значения rate= и burst=. Таким образом отпадает необходимость указания практически одинакового набора атрибутов для каждой опции-скорости в конфигурации устройства, достаточно лишь прописать один раз шаблон. Также значения параметров можно прописать в конфигурации родительской опции, для того чтобы использовать как значения по умолчанию (если значение не переопределено в дочерней опции) или просто как самостоятельную переменную шаблона.

Атрибуты сервиса/логина

Якорь
serv_type_attributes
serv_type_attributes

Атрибуты специфичные для типа сервиса можно прописать в конфигурации типа сервиса:

Блок кода
languageruby
linenumbersfalse
serv.radius.realm.default.attributes=

Для режима Reject-To-Accept (см. далее) пропишите атрибуты в параметре serv.radius.disable.attributes:

Блок кода
languageruby
linenumbersfalse
serv.radius.disable.attributes=

При необходимости выдавать специфичные атрибуты (значения) индивидуально для сервиса, в конфигурации типа сервиса укажите:

Блок кода
languageruby
linenumbersfalse
param.myParam.title=Мой параметр

...

Блок кода
languageruby
linenumbersfalse
# Кэширование выданного абоненту IP-адреса по ключу (для IPoE), по умолчанию - 0 (выкл)
radius.address.authReserveTimeout=3000

Выдача статической подсети

Для того, чтобы в Access-Accept биллинг выдавал подсеть в виде атрибутов Framed-IP-Address и Framed-IP-Netmask, то в типе сервиса нужно указать "Тип адреса": "статическая сеть", а также добавить в конфигурации типа сервиса:

Блок кода
languageruby
linenumbersfalse
# Выдаем в Access-Accept всю подсеть сервиса в виде Framed-IP-Address=<net> и Framed-IP-Netmask=<mask>
serv.radius.staticSubnet=1

Не выдавать адрес из диапазона сервиса

Возможен случай, когда в сервисе или дочернем сервисе нужно указать IP-адрес, диапазон или подсеть, которые будут нужны только для управления. Т.е. задача в том, чтобы из данного сервиса IP-адрес не выдавать. Например, в родительском сервисе мы указываем подсеть, а в дочерних сервисах - разрешенные абоненту IP-адреса из этой подсети (т.е. абонент должен получать адрес из дочерних сервисов, а не из родительского). Для того, чтобы адрес из сервиса не выдавался, в конфигурации типа сервиса нужно указать:

Блок кода
languageruby
linenumbersfalse
# Не выдаем IP-адреса из диапазона этого сервиса
serv.radius.skipStaticAddress=1

Не добавлять Framed-IP-Address в Access-Accept

В некоторых схемах, например, IP Subscriber, не требуется выдавача IP-адреса в Access-Accept, т.к. IP-адрес у абонента уже есть, и адрес в сервисе указан только для того, чтобы найти абонента по нему при запросе Access-Request. В этом случае в конфигурации типа сервиса нужно указать:

Блок кода
languageruby
linenumbersfalse
# Не добавляем Framed-IP-Address в Access-Accept
serv.radius.noAddress=1

Выдача Framed-Route

Для того, чтобы выдавать в Access-Accept абоненту атрибут Framed-Route нужно создать тип сервиса, который будет дочерним, в поле "Тип адреса" выбрать значение "статическая сеть", указать в конфигурации типа сервиса:

Блок кода
languageruby
linenumbersfalse
# Данный сервис используется для указания Framed-Route
serv.radius.framedRoute=1

Выдача адреса из Access-Request

Для того, чтобы InetAccess в Access-Accept просто выдавал Framed-IP-Address из запроса (если он там присутствует), в конфигурации устройства нужно указать:

Блок кода
languageruby
linenumbersfalse
# Выдавать Framed-IP-Address, полученный в Access-Request
radius.address.fromRequest=1

Если при этом необходимо проверять, подходит ли IP-адрес из Access-Request для диапазона адресов или сети договора (например, IPoE в accel-ppp), то в конфигурации устройства необходимо указать:

Блок кода
languageruby
linenumbersfalse
# Проверять Framed-IP-Address, полученный в Access-Request, что он входит в диапазон сервиса договора
radius.address.fromRequest.check=1

Reject-To-Accept

В случае ошибки авторизации высылается пакет AUTHENTICATION_REJECT с отображением ошибки и её кода в мониторе модуля. Допустимые коды ошибок данного процессора.

...

Блок кода
languageruby
linenumbersfalse
# Режим выдачи статического адреса при ошибке авторизации:
# 0 (по умолчанию) - выдавать динамический адрес из категорий radius.disable.ipCategories,
# 1 - выдавать статический адрес как при удачной авторизации, динамический - из категорий radius.disable.ipCategories
# 2 - выдавать адрес (статический или динамический) как при удачной авторизации
radius.disable.mode=1

Если нужно выдавать динамический IP-адрес такой же, как при обычном доступе - то нужно можно прописать в radius.disable.ipCategories те же самые пулы.

...

Блок кода
languageruby
linenumbersfalse
# Атрибуты, выдаваемые при ошибке авторизации
radius.disable.attributes=
# атрибуты, выдаваемые при ошибке авторизации с кодом 1 (сервис/логин не найден), 2 или 3
#radius.disable.1,2,3.attributes=
# атрибуты с использованием макросов
#radius.disable.attributeattributes.macros=

Атрибуты из опций Inet в данном режиме не выдаются.

...

Блок кода
languageruby
linenumbersfalse
# Нужно ли автоматически проставлять в сервис идентификатор, если его еще нет.
# Можно указать в конфигурации модуля, конфигурации устройства, конфигурации типа сервиса.
# 0 - не привязывать, 1 - привязывать, если поле сервиса пустое, 2 - перетирать новым значением, 3 - добавлять
# (в последних двух случаях отказа в авторизации по идентификатору не будет)
serv.identifier.auto=1

Calling-Station-Id

Атрибут Calling-Station-Id используется для подстановки в поле сессии "С номера". При отсутствии данного атрибута можно настроить, чтобы обработчик процессора протокола (CoAProtocolHandler, SmartEdgeProtocolHandler, ISGProtocolHandler и другие) при предобработке RADIUS-запроса устанавливал значение в данный атрибут из другого, например, из атрибутра Mac-Address Redback (ID вендора 2352, ID типа атрибута 145):

Блок кода
languageruby
linenumbersfalse
# Копирование значения в атрибут Calling-Station-Id.
# ID вендора RADIUS-атрибута
radius.callingStationId.vendor=2352
# Тип RADIUS-атрибута
radius.callingStationId.type=145
# Префикс RADIUS-атрибута, если присутствует (будет удален из строки)
#radius.callingStationId.prefix=

Привязка сервиса к NAS'у или ветке NAS'ов

...

При подключении абонента может быть ситуация, когда в биллинге сессия еще активна, а клиент на самом деле уже отключился и пытается подключиться заново. Это может произойти при потере связи с NAS'ом (т.е. STOP-пакет не пришел, но connection.close.timeout еще не произошел), или, например, при использовании IPoE с Cisco/Redback (когда абонент подключил другое устройство, а Cisco/Redback по таймауту DHCP-lease еще не поняли, что старое соединение можно закрывать). Если возникает ошибка о превышении количества активных сессий, то по умолчанию биллинг выдает Access-Reject или же срабатывает правило Reject-To-Accept (см. выше). Для изменения обработки такой ситуации можно использовать параметр конфигурации radius.connection.checkDuplicate. Он работает в связке с Calling-Station-Id - если происходит попытка авторизации, а количество активных соединений превышено и среди активных соединений есть соединение с таким же Calling-Station-Id, то при указании radius.connection.checkDuplicate:

  • 0 - не пускаем абонента (по умолчанию);
  • 1 - происходит попытка сброса старого соединения (например, отправка PoD-пакета), абонента на этой авторизации не пускаем;
  • 2 - происходит попытка сброса старого соединения, его завершение в биллинге, абонента на этой авторизации не пускаем, должно пустить при следующей попытке, т.к. старой сессии уже не будет;
  • 3 - происходит завершение старого соединения в биллинге, абонента на этой авторизации не пускаем, должно пустить при следующей попытке, т.к. старой сессии уже не будет;
  • 4 - происходит попытка сброса старого соединения, затем через 5 секунд завершение в биллинге, абонента на этой авторизации не пускаем;
  • 5 - попытка сброса старого соединения в биллинге, завершение и пускаем немедленно (т.е. игнорируется ошибка );
  • 6 - завершение старого соединения в биллинге, пускаем абонента немедленно;
  • 7 - попытка в течении 5 секунд сбросить соединение, затем закрытие сессии в биллинге с ожиданием полного выполнения закрытия (т.е. IP-адрес станет свободным), пускаем абонента
  • 8 - попытка сброса и сразу закрытие в биллинге с ожиданием полного выполнения закрытия (т.е. IP-адрес станет свободным), пускаем абонента;
  • 9 - закрытие старого соединения в биллинге с ожиданием полного выполнения закрытия (т.е. IP-адрес станет свободным), пускаем абонента.

...

Для обработки ситуации, когда количество активных соединений превышено, но соединения с таким Calling-Station-Id не найдено, и нужно отключить сбросить просто самое старое соединение, нужно указать цифру во втором разряде, например: 88.

...

Подсказка

Т.к. параметр 8 и 9 (закрытие в биллинге с ожиданием полного выполнения закрытия, т.е. IP-адрес станет свободным) ожидает полного завершения соединения в биллинге, а необходимо такое ожидание только для некоторых схем, например, статических адресов, то рекомендуется задавать этот параметр в типе сервиса. Например, в конфигурации NAS'а radius.connection.checkDuplicate=5, в конфигурации типа сервиса для статических адресов radius.connection.checkDuplicate=8.

Предупреждение

Без атрибута Calling-Station-Id в Access-Request-пакете данная функция работать не будет. При невозможности присылать Calling-Station-Id в Access-Request можно настроить подмену в обработчике процессора протокола (в предобработке RADIUS-запросов).

Блокировка частых Access-Request -> Access-Reject

...

Например, запрос идентифицируется атрибутами User-Name и Calling-Station-Id. При десяти Reject-ответах в течении минуты запрос попадает в спам-базу на полчаса.15 минут:

Блок кода
languageruby
linenumbersfalse
antispam.key.attributes=User-Name,Calling-Station-Id
antispam.reject.count=10
antispam.reject.per.time=60
antispam.ban.time=900

Шифрование и атрибуты MS-CHAPv2

Блок кода
languageruby
linenumbersfalse
# Если установлено в 1 (по умолчанию) - добавление в Access-Accept при MPPE-128 авторизации атрибутов MS_mppe_encryption_types
# (поддержка 128 битного шифрования) и MS_mppe_encryption_policy=1 (шифрование поддерживается) согласно RFC2548
add.mppe.enc.types.and.policy=1