Page tree
Skip to end of metadata
Go to start of metadata

Настройка провижининга

Сетевая служба

В разделе Справочники → Номенклатура, в группе Все → ТМЦ → Сетевые службы → Системные службы добавляем новую позицию:

  • Указываем Код и Наименование, например Абонентская сеть.
  • Ставим флаги Может быть объектом и Операторское оборудование.
  • Нажимаем Добавить.

С помощью кнопки Добавить в разделе Оборудование → Сетевые службы создаём новую службу, в подписках на которую будут храниться логины и пароли. При этом на форме создания службы:

  • В поле Код пишем, например, Internet.
  • В лукапе Тип выбираем созданную на предыдущем этапе номенклатурную позицию Абонентская сеть.
  • В комбобоксе Вид аутентификации указываем По логину и паролю.
  • Устанавливаем флаг

Шаблон профилей абонентского оборудования

В разделе Справочники → Теги добавляем новый тег:


Маркируем в разделе Справочники → Номенклатура данным тегом все тарифы, по которым необходимо предоставлять доступ в Интернет:

В разделе Оборудование → Шаблоны профилей (необходимо право Провижининг → Редактирование шаблонов профилей) создаём новый шаблон:

  1. В поле Тип оборудования указываем номенклатурную позицию абонентского оборудования, например Оконечное оборудование.
  2. В поле Теги услуг выбираем тег, которым промаркировали на предыдущем этапе интернет-тарифы.
  3. Заполняем Наименование.
  4. В блоке Состояние услуги отмечаем состояние Услуга оказывается — только для этого состояния профиль абонентского оборудования будет активен.


  5. Нажимаем на кнопку Добавить — форма создания шаблона сменится формой его редактирования:

С помощью кнопки Добавить на форме редактирования шаблона добавляем в него атрибуты:

ПодстановкаНаименованиеПараметры
Подписка на службуLogin
  • Временной интервал — Прочерк.
  • Группировать профили по значениям — Да.
  • Обязательный атрибут — Да.
  • Заменять значением атрибута дочернего профиля — Нет.
  • Параметры для вычисления:
    • Возвращаемое значение — Логин.
    • Сетевая служба — Internet (Абонентская сеть).
Подписка на службуPassword
  • Временной интервал — Прочерк.
  • Группировать профили по значениям — Да.
  • Обязательный атрибут — Да.
  • Заменять значением атрибута дочернего профиля — Нет.
  • Параметры для вычисления:
    • Возвращаемое значение — Пароль в открытом виде.
    • Сетевая служба — Internet (Абонентская сеть).
Дочерняя строка приказа по ценамSpeed-Upload-kbps
  • Временной интервал — Прочерк.
  • Группировать профили по значениям — Нет.
  • Обязательный атрибут — Да.
  • Заменять значением атрибута дочернего профиля — Нет.
  • Параметры для вычисления:
    • Возвращаемое значение — Скорость.

    • Единица измерения скорости — Кбит/с.

    • Услуга — Интернет-трафик исх.

Дочерняя строка приказа по ценамSpeed-Download-kbps
  • Временной интервал — Прочерк.
  • Группировать профили по значениям — Нет.
  • Обязательный атрибут — Да.
  • Заменять значением атрибута дочернего профиля — Нет.
  • Параметры для вычисления:
    • Возвращаемое значение — Скорость.

    • Единица измерения скорости — Кбит/с.

    • Услуга — Интернет-трафик вх.

Адрес компонента оборудованияStatic-IP
  • Временной интервал — Прочерк.
  • Группировать профили по значениям — Нет.
  • Обязательный атрибут — Нет.
  • Заменять значением атрибута дочернего профиля — Нет.
  • Параметры для вычисления:
    • Тип адреса — IP-адрес.

    • Вид адреса — Фактический адрес.

    • Внешний адрес — Не важно.

    • Состояние адреса — Не важно.

    • Возвращаемое значение — Код.

СтрокаSimultaneous-Use
  • Временной интервал — Прочерк.
  • Группировать профили по значениям — Нет.
  • Обязательный атрибут — Да.
  • Заменять значением атрибута дочернего профиля — Нет.
  • Параметры для вычисления:
    • Возвращаемое значение — 1.

  • При группировке профилей по значениям атрибутов Login и Password Гидра сформирует отдельные профили для каждой пары логин-пароль, если у абонента их будет указано несколько.

  • Ограничения скорости необходимо указать в приказе по ценам для соответствующих потоковых услуг в составе каждого интернет-тарифа. Примеры настройки ПЦ для услуг передачи данных описаны в руководстве пользователя, в разделе Основные операции → Cоздание тарифных планов и услуг → Работа с составами приказов по ценам → Примеры интернет-тарифов.

  • Атрибут Static-IP отмечается как необязательный в предположении, что IP-адреса зафиксированы только у некоторых абонентов. А для большинства адрес выделяется динамически сервером доступа.

  • В атрибуте Simultaneous-Use для агента HARD задаётся ограничение на максимальное количество одновременных сессий. Если ограничение не требуется, данный атрибут можно не добавлять.


Меняем состояние шаблона на Активен и нажимаем Сохранить, после чего переформировываем профили по новому шаблону.

Тип сессий

В разделе Оборудование → Типы сессий (необходимо право Провижининг → Редактирование типов сессий) добавляем новый тип:

  1. Указываем Наименование, например Интернет-сессия.
  2. В комбобоксе Шаблон абонентского профиля выбираем добавленный на предыдущем этапе шаблон Доступ в Интернет.
  3. В полях Шаблон операторского профиля и Тип привязки оставляем прочерки: в данном случае профили операторского оборудования не используются.
  4. Устанавливаем флаг Удалять подстановки без значений из команд.
  5. В поле Команды → Прерывание вводим шаблон команды принудительного завершения сессии:

    /usr/local/hydra-scripts/kill_session.sh -s "{SESSION.VC_EXT_ID}" -n "{SESSION.NAS-IP-Address}"
  6. Нажимаем кнопку Добавить и форма создания сменяется формой редактирования:
     
  7. Меняем Состояние на Активен и нажимаем Сохранить.

Настройка брокера ActiveMQ

Установку и настройку произведите в соответствии со статьёй Настройка брокера ActiveMQ.

Настройка агента HARD

Установку агента выполните в соответствии со статьёй Установка агента HARD.

Общие параметры

Отредактируйте общий конфигурационный файл агента в соответствии с примером:

/etc/hydra/hard/hard.yml
# Список активных плагинов
enabled_plugins:
  - 'base/ppp-login'

# Логирование
log:
  # Общий лог агента
  common:
    # Уровень логирования: debug для отладки, info для эксплуатации
    level: 'debug'

# Системные фильтры
filters:
  # Базовая HTTP-аутентификация клиента (hard.pm в FreeRADIUS)
  agent.basic_auth:
    main:
      # Логин базовой аутентификации
      login: 'freeradius'
      # Пароль базовой аутентификации
      password: 'freeradius_password'

# Серверные процессы агента
server:
  # IP-адрес сетевого интерфейса для приема запросов
  address: '127.0.0.1'
  # Номер TCP-порта для приема запросов
  port: 11080
  # Количество дочерних процессов агента - обработчиков запросов
  workers: 4

# Подключения к базам данных
connection_pools:
  # Подключение к БД кэша (MongoDB)
  mongo:
    main:
      # IP-адрес mongod
      host: '127.0.0.1'
      # Номер TCP-порта mongod
      port: 27027
      # Наименование базы данных
      name: 'hard_cache'
      # Имя пользователя базы данных
      user: 'hard'
      # Пароль пользователя базы данных
      password: 'mongo_user_password'

  # Подключение к БД провижининга (Oracle)
  database:
    main:
      # Наименование (net service name) базы данных
      name: 'hydra'
      # Имя пользователя базы данных
      user: 'AIS_RADIUS'
      # Пароль пользователя базы данных
      password: 'oracle_user_password'

      # Служебный абонент Гидры
      hydra:
        # Логин пользователя Гидры для доступа к приложению RADIUS-сервер
        user: 'hard'
        # Пароль пользователя Гидры для доступа к приложению RADIUS-сервер
        password: 'hydra_user_password'

# Синхронизация кэша с провижинингом
syncer:
  stomp:
    # IP-адрес сервера ActiveMQ
    host: '127.0.0.1'
    # Номер TCP-порта STOMP-коннектора ActiveMQ
    port: 61613
    # Логин пользователя ActiveMQ
    login: 'hydra'
    # Пароль пользователя ActiveMQ
    password: 'activemq_user_password'

  queues:
    # Наименование ActiveMQ-очереди с сообщениями об изменении профилей оборудования
    profiles: 'hydra_profiles_1'
    # Наименование ActiveMQ-очереди с сообщениями об изменении привязок оборудования
    binds: 'hydra_equipment_binds_1'

В данной конфигурации необходимо изменить значения параметров:

  • Пароль базовой аутентификации модуля hard.pm сервера FreeRADIUS: ключ filters → agent.basic_auth → main → password.
  • Пароль пользователя базы данных кэша: ключ connection_pools → mongo → main → password.
  • Пароль пользователя базы данных провижининга: ключ connection_pools → database → main → password.
  • Пароль пользователя Гидры для доступа к приложению RADIUS-сервер: ключ connection_pools → database → main → hydra → password.
  • Пароль пользователя ActiveMQ: ключ syncer → stomp → password.

В MongoDB добавьте БД hard_cache и пользователя hard для неё в соответствии с описанным в статье Настройка агента HARD примером.

Экземпляр плагина base

Добавьте конфигурационный файл плагина base агента HARD в соответствии с примером:

/etc/hydra/hard/plugins/base-ppp-login.yml
plugins:
  base:
    ppp-login:
      actions:
        authorize:
          customer_profile: &customer_profile
            set_by: search_cache
            query:
              Login: $request.RAD_REQUEST.User-Name
          provider_profile: {}

          reply:
            # Активный абонент
            - condition: $customer_profile.present?()
              template:
                RAD_CHECK:
                  '*': $request.RAD_CHECK.except("Cleartext-Password")
                  Cleartext-Password: $customer_profile.attributes.Password
                result: $rlm.OK

            # Неизвестный или заблокированный абонент
            - condition: $customer_profile.null?()
              template:
                RAD_CHECK:
                  Auth-Type: '"Reject"'
                result: $rlm.REJECT

        authenticate:
          customer_profile:
            <<: *customer_profile
          provider_profile: {}

          reply:
            # Достигнуто ограничение на количество одновременных сессий
            - condition: $context.has_tag?('simultaneous-limit-exceeded')
              template:
                RAD_REPLY:
                  Reply-Message: '"You are already logged in"'
                result: $rlm.REJECT

            # Динамический IP-адрес
            - condition: $customer_profile.attributes.Static-IP.empty?()
              template:
                RAD_REPLY: &rad_reply_dynamic_ip
                  Acct-Interim-Interval: '"300"'
                  Mikrotik-Rate-Limit: '  $customer_profile.attributes.Speed-Upload-kbps + "k"
                                        + "/"
                                        + $customer_profile.attributes.Speed-Download-kbps + "k"'
                result: $rlm.OK

            # Статический IP-адрес
            - template:
                RAD_REPLY:
                  <<: *rad_reply_dynamic_ip
                  Framed-IP-Address: $customer_profile.attributes.Static-IP
                result: $rlm.OK

        accounting:
          customer_profile:
            <<: *customer_profile
          provider_profile: {}

          session:
            templates:
              - attributes:
                  Calling-Station-Id: $request.RAD_REQUEST.try("Calling-Station-Id")
                  Called-Station-Id: $request.RAD_REQUEST.try("Called-Station-Id")
                  Framed-IP-Address: $request.RAD_REQUEST.Framed-IP-Address
                  NAS-Identifier: $request.RAD_REQUEST.NAS-Identifier
                  NAS-IP-Address: $request.RAD_REQUEST.NAS-IP-Address
                  User-Name: $request.RAD_REQUEST.User-Name
                services:
                  - service_id: 40213501 # Услуга «Интернет-трафик исх.»
                    value: '      $request.RAD_REQUEST.try("Acct-Input-Octets", "0").to_i()
                            + 4 * $request.RAD_REQUEST.try("Acct-Input-Gigawords", "0").to_i().gigabytes()'
                    unit: 'bytes'
                  - service_id: 40213701 # Услуга «Интернет-трафик вх.»
                    value: '      $request.RAD_REQUEST.try("Acct-Output-Octets", "0").to_i()
                            + 4 * $request.RAD_REQUEST.try("Acct-Output-Gigawords", "0").to_i().gigabytes()'
                    unit: 'bytes'

          on_off_attributes:
            NAS-Identifier: $request.RAD_REQUEST.NAS-Identifier
            NAS-IP-Address: $request.RAD_REQUEST.NAS-IP-Address

Загрузчик данных аккаунтинга

В конфигурацию планировщика CRON добавьте настройки для регулярного запуска агента в режиме загрузки данных аккаунтинга в БД провижининга:

/etc/cron.d/hard
# HARD RADIUS accounting loader
*/3 *   * * *   hard    /opt/hydra/hard/init/hard.sh -f /etc/hydra/hard batch &>/dev/null

Настройка сервера FreeRADIUS

Установку и настройку сервера FreeRADIUS выполните в соответствии со статьёй Установка и настройка сервера FreeRADIUS. В модуле hard.pm (файл /etc/freeradius/hard.pm) укажите следующие параметры:

# Параметры для связи с HARD
my @HARD_API_URLS = (                                     # Пул API URL для запросов
  "http://127.0.0.1:11080/base/ppp-login"
);

use constant HARD_AUTH_USER     => "freeradius";          # Логин
use constant HARD_AUTH_PASSWORD => "freeradius_password"; # Пароль

Пароль в константе HARD_AUTH_PASSWORD укажите тот же, что задан в ключе filters → agent.basic_auth → main → password конфигурации агента HARD.

Настройка агента HEX

Установку агента выполните в соответствии со статьёй Настройка агента HEX. Конфигурационный файл отредактируйте в соответствии с примером:

/etc/hydra/hex/hex.yml
log:
  default:
    # Уровень логирования
    level: 'debug'
 
activemq:
  # Хост и порт для подключения к ActiveMQ по протоколу OpenWire
  url: 'tcp://127.0.0.1:61616'
 
hydra:
  # Карта соответствия очередей команд и результатов их выполнения
  command_queues:
    # <Очередь для приёма команд>: <Очередь для отправки результата>
    - 'hydra_commands_1': 'hydra_command_results_1'

 

Добавьте на сервер скрипт для принудительного завершения сессии, путь к которому был указан при создании типа сессии Интернет-сессия. Пример такого скрипта:

/usr/local/hydra-scripts/kill_session.sh
#!/bin/bash

# АСР Гидра
# (с) ООО Латера
# www.hydra-billing.ru | info@latera.ru

# RADIUS-Secret сервера доступа
NAS_SECRET="nas_secret"
# Номер порта для PoD-запросов
NAS_PORT="3799"
# Путь к radclient
RADCLIENT_BIN="/usr/bin/radclient"
# Параметры radclient
RADCLIENT_OPTIONS="-x"

# Запись в вывод ошибок
function echo_err {
    echo "$@" >&2
}

# Некорректное использование
function bad_usage {
    if [[ "x$1" != "x" ]]; then
        echo_err
        echo_err "Error: $1"
        echo_err
    fi
    echo_err "Usage: $0 -s <Acct-Session-Id> -n <NAS-IP-address>"
    echo_err
    echo_err "Required arguments:"
    echo_err "  -s Acct-Session-Id session attribute value"
    echo_err "  -n NAS IP-address"
    exit 123
}

echo "Started as: $0 $@"
while getopts "s:n:" OPT; do
    case "$OPT" in
        s) ACCT_SESSION_ID="$OPTARG"
           ;;
        n) NAS_IP_ADDRESS="$OPTARG"
           ;;
        *) bad_usage "unrecognized option $OPT"
           ;;
    esac
done

if [[ "x$ACCT_SESSION_ID" == "x" ]]; then
    bad_usage "empty session identifier"
fi
if [[ "x$NAS_IP_ADDRESS" == "x" ]]; then
    bad_usage "empty NAS IP-address"
fi
 
# Отправка PoD-запроса
echo "Acct-Session-Id=$ACCT_SESSION_ID" | $RADCLIENT_BIN $RADCLIENT_OPTIONS $NAS_IP_ADDRESS:$NAS_PORT disconnect "$NAS_SECRET"

Агент HEX работает под пользователем hex (hex-testing для тестового экземпляра) — данному пользователю необходимо выдать права на исполнение добавленного скрипта.

Результат

Настроенная схема обеспечивает аутентификацию пользователя по логину и паролю, которые хранятся в Гидре в подписках на сетевую службу Internet (Абонентская сеть).

  • Если логин и пароль корректны, агент HARD проверит количество активных сессий, привязанных к подобранному профилю оборудования и выдаст отказ, если ограничение достигнуто.
  • В ответ на RADIUS-запрос авторизации будут отправлены:
    • Ограничения скорости доступа для входящего и исходящего трафика в соответствии с параметрами тарифа абонента.
    • Интервал передачи сервером доступа пакетов аккаунтинга.
    • IP-адрес, который нужно выдать абоненту, если таковой привязан к компоненту оборудования абонента в Гидре.
  • Для каждой сессии по данным аккаунтинга будет учитываться входящий и исходящий трафик, а также сохраняться значения атрибутов:
    • Calling-Station-Id;
    • Called-Station-Id;
    • Framed-IP-Address;
    • NAS-Identifier;
    • NAS-IP-Address;
    • User-Name.
  • При блокировке абонента из-за нехватки средств при наличии активной сессии будет формироваться команда на её прерывание. В команду будут подставляться параметры прерываемой сессии: её внешний идентификатор и IP-адрес сервера доступа из атрибутов аккаунтинга Acct-Session-Id и NAS-IP-Address соответственно. А выполнять команды на сервере и возвращать результат в Гидру будет агент HEX.
  • No labels