Задача: предоставить клиенту возможность пользоваться услугой 2 часа в будние дни и разрешить скачивание 1 ГБ трафика за отведенное время, блокировка доступа должна произойти после исчерпания предоставленной квоты по времени или по трафику, отмена блокировки должна произойти в 7:00 по часовому поясу клиента, клиент находится в Екатеринбурге. В момент блокировки нужно разрешить доступ до https://eltex-co.ru/, все остальные HTTP/HTTPS запросы перенаправлять на страницу блокировки.
Для решения поставлено задачи нужно использовать сценарии PCRF. Сценарий это последовательность сервисов. Сервисы, используемые в сценарии должны быть конечны, они должны иметь условие перехода на следующую ступень.
Это может быть:
обычный лимит по времени или трафику, при истечении которого пользователь попадает на следующую ступень сценария;
крон-лимит, выставляется выражение в формате quartz cron в нем указывается время в которое нужно перевести пользователя на следующую ступень.
Также в настройках сценария доступно ключевое слово again, обозначающее, что пользователь должен вернуться в начало сценария и продолжить получать услугу. В этом случае лимиты по отдельным ступеням взводятся снова.
Предполагается что SoftWLC и BRAS уже настроены и введены в эксплуатацию.
Версии программного обеспечения: SoftWLC 1.13 |
Для выполнения поставленной задачи нужно создать два списка welcome и white_list. Список welcome используется при повторной авторизации клиентов, создается при первичной настройке SoftWLC для работы с BRAS.
В Личном Кабинете переходит на вкладку Настройки PCRF → URL списки
Данный список должен содержать адрес портала
http://10.10.5.50:9000/eltex_portal/ |

Данный список должен содержать адрес ресурса который будет доступен в момент блокировки, для удобства задаем адрес в виде регулярного выражения
^(https|http):\/\/eltex-co\.ru\/ |

В Личном Кабинете переходим на вкладку Сервисы и тарифы → Сервисы PCRF
Данный сервис будет выступать нулевой ступенью в нашем сценарии. В сервисе задаем квоту по времени и трафику согласно условиям задачи

Класс трафика – INTERNET, данный класс трафика должен разрешать доступ по всем протоколам;
ip access-list extended INTERNET
rule 10
action permit
enable
exit
exit |
Данный сервис будет выступать первой ступенью в нашем сценарии. Сервис будет блокировать доступ в интернет, все HTTP/HTTPS запросы будут перенаправлены на страницу портала "Доступ запрещен", доступ к https://eltex-co.ru/ по HTTP/HTTPS будет открыт.

Класс трафика – WELCOME, данный класс должен разрешать доступ по портам которые проксируются на BRAS
ip access-list extended WELCOME
rule 1
action permit
match protocol tcp
match destination-port 443
enable
exit
rule 2
action permit
match protocol tcp
match destination-port 8443
enable
exit
rule 3
action permit
match protocol tcp
match destination-port 80
enable
exit
rule 4
action permit
match protocol tcp
match destination-port 8080
enable
exit
rule 5
action permit
match protocol tcp
match destination-port 9000
enable
exit
exit |
Добавляем правило URL фильтрации с действием permit и URL списком welcome, данный фильтр нужен что бы разрешить доступ в странице портала "Доступ запрещен".
Добавляем правильно URL фильтрации с действием permit и URL списком white_list, данный фильтр нужен что бы разрешить доступ до https://eltex-co.ru
Через дополнительное меню
задаем время сброса блокировки

Сброс блокировки учитывает timezone клиента, ее нужно указать в настройках сервисного домена в EMS, если в домене клиента не указана timezone будет произведен поиск вверх по дереву, если в родительских доменах timezone не указана снятие блокировки будет проходит по UTC ± 0:00. Timezone задается в настройках доменов в EMS
|
В Личном Кабинете переходим на вкладку Сервисы и тарифы → PCRF сценарии
Добавляем ранее созданные сервисы в сценарий, сервисы будут выдаться сверху вниз

На нулевой ступени клиент получит сервис с квотами (limit2h1Gb) , после исчерпания квот ему будет выдана первая ступень с сервисом блокировки (blocking), данный сервис будет действовать до момент сброса сервиса. После сброса сервиса клиент перейдет на вторую степень и переключится снова на нулевую ступень.
В Личном Кабинете переходим на вкладку Сервисы и тарифы → Тарифы, меняем фильтр на PCRF/BRAS
Добавляем новый тарифный план и выбираем ранее созданный сценарий limit

| После создания тарифного плана его нужно назначить на портал клиента и выбрать данные портал для работы. Для схемы L2 выбора портала производится в Личном Кабинете Настройки PCRF → Подсети L2, для схемы L3 выбор портала производится в EMS (Менеджер SSID). |
Интервал запуска CheckCronBrasVerticle настраивает в конфигурации PCRF в блоке bras.cron.update.interval
"bras.cron.update.interval": {
"interval" : 1,
"unit": "hours"
}, |
По умолчанию интервал запуска 1 час, для увеличения числа проверок нужно изменить данный параметр и перезапустить PCRF, например для запуска каждые 1800 секунд:
"bras.cron.update.interval": {
"interval" : 1800,
"unit": "Seconds"
}, |
Клиент проходит регистрацию на портале и получает настроенный сценарий, в mongo можно увидеть на какой ступени находится клиент и какие у него сервисы:
> use pcrf
switched to db pcrf
> db.scripts.find({"user_name" : "79139001234"}).pretty();
{
"_id" : "5d0c9359cc4e0c72ceb395ff",
"domain" : "Auto1_test.Sibir.OTT.root",
"title" : "limit",
"user_name" : "79139001234",
"step" : 0
}
> db.service.find({"user_name" : "79139001234"}).pretty();
{
"_id" : "5d0c9359cc4e0c72ceb39600",
"user_domain" : "Auto1_test.Sibir.OTT.root",
"user_name" : "79139001234",
"service_list" : {
"limit2h1Gb" : {
"service_domain" : "root",
"quota_time" : NumberLong(7200),
"quota_volume" : NumberLong(1073741824)
},
"blocking" : {
"service_domain" : "root",
"quota_cron" : "06/24/2019 - 07:00:00 YEKT"
}
}
} |
Клиент находится на нулевой степени сценария, в сценарии два сервиса limit2h1Gb и blocking. Далее возможно два пути развития:
Если клиент использовал свою квоту, PCRF отправит CoA запрос (command=services-reauth) на BRAS и переведет клиента на следующую ступень сценария, BRAS перезапросит сервисы у PCRF, PCRF выдаст данные новой ступени. В mongo изменится step в коллекции scripts и возведутся квоты для сервиса limit2h1Gb.
|
В назначенное время PCRF просмотрит данные в коллекции service, если клиент находится на нулевой ступени, PCRF возведет квоты в исходное состояние, если клиент находится на первой ступени PCRF, переключит его на следующую ступень, т.е. служебное слово "again". В debug логах PCRF можно увидеть такие строки:
==> /var/log/eltex-pcrf/eltex-pcrf-service.log <==
2019-06-21T16:09:16,955 [vert.x-eventloop-thread-2] DEBUG CheckCronBrasVerticle ?.(line:). Current time 2019-06-21T09:09:16.955Z
2019-06-21T16:09:17,070 [vert.x-eventloop-thread-2] DEBUG CheckCronBrasVerticle ?.(line:). Imagine time 06/21/2019 - 14:09:00 +0500
2019-06-21T16:09:17,071 [vert.x-eventloop-thread-2] DEBUG CheckCronBrasVerticle ?.(line:). Value {"quota_cron":"06/21/2019 - 14:09:00 +0500","service_domain":"root"}
2019-06-21T16:09:17,071 [vert.x-eventloop-thread-2] DEBUG CheckCronBrasVerticle ?.(line:). service_name blocking, cronTime 2019-06-21T14:09+05:00, service_domain root
2019-06-21T16:09:17,071 [vert.x-eventloop-thread-2] DEBUG CheckCronBrasVerticle ?.(line:). Difference 16
2019-06-21T16:09:17,071 [vert.x-eventloop-thread-2] DEBUG CheckCronBrasVerticle ?.(line:). Start to cron BrasCron(userName=79139001234, userDomain=Auto1_test.Sibir.OTT.root, serviceName=blocking, date=2019-06-21T14:09+05:00[Asia/Yekaterinburg], serviceDomain=root)
2019-06-21T16:09:17,076 [vert.x-eventloop-thread-1] DEBUG ReinitAllSerPersExcCronStrg ?.(line:). Search sessions by name = '79139001234' AND domain = 'Auto1_test.Sibir.OTT.root' for all services: []
2019-06-21T16:09:17,076 [vert.x-eventloop-thread-1] DEBUG ReinitAllSerPersExcCronStrg ?.(line:). Try to get tariff domain for service name=79139001234, domain=Auto1_test.Sibir.OTT.root. Reload from base 25, hashed 41997.
2019-06-21T16:09:17,084 [vert.x-eventloop-thread-2] DEBUG CheckCronBrasVerticle ?.(line:). Successfully all checked
|
В коллекции scripts изменился номер шага:
> db.scripts.find({"user_name" : "79139001234"}).pretty();
{
"_id" : "5d0c9359cc4e0c72ceb395ff",
"domain" : "Auto1_test.Sibir.OTT.root",
"title" : "limit",
"user_name" : "79139001234",
"step" : 2
} |
Когда клиент вернется он получит обновленные сервисы и сможет получить услугу согласно поставленной задаче.
Если в сценарии используется более одного сервиса с квотами и клиент не дошел до сервиса с блокировкой, то после сброса состояния он останется в текущем сервисе с возведенными квотами, т.е. не перейдет на нулевую ступень. При повтором подключении клиент не сможет получить услугу в полном объеме, так как начнет работу с середины пути.