Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных


Описание

Задача: предоставить  клиенту  возможность пользоваться услугой  2 часа в будние дни и разрешить  скачивание 1 ГБ  трафика за отведенное  время, блокировка  доступа  должна произойти  после   исчерпания предоставленной  квоты по  времени или по трафику, отмена блокировки должна произойти в 7:00 по часовому поясу  клиента, клиент находится  в  Екатеринбурге. В момент блокировки нужно  разрешить доступ до https://eltex-co.ru/, все остальные HTTP/HTTPS запросы  перенаправлять на страницу блокировки.

Для решения поставлено задачи  нужно использовать  сценарии PCRF. Сценарий это последовательность сервисов.  Сервисы, используемые в сценарии должны быть конечны, они должны иметь условие перехода на следующую ступень.

Это может быть:

  • обычный лимит по времени или трафику, при истечении которого пользователь попадает на следующую ступень сценария;

  • крон-лимит, выставляется выражение в формате quartz cron в нем указывается время в которое нужно перевести пользователя на следующую ступень.

Также в настройках сценария доступно ключевое слово again, обозначающее, что пользователь должен вернуться в начало сценария и продолжить получать услугу. В этом случае лимиты по отдельным ступеням взводятся снова. 

Предполагается что  SoftWLC и BRAS  уже настроены и введены  в эксплуатацию.

Версии программного обеспечения:

SoftWLC 1.13 
PCRF требуется  лицензия для работы  сценариев
ESR  1.6.2


Создание URL списков

Для  выполнения поставленной задачи нужно   создать два списка welcome и white_list. Список  welcome  используется при повторной авторизации клиентов, создается при  первичной настройке SoftWLC  для работы с BRAS.

В Личном Кабинете переходит  на  вкладку Настройки PCRF → URL  списки

Создание списка welcome 

Данный список  должен  содержать  адрес  портала 

http://10.10.5.50:9000/eltex_portal/


Создание списка white_list

Данный список  должен  содержать  адрес ресурса  который будет доступен в момент  блокировки, для удобства  задаем адрес  в виде регулярного  выражения

^(https|http):\/\/eltex-co\.ru\/


Создание сервисов

В Личном Кабинете переходим на  вкладку  Сервисы и тарифы → Сервисы  PCRF 

Создание сервиса limit2h1Gb

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


  • Класс трафика – INTERNET, данный класс трафика должен разрешать  доступ по всем протоколам;

    ip access-list extended INTERNET
      rule 10
        action permit
        enable
      exit
    exit


  • Квота  по  времени – 2 часа, согласно  условиям задачи;
  • Квота по трафику – 1 Гб согласно  условиям задачи;
  • Интервал отправки  аккаунтинга – 300 секунд;
  • Приоритет – 10, сервисы с более низким приоритетом  обрабатываются  в первую очередь;
  • Действие по умолчанию - permint 

Создание сервиса blocking

Данный сервис  будет выступать  первой  ступенью в нашем  сценарии. Сервис  будет блокировать   доступ  в интернет,  все 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
  • Интервал отправки  аккаунтинга – 300 секунд;
  • Приоритет – 10, сервисы с более низким приоритетом  обрабатываются  в первую очередь;
  • Действие по умолчанию – redirect
  • URL по умолчанию   – http://<ip address>:9000/eltex_portal/access-denied.jsp, ссылка на страницу  "Доступ запрещен", можно создать  свою  собственную  старицу через  Конструктор порталов

Добавляем правило URL фильтрации  с действием  permit и URL  списком welcome, данный фильтр  нужен что бы разрешить  доступ в странице  портала "Доступ запрещен".

Добавляем   правильно   URL  фильтрации с действием permit и URL  списком white_list, данный фильтр  нужен  что бы разрешить  доступ  до  https://eltex-co.ru 

Через дополнительное   меню   задаем  время  сброса блокировки



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

Создание  сценария PCRF

В Личном Кабинете переходим на  вкладку Сервисы и тарифы → PCRF сценарии

Создание  сценария  limit

Добавляем  ранее созданные сервисы  в сценарий,  сервисы  будут  выдаться сверху  вниз

На нулевой  ступени клиент  получит сервис с квотами (limit2h1Gb) , после  исчерпания  квот  ему  будет выдана первая ступень с  сервисом блокировки (blocking), данный сервис будет  действовать до  момент  сброса  сервиса. После  сброса сервиса  клиент перейдет на  вторую степень  и переключится  снова на нулевую  ступень.

Создание  тарифного  плана

В Личном Кабинете переходим на  вкладку  Сервисы и тарифы → Тарифы, меняем  фильтр  на  PCRF/BRAS

Создание  тарифного плана limitTP

Добавляем   новый  тарифный  план и выбираем  ранее созданный  сценарий limit

  • Наименование – название limitTP;
  • Код  тарифа – может совпадать  с наименованием limitTP;
  • Домен – так как  тарифный  план   может быть применен к разным клиентам создаем  его в корневом домене root;
  • Время жизни сессии – задаем  время  жизни  сессии на BRAS. Если  сессия клиента закрывается по  причине  исчерпания  времени жизни и клиент  активен в данный момент, текущая сессия будет завершена и запустится новая  сессия, клиент  пройдет прозрачную  авторизацию через mac-auth;
  • Время жизни сессии при бездействии пользователя –  время бездействия  пользователя, если за данный интервал  времени от пользователя не поступило  активности  считается что клиент отключился и его  сессия завершатся.
  • Интервал отправки аккаунтинга – 300 cекунд;
  • Сценарий – выбираем ранее созданный сценарий.
После создания тарифного плана  его нужно  назначить на портал клиента и выбрать данные портал для работы. Для схемы L2 выбора портала производится в Личном Кабинете Настройки PCRF → Подсети L2, для схемы L3 выбор портала производится  в EMS (Менеджер SSID).

Интервал запуска CheckCronBrasVerticle

Интервал запуска  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.

     scripts
    > db.scripts.find({"user_name" : "79139001234"}).pretty();
    {
            "_id" : "5d0c9359cc4e0c72ceb395ff",
            "domain" : "Auto1_test.Sibir.OTT.root",
            "title" : "limit",
            "user_name" : "79139001234",
            "step" : 1
    }
  • Если клиент не использовал  свою  квоту и отключился от сети его сессия будет закрыта по бездействию через 10 минут, т.е. он останется  на нулевой ступени  сценария.

В назначенное время 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
}

Когда клиент вернется он получит  обновленные сервисы  и сможет получить  услугу согласно поставленной задаче.

Известные ограничения 

Если в сценарии  используется  более одного сервиса с квотами и клиент  не дошел до сервиса с блокировкой, то после  сброса  состояния он останется в текущем сервисе с возведенными квотами, т.е. не перейдет на нулевую ступень. При повтором подключении клиент не сможет получить услугу в полном объеме, так как начнет работу с середины  пути.


  • Нет меток