CoA/PoD на примере MPD
Материал из BiTel WiKi
| Amir  (Обсуждение | вклад)  (→CoA) | D71  (Обсуждение | вклад)  м  | ||
| (10 промежуточных версий не показаны.) | |||
| Строка 1: | Строка 1: | ||
| - | = | + | На MPD сервере, в конфигурациооном файле '''mpd.conf''', в секции '''startup:''' , добавить строки: | 
| + | <source lang='bash'> | ||
| + | set radsrv peer <ip-адрес сервера BGInetAccess/BGInetAccounting> secret | ||
| + | set radsrv open | ||
| + | </source> | ||
| - | + | В биллинге: | |
| - | + | Необходимо создать типы устройств Access+Accounting с пустой конфигурацией; FlowAgent, c установленной галочкой "является источником данных" и конфигурацией: | |
| - | + | ||
| <source lang='bash'> | <source lang='bash'> | ||
| - | # | + | # Устройство является источником flow для всех своих дочерних устройств | 
| - | radius. | + | flow.agent.link={@deviceId}:-1 | 
| + | </source> | ||
| + | И тип устройства MPD с конфигурацией: | ||
| + | <source lang='bash'> | ||
| + | # Порт для отправки PoD и CoA запросов (по умолчанию - порт, заданный в параметрах устройства Хост/порт) | ||
| + | # на mpd5 по умолчанию 3799 | ||
| + | #radius.port=<порт устройства> | ||
| - | # | + | # При выдаче access-accept добавлять запись в базу | 
| - | + | # необходимо, если используется reject-to-accept и по старт пакету нельзя определить в каком состоянии соединение | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | #необходимо, если используется reject-to-accept и по старт пакету нельзя определить в каком состоянии соединение | + | |
| connection.start.fromAccept=1 | connection.start.fromAccept=1 | ||
| - | #таймаут перевода соединения в статус suspended при остутствии радиус пакетов | + | # таймаут перевода соединения в статус suspended при остутствии радиус пакетов | 
| connection.suspend.timeout=900 | connection.suspend.timeout=900 | ||
| - | #таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout) | + | # таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout) | 
| connection.close.timeout=900 | connection.close.timeout=900 | ||
| - | # | + | # Атрибуты, выдаваемые при авторизации по реалму default (default - реалм по умолчанию) | 
| radius.realm.default.attributes= | radius.realm.default.attributes= | ||
| - | |||
| - | |||
| - | # | + | # Атрибуты, выдаваемые при rejectToAccept | 
| - | + | ||
| - | + | ||
| - | + | ||
| radius.disable.attributes=mpd-limit=out#1=all shape 32000 pass;mpd-limit=in#1=all rate-limit 32000 pass | radius.disable.attributes=mpd-limit=out#1=all shape 32000 pass;mpd-limit=in#1=all rate-limit 32000 pass | ||
| - | + | ||
| - | + | # Атрибуты, при наличии которых соединение должно считаться в состоянии DISABLE (т.е. с ограниченным доступом) | |
| - | # | + | |
| #radius.disable.pattern.attributes= | #radius.disable.pattern.attributes= | ||
| + | |||
| + | # Привязка кодов опций модуля к атрибутам | ||
| + | # данные атрибуты будут выдаваться в AccessAccept при удачной авторизации и при наличии активных опций в тарифе или сервисе | ||
| + | radius.inetOption.1.attributes=mpd-limit=out#1=all shape 128000 pass;mpd-limit=in#1=all rate-limit 10000000 pass | ||
| + | radius.inetOption.2.attributes=mpd-limit=out#1=all shape 128000 pass;mpd-limit=in#1=all rate-limit 10000000 pass | ||
| + | radius.inetOption.3.attributes=mpd-limit=out#1=all shape 512000 pass;mpd-limit=in#1=all rate-limit 10000000 pass | ||
| + | |||
| + | |||
| + | # Вендор атрибута, где хранится MAC-адрес | ||
| + | #radius.macAddress.vendor=9 | ||
| + | # Код атрибута, где хранится MAC-адрес | ||
| + | #radius.macAddress.type=1 | ||
| + | # Префикс атрибута (если есть), где хранится MAC-адрес. Например, для cisco avpair | ||
| + | #radius.macAddress.prefix=client-mac-address= | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | # | + | # Параметры активации сервисов | 
| - | + | # длина паузы, если возникла ошибка | |
| - | + | ||
| - | #длина паузы, если возникла ошибка | + | |
| #sa.error.pause=60 | #sa.error.pause=60 | ||
| - | #количество заданий за раз | + | # количество заданий за раз | 
| #sa.batch.size=20 | #sa.batch.size=20 | ||
| - | #время (сек) ожидания завершения всех заданий (при асинхронной работе) | + | # время (сек) ожидания завершения всех заданий (при асинхронной работе) | 
| #sa.batch.wait=5 | #sa.batch.wait=5 | ||
| - | #пауза (сек) после обработки заданий | + | # пауза (сек) после обработки заданий | 
| #sa.batch.pause=0 | #sa.batch.pause=0 | ||
| - | #время (сек) ожидания новой задачи перед вызовом disconnect. | + | # время (сек) ожидания новой задачи перед вызовом disconnect. | 
| #sa.batch.waitNext=5 | #sa.batch.waitNext=5 | ||
| - | + | ||
| - | # | + | # Параметры обработчика активации сервисов | 
| - | + | # откуда при отправке CoA брать атрибуты опций (по умолчанию - те же атрибуты, что выдаются при удачной авторизации) | |
| - | + | ||
| - | #откуда при отправке CoA брать атрибуты опций (по умолчанию - те же атрибуты, что выдаются при удачной авторизации) | + | |
| #sa.radius.option.attributesPrefix=nas.radius.inetOption. | #sa.radius.option.attributesPrefix=nas.radius.inetOption. | ||
| #sa.radius.connection.attributes=NAS-Port, Acct-Session-Id, User-Name, Framed-IP-Address, NAS-IP-Address, NAS-Identifier | #sa.radius.connection.attributes=NAS-Port, Acct-Session-Id, User-Name, Framed-IP-Address, NAS-IP-Address, NAS-Identifier | ||
| - | #атрибуты CoA запроса для прекращения доступа (используется при sa.radius.connection.withoutBreak=1) | + | # атрибуты CoA запроса для прекращения доступа (используется при sa.radius.connection.withoutBreak=1) | 
| #sa.radius.disable.attributes={@radius.disable.attributes} | #sa.radius.disable.attributes={@radius.disable.attributes} | ||
| - | #фиксированные атрибуты, добавляемые в запрос перед отправкой CoA | + | # фиксированные атрибуты, добавляемые в запрос перед отправкой CoA | 
| #sa.radius.coa.attributes= | #sa.radius.coa.attributes= | ||
| - | #добавлять ли при отправке CoA атрибуты реалма (для default - из radius.realm.default.attributes) | + | # добавлять ли при отправке CoA атрибуты реалма (для default - из radius.realm.default.attributes) | 
| #sa.radius.realm.addAttributes=0 | #sa.radius.realm.addAttributes=0 | ||
| - | #фиксированные атрибуты, добавляемые в запрос перед отправкой PoD | + | # фиксированные атрибуты, добавляемые в запрос перед отправкой PoD | 
| #sa.radius.pod.attributes= | #sa.radius.pod.attributes= | ||
| </source> | </source> | ||
| + | и выбранными "Обработчиком активации сервисов" ru.bitel.bgbilling.modules.inet.dyn.device.radius.CoAServiceActivator, "Обработчиком процессора протокола" ru.bitel.bgbilling.modules.inet.dyn.device.radius.CoAProtocolHandler. | ||
| - | + | {| | |
| + | |- valign=top | ||
| + | | [[Изображение:Inet_device_type_mpd.png|thumb|800px|Тип устройства]]  | ||
| + | |} | ||
| + | |||
| + | Далее перейти ко вкладке Устройства и добавить последовательно три устройства, каждое новое - дочернее к предыдущему. Первое - с типом Access+Accounting и конфигурацией: | ||
| + | <source lang='bash'> | ||
| + | # Количество потоков на worker'а | ||
| + | accounting.worker.1.thread.count=1 | ||
| + | # Тарификатор: | ||
| + | # минимальная сумма трафика, при которой тарифицировать соединение | ||
| + | accounting.worker.1.tariffication.1.minDeltaAmount=0 | ||
| + | # пауза между заданиями тарификации | ||
| + | accounting.worker.1.tariffication.1.delay=10 | ||
| + | # максимальное количество тарифицируемых соединений за задание | ||
| + | accounting.worker.1.tariffication.1.batchSize=100 | ||
| + | # Трекер (обработка сессий без наработки): | ||
| + | # пауза между заданиями трекинга | ||
| + | accounting.worker.1.tracking.1.delay=20 | ||
| + | # максимальное количество проверенных соединений за задание | ||
| + | accounting.worker.1.tracking.1.batchSize=100 | ||
| + | |||
| + | # Количество потоков на worker'а | ||
| + | accounting.worker.2.thread.count=1 | ||
| + | # Сброс в базу трафиков и наработки: | ||
| + | # минимальная наработка, при которой сбрасывать соединение в базу | ||
| + | accounting.worker.2.flushing.1.minDeltaAccount=0 | ||
| + | # минимальная сумма трафика, при которой сбрасывать соединение в базу | ||
| + | accounting.worker.2.flushing.1.minDeltaAmount=0 | ||
| + | # пауза между заданиями сброса в базу | ||
| + | accounting.worker.2.flushing.1.delay=20 | ||
| + | # максимальное количество сброшенных соединений в базу за задание | ||
| + | accounting.worker.2.flushing.1.batchSize=500 | ||
| + | |||
| + | # Количество потоков на worker'а | ||
| + | accounting.worker.3.thread.count=1 | ||
| + | # Завершатель соединений: | ||
| + | # пауза между заданиями | ||
| + | accounting.worker.3.finishing.1.delay=20 | ||
| + | # максимальное количество сброшенных соединений в базу за задание | ||
| + | accounting.worker.3.finishing.1.batchSize=500 | ||
| + | |||
| + | |||
| + | # Типы устройств - Nas-ов | ||
| + | radius.deviceTypeIds=3 | ||
| + | |||
| + | # Категории ip адресов из ресурсов, из которых будут выдаваться адреса ("пул", указывается во вкладке "IP ресурсы") | ||
| + | radius.realm.default.ipCategories=4 | ||
| + | |||
| + | # Коды ошибок, при которых вместо reject выдавать accept с заданными атрибутами | ||
| + | # (пользователю выдается серый адрес и устанавливается HTTP-редирект) | ||
| + | radius.disable.accessCodes=1,2,3,4,10,11,12 | ||
| + | # Категории ip адресов из ресурсов, из которых будут выдаваться адреса для отключенных ("пул", указывается во вкладке "IP ресурсы") | ||
| + | radius.disable.ipCategories=3 | ||
| + | </source> | ||
| + | В параметре radius.deviceTypeIds нужно указать Id типа устройства - MPD. | ||
| + | |||
| + | Затем дочернее к нему с типом FlowAgent, с указанием адреса, с которого будет приходить flow трафик в поле "Хост/порт", с путстой конфигурацией. И дочернее к FlowAgent устройство с типом MPD, указанием его идентификатора, хоста и верного secret, с конфигурацией: | ||
| <source lang='bash'> | <source lang='bash'> | ||
| - | # | + | # Хост для отправки PoD и CoA запросов (по умолчанию - хост, заданный в параметрах устройства Хост/порт) | 
| #radius.host=<хост устройства> | #radius.host=<хост устройства> | ||
| - | #порт для отправки PoD и CoA запросов (по умолчанию - порт, заданный в параметрах устройства Хост/порт) | + | # порт для отправки PoD и CoA запросов (по умолчанию - порт, заданный в параметрах устройства Хост/порт) | 
| #radius.port=<порт устройства> | #radius.port=<порт устройства> | ||
| - | #идентификатор - Nas-Identifier (по умолчанию - значение из поля Идентификатор параметров устройства) | + | # идентификатор - Nas-Identifier (по умолчанию - значение из поля Идентификатор параметров устройства) | 
| #radius.identifier=<идентификатор устройства> | #radius.identifier=<идентификатор устройства> | ||
| - | #используемый secret для общения по radius-протоколу (по умолчанию - значение из поля Community/secret параметров устройства) | + | # используемый secret для общения по radius-протоколу (по умолчанию - значение из поля Community/secret параметров устройства) | 
| #radius.secret=<community/sercret устройства> | #radius.secret=<community/sercret устройства> | ||
| </source> | </source> | ||
| - | Далее  | + | Далее отредактировать inet-access.xml в BGInetAccess и inet-accounting.xml в BGInetAccounting, указав уникальный идентификатор для приложения, параметры подключения к БД и к MQ, Id модуля в параметре moduleId, Id устройства Access+Accounting в параметре rootDeviceId (оно будет корневым для данных приложений), и дополнительно, в inet-accounting.xml, в параметре accounting.deviceTypeIds, прописать Id типа устройства Access+Accounting. | 
| + | |||
| {| | {| | ||
| |- valign=top | |- valign=top | ||
| - | | [[Изображение: | + | | [[Изображение:Inet_device_mpd.png|thumb|800px|Устройства]]   | 
| |} | |} | ||
| + | |||
| + | Необходимо создать тип сервиса во вкладке "Типы сервисов". В настройках типа сервиса указывается, какие поля будут доступны при добавлении/редактировании сервиса на договоре. В нашем случае это устройство (нас) и логин/пароль.  | ||
| + | {| | ||
| + | |- valign=top | ||
| + | | [[Изображение:Inet coa serv type.png|thumb|800px|Тип сервиса]]  | ||
| + | |} | ||
| + | Если нет необходимости привязывать сервис договора к определенному устройству (насу или группе насов), то можно указать в конфиге типа сервиса Id устройства Access+Accounting, чтобы оно привязывалось автоматически к каждому созданному сервису: | ||
| + | <source lang='bash'> | ||
| + | const.device.id=<постоянный код устройства для всех сервисов данного типа> | ||
| + | </source> | ||
| + | |||
| + | Для того, чтобы изменять свойства соединения, например, скорость, необходимо использовать опции модуля Inet. | ||
| + | {| | ||
| + | |- valign=top | ||
| + | | [[Изображение:Inet_option_mpd.png|thumb|800px|Опции]]  | ||
| + | |} | ||
| + | Опции, собранные в группу, по умолчанию не пересекаются, т.е. не может быть одновременно более одной активной опции из группы - после тарификации активной будет последняя установленная опция (или последняя опция из сервиса, если она указана на сервисе). | ||
| + | |||
| + | При изменении набора активных опций будет произведена отправка CoA пакета. Содержимое Access-Request или CoA-Request пакетов зависит от набора активных опций модуля Inet - атрибуты привязываются к кодам опций через параметры конфигурации radius.inetOption.x. | ||
Текущая версия на 01:41, 11 февраля 2014
На MPD сервере, в конфигурациооном файле mpd.conf, в секции startup: , добавить строки:
set radsrv peer <ip-адрес сервера BGInetAccess/BGInetAccounting> secret set radsrv open
В биллинге: Необходимо создать типы устройств Access+Accounting с пустой конфигурацией; FlowAgent, c установленной галочкой "является источником данных" и конфигурацией:
# Устройство является источником flow для всех своих дочерних устройств flow.agent.link={@deviceId}:-1
И тип устройства MPD с конфигурацией:
# Порт для отправки PoD и CoA запросов (по умолчанию - порт, заданный в параметрах устройства Хост/порт) # на mpd5 по умолчанию 3799 #radius.port=<порт устройства> # При выдаче access-accept добавлять запись в базу # необходимо, если используется reject-to-accept и по старт пакету нельзя определить в каком состоянии соединение connection.start.fromAccept=1 # таймаут перевода соединения в статус suspended при остутствии радиус пакетов connection.suspend.timeout=900 # таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout) connection.close.timeout=900 # Атрибуты, выдаваемые при авторизации по реалму default (default - реалм по умолчанию) radius.realm.default.attributes= # Атрибуты, выдаваемые при rejectToAccept radius.disable.attributes=mpd-limit=out#1=all shape 32000 pass;mpd-limit=in#1=all rate-limit 32000 pass # Атрибуты, при наличии которых соединение должно считаться в состоянии DISABLE (т.е. с ограниченным доступом) #radius.disable.pattern.attributes= # Привязка кодов опций модуля к атрибутам # данные атрибуты будут выдаваться в AccessAccept при удачной авторизации и при наличии активных опций в тарифе или сервисе radius.inetOption.1.attributes=mpd-limit=out#1=all shape 128000 pass;mpd-limit=in#1=all rate-limit 10000000 pass radius.inetOption.2.attributes=mpd-limit=out#1=all shape 128000 pass;mpd-limit=in#1=all rate-limit 10000000 pass radius.inetOption.3.attributes=mpd-limit=out#1=all shape 512000 pass;mpd-limit=in#1=all rate-limit 10000000 pass # Вендор атрибута, где хранится MAC-адрес #radius.macAddress.vendor=9 # Код атрибута, где хранится MAC-адрес #radius.macAddress.type=1 # Префикс атрибута (если есть), где хранится MAC-адрес. Например, для cisco avpair #radius.macAddress.prefix=client-mac-address= # Параметры активации сервисов # длина паузы, если возникла ошибка #sa.error.pause=60 # количество заданий за раз #sa.batch.size=20 # время (сек) ожидания завершения всех заданий (при асинхронной работе) #sa.batch.wait=5 # пауза (сек) после обработки заданий #sa.batch.pause=0 # время (сек) ожидания новой задачи перед вызовом disconnect. #sa.batch.waitNext=5 # Параметры обработчика активации сервисов # откуда при отправке CoA брать атрибуты опций (по умолчанию - те же атрибуты, что выдаются при удачной авторизации) #sa.radius.option.attributesPrefix=nas.radius.inetOption. #sa.radius.connection.attributes=NAS-Port, Acct-Session-Id, User-Name, Framed-IP-Address, NAS-IP-Address, NAS-Identifier # атрибуты CoA запроса для прекращения доступа (используется при sa.radius.connection.withoutBreak=1) #sa.radius.disable.attributes={@radius.disable.attributes} # фиксированные атрибуты, добавляемые в запрос перед отправкой CoA #sa.radius.coa.attributes= # добавлять ли при отправке CoA атрибуты реалма (для default - из radius.realm.default.attributes) #sa.radius.realm.addAttributes=0 # фиксированные атрибуты, добавляемые в запрос перед отправкой PoD #sa.radius.pod.attributes=
и выбранными "Обработчиком активации сервисов" ru.bitel.bgbilling.modules.inet.dyn.device.radius.CoAServiceActivator, "Обработчиком процессора протокола" ru.bitel.bgbilling.modules.inet.dyn.device.radius.CoAProtocolHandler.
Далее перейти ко вкладке Устройства и добавить последовательно три устройства, каждое новое - дочернее к предыдущему. Первое - с типом Access+Accounting и конфигурацией:
# Количество потоков на worker'а accounting.worker.1.thread.count=1 # Тарификатор: # минимальная сумма трафика, при которой тарифицировать соединение accounting.worker.1.tariffication.1.minDeltaAmount=0 # пауза между заданиями тарификации accounting.worker.1.tariffication.1.delay=10 # максимальное количество тарифицируемых соединений за задание accounting.worker.1.tariffication.1.batchSize=100 # Трекер (обработка сессий без наработки): # пауза между заданиями трекинга accounting.worker.1.tracking.1.delay=20 # максимальное количество проверенных соединений за задание accounting.worker.1.tracking.1.batchSize=100 # Количество потоков на worker'а accounting.worker.2.thread.count=1 # Сброс в базу трафиков и наработки: # минимальная наработка, при которой сбрасывать соединение в базу accounting.worker.2.flushing.1.minDeltaAccount=0 # минимальная сумма трафика, при которой сбрасывать соединение в базу accounting.worker.2.flushing.1.minDeltaAmount=0 # пауза между заданиями сброса в базу accounting.worker.2.flushing.1.delay=20 # максимальное количество сброшенных соединений в базу за задание accounting.worker.2.flushing.1.batchSize=500 # Количество потоков на worker'а accounting.worker.3.thread.count=1 # Завершатель соединений: # пауза между заданиями accounting.worker.3.finishing.1.delay=20 # максимальное количество сброшенных соединений в базу за задание accounting.worker.3.finishing.1.batchSize=500 # Типы устройств - Nas-ов radius.deviceTypeIds=3 # Категории ip адресов из ресурсов, из которых будут выдаваться адреса ("пул", указывается во вкладке "IP ресурсы") radius.realm.default.ipCategories=4 # Коды ошибок, при которых вместо reject выдавать accept с заданными атрибутами # (пользователю выдается серый адрес и устанавливается HTTP-редирект) radius.disable.accessCodes=1,2,3,4,10,11,12 # Категории ip адресов из ресурсов, из которых будут выдаваться адреса для отключенных ("пул", указывается во вкладке "IP ресурсы") radius.disable.ipCategories=3
В параметре radius.deviceTypeIds нужно указать Id типа устройства - MPD.
Затем дочернее к нему с типом FlowAgent, с указанием адреса, с которого будет приходить flow трафик в поле "Хост/порт", с путстой конфигурацией. И дочернее к FlowAgent устройство с типом MPD, указанием его идентификатора, хоста и верного secret, с конфигурацией:
# Хост для отправки PoD и CoA запросов (по умолчанию - хост, заданный в параметрах устройства Хост/порт) #radius.host=<хост устройства> # порт для отправки PoD и CoA запросов (по умолчанию - порт, заданный в параметрах устройства Хост/порт) #radius.port=<порт устройства> # идентификатор - Nas-Identifier (по умолчанию - значение из поля Идентификатор параметров устройства) #radius.identifier=<идентификатор устройства> # используемый secret для общения по radius-протоколу (по умолчанию - значение из поля Community/secret параметров устройства) #radius.secret=<community/sercret устройства>
Далее отредактировать inet-access.xml в BGInetAccess и inet-accounting.xml в BGInetAccounting, указав уникальный идентификатор для приложения, параметры подключения к БД и к MQ, Id модуля в параметре moduleId, Id устройства Access+Accounting в параметре rootDeviceId (оно будет корневым для данных приложений), и дополнительно, в inet-accounting.xml, в параметре accounting.deviceTypeIds, прописать Id типа устройства Access+Accounting.
Необходимо создать тип сервиса во вкладке "Типы сервисов". В настройках типа сервиса указывается, какие поля будут доступны при добавлении/редактировании сервиса на договоре. В нашем случае это устройство (нас) и логин/пароль.
Если нет необходимости привязывать сервис договора к определенному устройству (насу или группе насов), то можно указать в конфиге типа сервиса Id устройства Access+Accounting, чтобы оно привязывалось автоматически к каждому созданному сервису:
const.device.id=<постоянный код устройства для всех сервисов данного типа>
Для того, чтобы изменять свойства соединения, например, скорость, необходимо использовать опции модуля Inet.
Опции, собранные в группу, по умолчанию не пересекаются, т.е. не может быть одновременно более одной активной опции из группы - после тарификации активной будет последняя установленная опция (или последняя опция из сервиса, если она указана на сервисе).
При изменении набора активных опций будет произведена отправка CoA пакета. Содержимое Access-Request или CoA-Request пакетов зависит от набора активных опций модуля Inet - атрибуты привязываются к кодам опций через параметры конфигурации radius.inetOption.x.





